UserForm

M

michel brun

Guest
Dans un UserForm, j'utilise plusieurs zones de textes, TextBox1, TextBox2, TextBox3 ...... que je masque ou que j'affiche en cliquant sur un bouton.
Est-il possible de faire cette opération dans une boucle au lieu d'écrire :
UserForm1TextBox1.visible=true
UserForm1TextBox2.visible=true
UserForm1TextBox3.visible=true......

Merci
 
@

@+Thierry

Guest
Salut Michel,

Sorry Michel, je n'ai pas eu le temps de faire des tests pour trouver une solution à ta question avant Noël...

En fait cestte question simple est bien plus compliquée qu'elle en a l'air...

J'ai fait des essais avec des boucles toutes simples... Et bien sûr que çà ne veut pas marcher... Donc c'est pour çà que tu as posé cette question et c'est probablement pour la même raison que tu n'as pas eu de réponse...
(j'imagine tous ceux qui ont essayé For i = 1 to 10.... TextBox(i) etc etc ... LOL)

Puis j'ai révé de çà... lol (c'est vrai !!)

Si tes TextBox sont nommées TextBox1, TextBox2, TextBox3 et que tu n'as aucun autre control sur ton UserfORm qui commence par "Text"... tu fais tout simplement çà :

Private Sub CommandButton1_Click()
Dim Toto As Control

For Each Toto In Controls
If Left(Toto.Name, 4) = "Text" Then
Toto.Visible = False
End If
Next

End Sub

et bien sur l'inverse pour rétablir en visible = true

Je ne sais pas si ce moyen détourné te convient mais pour moi çà va m'être très utile....
Conclusion : "Voici la démo de l'importance de bien nommer tous les objets d'une manière hiérarchiquement logique en VBA"

Bonne Journée
@+Thierry
 
T

Ti

Guest
il peut être plus simple et plus sûr d'utiliser la propriété "Tag" des contrôles pour ensuite les isoler plus facilement. Dans cet exemple, tu peux donner à tous tes TextBox un tag du genre "Texte". Ensuite il suffit de parcourir la collection de contrôles du userform et de ne retenir que ceux qui ont ce tag, ça donne la procédure suivante :

Private Sub CommandButton1_Click()
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If Ctrl.Tag = "Texte" Then
Ctrl.Visible = False
End If
Next Ctrl
End Sub

Cette façon de faire ne relève pas du bricolage, elle est très fiable, même si on ne pense guère à l'utiliser. Elle m'a été d'un grand secours dans l'écriture de l'éditeur de "Mes Macros".
 
@

@+Thierry

Guest
Salut Ti

Très bien la propriété Tag que tu me fais découvrir. Je me suis posé la question à quoi celà pouvait servir et bien voilà.... !!

Tu précises Me.Controls est-ce que sinon çà virerait tous les Tags identiques des UserForms qui seraient ouverts ? (en mode ShowModal False je suppose, car je n'ai pas essayé)

merci
@+Thierry
 
T

Ti

Guest
Thierry, Me.controls, euh, je ne sais pas ce que ça donnerait si j'omettais le Me (ou le Userform1.controls, qui revient au même), mais certainement ça ne me plairait pas... parce que le simple fait d'ajouter ce Me m'indique immédiatement où je cherche la liste des controles.
Inutile aujourd'hui... mais dans 6 mois, quand j'aurai oublié jusqu'à l'existence de ce truc, ce sera plus simple à lire. Ben oui, on a ses petites manies :)
 

Discussions similaires

Réponses
19
Affichages
955

Statistiques des forums

Discussions
314 653
Messages
2 111 591
Membres
111 208
dernier inscrit
estalavista