OVH Cloud OVH Cloud

Evènements Exit et bouton Annuler

7 réponses
Avatar
Steph_D
Bonsoir,

Je me permets d'ouvrir un nouveau post sur cette question, car malgré les
conseils judicieux de MPI (qui m'ont permis de mieux gérer le QueryClose),
je ne m'en sors toujours pas avec la gestion du bouton Annuler.
J'aimerais pouvoir quitter un formulaire sans tenir compte de ce qui a pu
être saisie par erreur (par exemple une saisie, commencée dans un textbox)
en cliquant simplement sur le bouton Annuler. Avec ce bout de code, Excel ne
me le
permet pas.

Merci d'avance et promis je ne vous embêterai plus ce soir. Bonne fin de
soirée ou début de journée
Steph D

Sub Lance()
Load fmLeMien
fmLeMien.Show
End Sub

Private Sub UserForm_Activate()
txtMonNom.Text = ""
End Sub

Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End Sub

Private Sub cmdOK_Click()
If txtMonNom = "" Then
MsgBox "Saisie obligatoire"
txtMonNom.SetFocus
Exit Sub
End If
Unload Me
End Sub

Private Sub cmdAnnuler_Click()
Unload Me
End Sub

7 réponses

Avatar
michdenis
Bonjour Steph,


Voilà un petit secret, faut pas le dévoiler à tout le monde !!!

Je n'ai retenu que les 2 procédures pertinentes à la petite démonstration :


'Dans le haut du module du formulaire,
'Déclaration de la variable
Dim Ok As Boolean

'------------------------------
Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
cmdAnnuler_Click
If Ok = True Then
'une chaîne de 5 espaces
txtMonNom = " "
Cancel = True
Unload Me
Else
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End If

End Sub
'------------------------------
Sub cmdAnnuler_Click()
Ok = True
End Sub
'------------------------------


Salutations!




"Steph_D" a écrit dans le message de news: 430ce7c2$0$24727$
Bonsoir,

Je me permets d'ouvrir un nouveau post sur cette question, car malgré les
conseils judicieux de MPI (qui m'ont permis de mieux gérer le QueryClose),
je ne m'en sors toujours pas avec la gestion du bouton Annuler.
J'aimerais pouvoir quitter un formulaire sans tenir compte de ce qui a pu
être saisie par erreur (par exemple une saisie, commencée dans un textbox)
en cliquant simplement sur le bouton Annuler. Avec ce bout de code, Excel ne
me le
permet pas.

Merci d'avance et promis je ne vous embêterai plus ce soir. Bonne fin de
soirée ou début de journée
Steph D

Sub Lance()
Load fmLeMien
fmLeMien.Show
End Sub

Private Sub UserForm_Activate()
txtMonNom.Text = ""
End Sub

Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End Sub

Private Sub cmdOK_Click()
If txtMonNom = "" Then
MsgBox "Saisie obligatoire"
txtMonNom.SetFocus
Exit Sub
End If
Unload Me
End Sub

Private Sub cmdAnnuler_Click()
Unload Me
End Sub
Avatar
jps
entre nous, tu as raison d'être discret, denis, avec tous ces gens qui nous
épient...
jps

"michdenis" a écrit dans le message de news:
%
Bonjour Steph,


Voilà un petit secret, faut pas le dévoiler à tout le monde !!!


Avatar
michdenis
Justement, j'espère que tu n'en dévoilera pas le secret ! ;-))

Certaines attentes pourraient être déçu


Salutations!



"jps" a écrit dans le message de news:
entre nous, tu as raison d'être discret, denis, avec tous ces gens qui nous
épient...
jps

"michdenis" a écrit dans le message de news:
%
Bonjour Steph,


Voilà un petit secret, faut pas le dévoiler à tout le monde !!!


Avatar
michdenis
Bonjour Steph,

La façon la plus simple pour valider le contenu des "champs" d'un formulaire, c'est lors d'un clic sur un bouton de commande dont la
seule et unique fonction est de s'assurer que les conditions minimales pour valider cet "enregistrement" sont respectées.

Ceci suppose que le développeur a bien défini ces conditions et qu'il les a traduites dans UNE procédure générale de vérification.

L'événement On_Exit est la première procédure à s'exécuter peu importe ce que l'on fasse. Que ce soit cliquer sur un bouton de
commande ou la sélection d'un autre textbox. Je ne vois pas comment on pourrait empècher cette sub de s'exécuter !
à mon avis de vouloir vérifier si la chaîne de caractères à 5 digits à la sortie du textbox est une perte de temps car lors de la
vérification générale, il va falloir vérifier si ce testbox est vide ou non ... car ce n'est pas la procédure On_exit qui va obliger
l'usager à y entrer pour saisir ces données !

De vouloir utiliser de boutons de commande au moment où on "exige" que l'usager se comporte d'une façon spécifique est inopportum.
tu ne peux pas jouer à la police et tout permettre en même temps !!! c'est l'un ou l'autre !:

Sur l'Événement "enter" , on désactive les boutons "Annuler" et "ok" . L'usager n'aura d'autre choix que de taper 5 caractères.

Seulement à titre d'exemple, voici un bout de code ... tu peux le peaufiner !!!

'------------------------
Private Sub txtMonNom_Enter()

Me.cmdOk.Enabled = False
Me.cmdAnnuler.Enabled = False

End Sub
'------------------------
Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
res = MsgBox("voulez-vous continuer ?", vbCritical + vbYesNo, "Attentiion")
If res = vbNo Then
Me.cmdOk.Enabled = True
Me.cmdAnnuler.Enabled = True
Else
Cancel = True
Me.txtMonNom.SelStart = 0
Me.txtMonNom.SelLength = Len(Me.txtMonNom)
End If
Else
Me.cmdOk.Enabled = True
Me.cmdAnnuler.Enabled = True
End If

End Sub
'------------------------


Salutations!





"Steph_D" a écrit dans le message de news: 430ce7c2$0$24727$
Bonsoir,

Je me permets d'ouvrir un nouveau post sur cette question, car malgré les
conseils judicieux de MPI (qui m'ont permis de mieux gérer le QueryClose),
je ne m'en sors toujours pas avec la gestion du bouton Annuler.
J'aimerais pouvoir quitter un formulaire sans tenir compte de ce qui a pu
être saisie par erreur (par exemple une saisie, commencée dans un textbox)
en cliquant simplement sur le bouton Annuler. Avec ce bout de code, Excel ne
me le
permet pas.

Merci d'avance et promis je ne vous embêterai plus ce soir. Bonne fin de
soirée ou début de journée
Steph D

Sub Lance()
Load fmLeMien
fmLeMien.Show
End Sub

Private Sub UserForm_Activate()
txtMonNom.Text = ""
End Sub

Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End Sub

Private Sub cmdOK_Click()
If txtMonNom = "" Then
MsgBox "Saisie obligatoire"
txtMonNom.SetFocus
Exit Sub
End If
Unload Me
End Sub

Private Sub cmdAnnuler_Click()
Unload Me
End Sub
Avatar
Steph_D
Bonjour MichDenis,

Merci de t'être torturé l'esprit sur ma question ;o))

J'ai testé la procédure suivante secrète qui est parfaite par rapport à ce
que j'ai demandé, à savoir quitter le formulaire sans enregistrement de
données même si une saisie incorrecte ou pas a été effectuée. Mais dans ce
cas, mon bouton OK devient inutile.
J'ai essayé en vain de poser une condition sur la ligne "cmdAnnuler_Click",
du type if cmdAnnuler_Click then etc., ou de chercher avec l'ActiveControl.

Donc je vais suivre tes conseils de sage et utiliser une procédure de
validation générale (avec toutes mes conditions) liée à un bouton plutôt
que l'évènement Exit. Et je me garde sous le coude ta procédure avec
Enter/Exit.

Merci encore
Steph D

Dim Ok As Boolean
'------------------------------
Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
cmdAnnuler_Click
If Ok = True Then
'une chaîne de 5 espaces
txtMonNom = " "
Cancel = True
Unload Me
Else
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End If

End Sub
'------------------------------
Sub cmdAnnuler_Click()
Ok = True
End Sub
Avatar
michdenis
Bonjour Steph,

La procédure proposée est à ignorer. À chaque fois que tu vas sortir du textbox, le formulaire va se fermer pour la seule et unique
raison qu'il est impossible d'interdire l'exécution de son code !


Salutations!


"Steph_D" a écrit dans le message de news: dek79m$rr1$
Bonjour MichDenis,

Merci de t'être torturé l'esprit sur ma question ;o))

J'ai testé la procédure suivante secrète qui est parfaite par rapport à ce
que j'ai demandé, à savoir quitter le formulaire sans enregistrement de
données même si une saisie incorrecte ou pas a été effectuée. Mais dans ce
cas, mon bouton OK devient inutile.
J'ai essayé en vain de poser une condition sur la ligne "cmdAnnuler_Click",
du type if cmdAnnuler_Click then etc., ou de chercher avec l'ActiveControl.

Donc je vais suivre tes conseils de sage et utiliser une procédure de
validation générale (avec toutes mes conditions) liée à un bouton plutôt
que l'évènement Exit. Et je me garde sous le coude ta procédure avec
Enter/Exit.

Merci encore
Steph D

Dim Ok As Boolean
'------------------------------
Private Sub txtMonNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
cmdAnnuler_Click
If Ok = True Then
'une chaîne de 5 espaces
txtMonNom = " "
Cancel = True
Unload Me
Else
If Len(txtMonNom.Text) = 0 Then Exit Sub
If Len(txtMonNom.Text) <= 4 Then
MsgBox "Saisie 5 caractères minimum"
Cancel = True
End If
End If

End Sub
'------------------------------
Sub cmdAnnuler_Click()
Ok = True
End Sub
Avatar
Steph_D
Merci encore MichDenis pour ton aide, je progresse, je progresse ;o)))
Bonne journée
Steph