Userform - Vérifier Remplissage des TextBox
Bonjour à tous,
Me revoilà avec une nouvelle question.. Cette fois-ci j'aurais besoin de vous pour m'aider à simplifier une macro.
Étant débutant en VBA je suis encore très très loin de connaître tous les trucs et astuces.
J'ai tenté d'écrire une macro ayant pour fonction de renvoyer un MsgBox si une ou plusieurs TextBox de mon formulaire ne sont pas remplies. Seulement comme je débute, j'ai l'impression d'avoir fait quelque chose de totalement archaïque et je suis persuadé qu'il y a moyen de faire plus simple, avec une bouche While ou autre.. Le problème est que je ne comprends pas vraiment la syntaxe a adopter pour simplifier tout ça.
Pour résumer, j'aimerais que lorsque je clique sur le bouton Valider de mon formulaire (CommandButton1), mes Textbox soient vérifier et avoir ensuite un "SetFocus" sur ma première Textbox non remplie (ça je ne sais pas vraiment comment l'écrire)
Voilà le code sur lequel je suis parti (Seule la partie "IF" est à revoir, le reste me sert à reporter les données saisies de mon formulaire à ma base de données) :
Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim Colonne As Integer
Dim derligne As Integer
If Len(Me.TextBox15) Or Len(Me.TextBox8) Or Len(Me.TextBox9) Or Len(Me.TextBox10) Or Len(Me.TextBox11) Or Len(Me.TextBox13) Or Len(Me.TextBox18) Or Len(Me.TextBox19) Or Len(Me.TextBox14) = 0 Then
MsgBox "Seul le champ complément d'adresse peut rester vide. Merci de remplir les autres."
If Len(TextBox15) = 0 Then 'NOM
TextBox15.SetFocus
End If
If Len(TextBox8) = 0 Then 'Prénom
TextBox8.SetFocus
End If
If Len(TextBox9) = 0 Then 'Date de naissance
TextBox9.SetFocus
End If
If Len(TextBox10) = 0 Then 'Lieu de naissance
TextBox10.SetFocus
End If
If Len(TextBox11) = 0 Then 'Nationnalité
TextBox11.SetFocus
End If
If Len(TextBox13) = 0 Then 'Adresse
TextBox13.SetFocus
End If
If Len(TextBox18) = 0 Then 'Code Postal
TextBox18.SetFocus
End If
If Len(TextBox19) = 0 Then 'Ville
TextBox19.SetFocus
End If
If Len(TextBox14) = 0 Then 'N° de SS
TextBox14.SetFocus
End If
Cancel = True
Else
derligne = Sheets("Données perso Interimaires").Range("C65000").End(xlUp).Row + 1
For Each ctrl In Userform1.Controls
Colonne = Val(ctrl.Tag)
If Colonne > 0 Then Sheets("Données perso Interimaires").Cells(derligne, Colonne) = ctrl: 'rempli la liste intérimaire
Sheets("Données perso Interimaires").Range("A2:L1000").Sort Key1:=Range("A2"), Order1:=xlAscending 'trie la liste par ordre alpha
Next
End
End If
End Sub
Je fais donc appel aux experts en VBA qui sauront sans doute m'aider à faire plus simple.. Et qui auront sans doute sauter au plafond en voyant tout ça
D'avance merci !!
PS : Existe-t-il une fonction qui voudrait dire "Et/Ou" en VBA ? Ou alors c'est la fonction le "Ou" est-il déjà inclusif ?
EDIT : Je me suis aperçu après envoi que le code dépasse sur le forum, y'a-t-il un moyen pour qu'il apparaisse en entier ?
Bonjour
voila une routine
mettre dans les textBox.Tag ="O"
For L = 2 To 20
If Controls("Textbox" & L).Value = "" And Controls("Textbox" & L).Tag = "O" Then
MsgBox "Champs Obligatoire", , "Alerte"
Controls("Textbox" & L).SetFocus
Exit Sub
End If
Next
A+
Maurice
Bonsoir,
Le fichier permettrait d'opérer les rectifications nécessaires... !
Cordialement.
Bonjour tout le monde ! Bonjour Archer, Bonjour MFerrand.
Désolé de ne pas vous avoir répondu plus tôt, j'étais en congé.
Archer, merci pour cette proposition, je vais la tester de suite ! Effectivement ça a l'air beaucoup plus simple que ce que j'avais écris ahah
MFerrand, effectivement avec le fichier c'aurait été mieux, mais il s'agit d'un fichier assez lourd sur lequel se trouvent plein d'infos confidentiel et je n'étais pas sûr de pouvoir l'anonymiser sans tout planter...
Merci encore pour vos réponses, je reviens vers vous pour vous dire si tout est ok !
Bonne journée