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 !
C'est encore moi, plus j'avance dans l'elaboration de mon fichier plus je rencontre des petits problèmes insoluble pour moi.
J'ai reçu, via ce site, un code qui m’empêche d'activer une macro si tous les textbox d'un userform ne sont pas rempli:
Code:
Sub ValiderUSF2()
Dim ctl As Control
For Each ctl In UserForm2.Controls
If TypeName(ctl) = "TextBox" Then
If ctl.Value = "" Then
MsgBox "Vous devez remplir tous les champs !"
Exit Sub
End If
End If
Next ctl
'Ton code ici, qui sera executé si et seulement si toutes les textbox sont remplis.
End Sub
Le code fonctionne trés bien, mais maintenant cette macro est activée via un "commandbutton"et qui active d'autres actions:
Code:
Private Sub CommandButton4_Click()
'Valider
Call ValiderUSF2
Unload UserForm2
Unload UserForm1
'ActiveWorkbook.Save
UserForm5.Show
End Sub
Avant l'application de ce "commandbutton", lorsque tous les textbox n'étaient pas remplis, le msgbox apparaissait, je cliquais "ok" et la userform restait active. Il ne me restais plus qu'à compléter mon oubli.
Maintenant, dans la même situation, l'action du "commandbutton" suit son petit bonhomme de chemin, me ferme mon userform2 et m'ouvre mon userform5 sans que je ne puisse compléter mon userform2.
Je cherche donc une possibilité de me renvoyer dans le textbox vide de ma userform2
Peut etre une ligne de commande supplémentaire dans ce code:
Code:
Dim ctl As Control
For Each ctl In UserForm2.Controls
If TypeName(ctl) = "TextBox" Then
If ctl.Value = "" Then
MsgBox "Vous devez remplir tous les champs !"
Exit Sub
End If
End If
Next ctl
bonjour charette63
peut être un "truc" dans ce genre variable x en debut de module
Code:
Option Explicit
Dim ctl As Control, x As Boolean
Private Sub CommandButton4_Click()
Call ValiderUSF2
If x = False Then Exit Sub
Unload UserForm2
Unload UserForm1
ActiveWorkbook.Save
UserForm5.Show
End Sub
Sub ValiderUSF2()
x = True
For Each ctl In UserForm2.Controls
If TypeName(ctl) = "TextBox" Then
If ctl.Value = "" Then
MsgBox "Vous devez remplir tous les champs !"
x = False
Exit Sub
End If
End If
Next ctl
End Sub
Private Sub CommandButton4_Click()
Call ValiderUSF2
Unload UserForm2
Unload UserForm1
ActiveWorkbook.Save
UserForm5.Show
End Sub
Sub ValiderUSF2()
Dim ctl As Control
For Each ctl In UserForm2.Controls
If TypeName(ctl) = "TextBox" Then
If ctl.Value = "" Then
ctl.SetFocus 'curseur dans la TextBox
MsgBox "Vous devez remplir tous les champs !"
UserForm2.Hide
UserForm2.Show
End
End If
End If
Next ctl
End Sub
A noter : on peut fermer USF2 même si les TextBox ne sont pas remplies...
Si ça ne convient pas, il faut alors empêcher la fermeture dans une macro QueryClose.
Edit : j'utilise l'instruction End, autrement le code suivant s'exécutera plusieurs fois.
si tu n'as pas besoin de contrôler les contenus vides plusieurs fois, tu peux te contenter d'une seule macro :
Code:
Private Sub CommandButton4_Click()
Dim ctl As Control
For Each ctl In UserForm2.Controls
If TypeName(ctl) = "TextBox" Then
If ctl.Value = "" Then
MsgBox "Vous devez remplir tous les champs !"
ctl.SetFocus
Exit Sub
End If
End If
Next ctl
Unload UserForm2
Unload UserForm1
ActiveWorkbook.Save
UserForm5.Show
End Sub
Bien d'accord avec toi. Le seul intérêt d'avoir 2 macros c'est de pouvoir appeler la macro Valider USF2 autrement, par exemple, comme je l'ai suggéré, depuis une QueryClose.
- 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