OVH Cloud OVH Cloud

BeforeUpdate, Cancel et Undo

3 réponses
Avatar
Stéphane Lavergne
Bonjour,

J'ai 1 zone de liste (Me.Champs) où je peux sélectionner plusieurs valeurs.
Si 1 certaine condition est atteinte (pour plus de commodité, on va dire que
la condition est de 3 sélections),
je veux annuler ma dernière sélection.

J'ai donc mis mon code dans :
Private Sub Champs_BeforeUpdate(Cancel As Integer)
...

Je détecte ma condition :
pour l'exemple
If Me.Champs.ItemsSelected.Count > 3 Then

et dans ce cas, je veux annuler :
MsgBox "Annulation"
Cancel = 1
Me.Champs.Undo
End if
End sub

Mais cela ne fonctionne pas.
A la 4e sélection, j'ai bien la boîte Annulation qui apparait
mais ma 4e sélection ne se déselectionne pas

Je ne comprends pas non plus à quoi sert la ligne :
Cancel = 1
car apparement, c'est la ligne :
Me.Champs.Undo
qui devrait annuler la mise à jour


Merci d'avance pour votre aide

Cordialement,

Stéphane Lavergne

3 réponses

Avatar
Raymond
RE.

Essaie de faire ceci sur ton champ de liste qui s'appelle Liste183 par
exemple:

Private Sub Liste183_Click()
Dim C As Integer
Dim I As Variant
For Each I In Me.Liste183.ItemsSelected
If Me!Liste183.Selected(I) = True Then
C = C + 1
End If
Next I
If C > 3 Then
Me!Liste183.Selected(Me.Liste183.ListIndex) = False
End If
End Sub

un 4e clic sera interdit, mais si tu désélectionnes tu pourras à nouveau
sélectionner, sans test d'erreur.

(je t'avais envoyé ce message vers 17 H mais je ne le vois pas)

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stéphane Lavergne" a écrit dans le message de
news:
Bonjour,

J'ai 1 zone de liste (Me.Champs) où je peux sélectionner plusieurs
valeurs.

Si 1 certaine condition est atteinte (pour plus de commodité, on va dire
que

la condition est de 3 sélections),
je veux annuler ma dernière sélection.

J'ai donc mis mon code dans :
Private Sub Champs_BeforeUpdate(Cancel As Integer)
...

Je détecte ma condition :
pour l'exemple
If Me.Champs.ItemsSelected.Count > 3 Then

et dans ce cas, je veux annuler :
MsgBox "Annulation"
Cancel = 1
Me.Champs.Undo
End if
End sub

Mais cela ne fonctionne pas.
A la 4e sélection, j'ai bien la boîte Annulation qui apparait
mais ma 4e sélection ne se déselectionne pas

Je ne comprends pas non plus à quoi sert la ligne :
Cancel = 1
car apparement, c'est la ligne :
Me.Champs.Undo
qui devrait annuler la mise à jour


Merci d'avance pour votre aide

Cordialement,

Stéphane Lavergne




Avatar
Stéphane Lavergne
Merci Raymond

mais...
cela suppose que je dois cliquer dans l'ordre de la liste pour supprimer le
bon 4e

en efffet,
si je selectionne dans cet ordre les éléments n° : 2, 15, 7 et 3,
cela va me désélectionner le n° 15 au lieu du n° 3.

Comme je n'ai pas trouvé de chose qui fonctionne non plus de mon côté,
j'ai juste mis 1 msgbox d'alerte, sans traitement derrière.

Stéphane

"Raymond" a écrit dans le message de
news:3f94217a$0$27030$
RE.

Essaie de faire ceci sur ton champ de liste qui s'appelle Liste183 par
exemple:

Private Sub Liste183_Click()
Dim C As Integer
Dim I As Variant
For Each I In Me.Liste183.ItemsSelected
If Me!Liste183.Selected(I) = True Then
C = C + 1
End If
Next I
If C > 3 Then
Me!Liste183.Selected(Me.Liste183.ListIndex) = False
End If
End Sub

un 4e clic sera interdit, mais si tu désélectionnes tu pourras à nouveau
sélectionner, sans test d'erreur.

(je t'avais envoyé ce message vers 17 H mais je ne le vois pas)

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stéphane Lavergne" a écrit dans le message de
news:
Bonjour,

J'ai 1 zone de liste (Me.Champs) où je peux sélectionner plusieurs
valeurs.

Si 1 certaine condition est atteinte (pour plus de commodité, on va dire
que

la condition est de 3 sélections),
je veux annuler ma dernière sélection.

J'ai donc mis mon code dans :
Private Sub Champs_BeforeUpdate(Cancel As Integer)
...

Je détecte ma condition :
pour l'exemple
If Me.Champs.ItemsSelected.Count > 3 Then

et dans ce cas, je veux annuler :
MsgBox "Annulation"
Cancel = 1
Me.Champs.Undo
End if
End sub

Mais cela ne fonctionne pas.
A la 4e sélection, j'ai bien la boîte Annulation qui apparait
mais ma 4e sélection ne se déselectionne pas

Je ne comprends pas non plus à quoi sert la ligne :
Cancel = 1
car apparement, c'est la ligne :
Me.Champs.Undo
qui devrait annuler la mise à jour


Merci d'avance pour votre aide

Cordialement,

Stéphane Lavergne







Avatar
Raymond
Bonjour.

ça désélectionne le dernier composé qui est en trop, si j'ai bien travaillé.

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stéphane Lavergne" a écrit dans le message de
news:
Merci Raymond

mais...
cela suppose que je dois cliquer dans l'ordre de la liste pour supprimer
le

bon 4e

en efffet,
si je selectionne dans cet ordre les éléments n° : 2, 15, 7 et 3,
cela va me désélectionner le n° 15 au lieu du n° 3.

Comme je n'ai pas trouvé de chose qui fonctionne non plus de mon côté,
j'ai juste mis 1 msgbox d'alerte, sans traitement derrière.

Stéphane