Unload me redéclenche Frame1.exit

  • Initiateur de la discussion Initiateur de la discussion cibleo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cibleo

XLDnaute Impliqué
Bonsoir le forum,

Cliquez sur le bouton "Recherche Montants" pour faire apparaître le formulaire.

Cliquez maintenant sur le bouton "Lancer la recherche" en laissant les 2 textbox vides.

L'événement Frame1.exit se déclenche et me propose une fonction MsgBox dans le cas des 2 textbox vides.
VB:
Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Control, rep As Byte
For Each c In Frame1.Controls
If TypeOf c Is MSForms.TextBox Then
If c.Name = "TextBox2" Then
If c.Value <> "" Then
If Val(c.Value) <= Val(TextBox1.Value) Then
MsgBox "Vous devez entrer une valeur supérieure dans le 2ème champ !"
c.Value = ""
Cancel = True
End If
Exit Sub
End If
' If TextBox2 = "" And TextBox1 = "" Then
' MsgBox "Vous devez remplir les 2 champs !"
' Cancel = True
' Exit Sub
' End If
If TextBox2 = "" And TextBox1 = "" Then
rep = MsgBox("Voulez-vous remplir les 2 champs ?", vbYesNo + vbQuestion, "Validation")
If rep = vbYes Then Cancel = True: Exit Sub
Unload Me: Exit Sub
End If
MsgBox "Vous devez entrer une valeur dans le 2ème champ !"
Cancel = True 'bloque le curseur dans le textbox
End If
End If
Next c
End Sub

Si oui le focus se place bien sur textbox1.
Si non je décharge le formulaire et là problème :

Unload me rédéclenche Frame1.exit et fait apparaitre une seconde fois la MsgBox.
Je pense plutôt à une erreur de conception.

Comment l'éviter ?

Merci Cibleo

PS : J'utilise Frame1.exit car l'événement Textbox2.exit ne se déclenchait pas à cause du Frame.
 

Pièces jointes

Dernière édition:
Re : Unload me redéclenche Frame1.exit

Salut Cibleo

Une idée qui vaut ce qu'elle vaut
Au tout début de ta procédure, définir un flag
Code:
Dim FlgClose As Boolean

Ensuite ajouter cette sub
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  FlgClose = True
End Sub

Et modifier le code de ta sub Frame
Code:
Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim c As Control, rep As Byte
' Sort de la procédure si on chercher à ferme le formulaire
If FlgClose = True Then Exit Sub
' Sinon
For Each c In Frame1.Controls
...

A+
 
Re : Unload me redéclenche Frame1.exit

Bonsoir cibleo, BrunoM45,

Une autre solution consisterait à désactiver le bouton "Lancer la recherche" à l'affichage du formulaire, puis à tester les valeurs des textbox. Si les conditions valeur1>0, valeur2 >0 et valeur2>valeur1 sont remplies, alors on active le bouton de lancement. Il serait toutefois souhaitable de prévoir un bouton d'annulation pour fermer le formulaire sans renseigner les champs des valeurs.

Espérant avoir aidé.

Cordialement.
 
Re : Unload me redéclenche Frame1.exit

Bonsoir Papou-net

Si je puis me permettre, cela n'empèchera pas l'évènement "Frame1.exit" lors du Unload
Puisque lorsque l'on décharge un formulaire, forcément on sort du Frame 🙂

A+
 
Re : Unload me redéclenche Frame1.exit

Bonsoir Papou-net

Si je puis me permettre, cela n'empèchera pas l'évènement "Frame1.exit" lors du Unload
Puisque lorsque l'on décharge un formulaire, forcément on sort du Frame 🙂

A+

Bonsoir Bruno,

Oui, mais dans mon cas, il n'est plus nécessaire de traiter cet événement puisque les conditions sont testées lors du remplissage des zones de texte.

Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
211
Réponses
2
Affichages
172
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
182
Réponses
4
Affichages
272
Retour