• Initiateur de la discussion Initiateur de la discussion michel brun
  • 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 !

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
 
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
 
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".
 
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
 
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 🙂
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
418
Réponses
2
Affichages
343
Retour