J'ai un UserForm qui contient une bonne 10aine de TextBox me permettant d'alimenter un tableau de clients. C'est assez banal.
Je voudrais savoir s'il est possible de vider toutes les zones de texte d'un seul coup car quand j'ai plusieurs clients à saisir, mon UserForm s'affiche avec les données du client précédent.
Malheureusement non... elles ont toutes un nom pour que je m'y retrouve... sinon NOM, PRENOM, ADRESSE, je ne sais jamais si c'est la 1, la 2 ou la 3 !!!
Est-ce qu'avec un For each TextBox in Userform ça marcherait ?
Si oui, quelle serait la syntaxe exacte car je ne la trouve pas !
Merci Michel je pensais à cette syntaxe en répondant à Olivier mais je ne la retrouvais pas dans mes archives et j'avoue que j'ai du mal à la mémoriser celle-là...
J'ai ce bout de code qui vérifie que mes zones de texte sont bien toutes renseignées
'
'Test des zones de texte pour vérifier qu'elles sont toutes renseignées
'
For Each CTRL In Me.Controls
If ((TypeOf CTRL Is MSForms.TextBox) And (CTRL.Visible = True)) Then
If Len(CTRL.Object.Value) = 0 Then
CTRL.Object.BackColor = &HC0E0FF ' Orange
ERREUR = ERREUR + 1
Else
CTRL.Object.BackColor = &HFFFFFF ' Blanc
End If
End If
Next CTRL
Disons que j'ai les zones nom, prénom, adresse, complément d'adresse, CP et ville.
Comment exclure la zone complément d'adresse du "For Each" vu que cette zone ne concerne pas tout le monde ?
quand les noms de controles sont personnalisées, j'utilise un tableau array contenant les noms de controles, dans ton cas je ferais ceci :
Code:
For Each ctrl In Array("nom", "prénom", "adresse", "CP", "ville")
If Me.Controls(ctrl) = "" Then
Me.Controls(ctrl).Object.BackColor = &HC0E0FF
ERREUR = ERREUR + 1
Else
Me.Controls(ctrl).Object.BackColor = &HFFFFFF
End If
Next ctrl
une possiblilé c'est de mettre le même nom dans le tag du textbox et ensuite on peut tester le tag
si je reprens l'exemple de Michel en mettant à mes textbox concernés le tag "toto"
Code:
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.TextBox Then
If Ctrl.Tag = "toto" Then Ctrl.Object.Value = ""
End If
Next Ctrl
For Each CTRL In Me.Controls
If ((TypeOf CTRL Is MSForms.TextBox) And (CTRL.Visible = True) and (CTRL.tag="toto")) Then
If Len(CTRL.Object.Value) = 0 Then
CTRL.Object.BackColor = &HC0E0FF ' Orange
ERREUR = ERREUR + 1
Else
CTRL.Object.BackColor = &HFFFFFF ' Blanc
End If
End If
Next CTRL