Gérer les Objets VBA par une Variable [Résolu]

Signaler
-
 Adharaax -
Bonjour,

J'ai une petite question, j'essaie d'afficher / Masqer des Zones de Texte selon la sélection dans une liste à choix multiples.
Lorsque la ligne 1 est Sélectionnée, je veux fair apparaitre le Texte 1 et comme ça sur 20 Zones de Texte.

Une boucle For - Nexte me permet de tester chaque lignes de ma liste et c'est là que je bloque.
Comment me servir de ce N° pour afficher / masquer la Zone correspondante ?

Un exemple de ce que je voudrais :
Public Sub List_Change()
For i = 0 to 20
If me.List.selected(i) = True Then
List & i.Visible = True
Else
List & i.Visible = False
End If
Next
End Sub

Merci d'avance

22 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Il était temps (on en a perdu beaucoup pour rien).
Dans le code que tu as eu plus haut de moi === >>
remplacer Controls par ActiveSheet.OLEObjects
Car tes textbox activex sur une feuille de calcul appartiennent à la collection ActiveSheet.OLEObjects. Elles auraient par contre (pour ton information et pour que tu "mesures" bien la nécessité d'être précis) appartenu à la Collection Controls si placées sur un UserForm.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Bonjour,
qu'est List0 (par exemple) (quel type de contrôle est-ce ?)
S'il s'agit d'une textbox ===>>
Controls("list" & i) se réfère à la textbox nommée list0 si i 0, list1 si x 1, etc ...

PS : tu gagnerais probablement beaucoup à utiliser plutôt un groupe de textbox indexées en ce qui concerne ces textboxes

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut

Pas d'indexation possible, c'est du VBA, comme ne le précise pas la catégorie de la question --> Catégorie modifiée

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Une liste à choix multiple est-elle une Listbox pour toi ?


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Ah ! du VBA !
Il manque alors maintenant une précision d'importance : sur quoi sont mes ces contrôles !
Car la réponse est différente dans un cas ou dans l'autre !
Conclusion : on en est au 5ème message par légèreté de l'exposé de la difficulté.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Re,

Tout d'abord merci pour votre attention.
Ensuite je croyais avoir mis ce post au bon endroit, autant pour moi

Donc en ce qui concerne mon pb,
Oui je suis sur VBA Excel (2003)

Mon contrôle est réalisé par une ListBox appelée dans l'exemple List
La List est à choix multiples : MultiSelect à 1

Les Zones à Afficher / Masquer sont de simple Textbox appelées List1 à List20, chacune liée à une ligne de List

Que dire de plus ?
Je veux afficher List1 lorsque la première ligne de List est sélectionnée et Masquer List1 dans le cas contraire
Heu,

Comme j'ai 20 TextBox à gérer, je n'ai pas envie de tester chaque ligne séparément, une boucle serait plus propre.

D'où ma question
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Selon ce que tu dis, tu veux afficher List1 seulement si la 1ere ligne de List est sélectionnée, donc

If List.ListIndex = 0 then 
   List1.Visible = True
Else
   List1.Visible = false
End If


On pourrait simplifier, mais c'est plus compréhensible de cette façon...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
C'est la version pas à pas effectivement.
Mais j'ai 20 fois ce code à entrer, en plus d'autres tris sur ces états (en pyramide)
Le but est donc de créer une boucle en passant en revu les 20 TextBox à la chaîne, selon les Sélection de List
La Variable obtenue pouvant alors être réutilisée tout le long du code

Code Visual Basic :
Public Sub List_Change()
For i = 0 to 19
If me.List.selected(i) = True Then
List & i.Visible = True
Else
List & i.Visible = False
End If
Next
End Sub

En rouge les mentions que je voudrais piloter par variable.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Alors, comme le suggérait ucfoutu, tu peux utiliser Controls

Disons que tes textbox se nomment Textbox1, Textbox2, Textbox3,... et sont dans le même ordre que les lignes de ta liste, tu pourrais tout mettre ça dans une boucle du genre

For I = 0 to List.Listcount - 1
   If list.selected(i) then
      Controls("Textbox" & i - 1). visible = True
   Else
      Controls("Textbox" & i - 1). visible = False
   End If
Next


Je mets -1 parce que les Index d'une Listbox commencent à 0 et tes contrôles commenceraient à 1...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Re-moi :
Je rappelle :
Il manque alors maintenant une précision d'importance : sur quoi sont mis ces contrôles !
Car la réponse est différente dans un cas ou dans l'autre !

Non répondu !
Et c'est maintenant au 11ème message
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
MPi,
J'avais bien vu la mention de "Controls" mentionné par ucfoutu, je cherchais hier la syntaxe exact.
Mais même le bout de code que tu m'à joint ne fonctionne pas.
"Erreur de Compilation, Sub ou Fonction non définie"
Avec Controls surligné en bleu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
J'avais bien vu la mention de "Controls" mentionné par ucfoutu, je cherchais hier la syntaxe exact.
Mais même le bout de code que tu m'à joint ne fonctionne pas.
"Erreur de Compilation, Sub ou Fonction non définie"
Avec Controls surligné en bleu


Cette réponse était valable pour VB6 (ou il n'y avait pas d'ambiguïté quand à l'endroit où se trouvaient tes contrôles).
Sous VBA (maintenant que tu l'as dit) , elle n'est valable que dans un seul cas de figure, qui n'est apparemment pas le tien.
Alors : elle vient quand, la réponse à la question posée deux fois déjà, en en signalant pourtant l'importance ?*
Si tu n'y réponds pas maintenant avec précision, je vais te laisser seul, car cette discussion risque fort, ainsi, de s'éterniser !!!!

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Pouce !
1 Je boss et je n'ai pas pu répondre plus tôt (regarde les heures de poste...
Je me suis juste connecté avant de partir.
2 Je pensait le bout de code de mon premier post plutot explicite (bon pas balisé, maintenant je sais faire)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Blablate moins et réponds, donc !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
238
Et lorsque tu reviendras, fais également très attention à tes précisions.
Je t'avais par ailleuirs demandé :
qu'est List0 (par exemple) (quel type de contrôle est-ce ?
)
ce à quoi tu as répondu par "des textboxes"
Dès que je saurai (enfin et après tant de messages) sur quoi se trouvent tes contrôles (tant en ce qui concerne la listbox que les textboxes, qui pourraient se trouver, en plus, dans des endroits différents entre eux ..), je te donnerai une réponse précise. Mais j'insiste : elle ne sera valable que s'il s'agit bien de textboxes (contrôles activex). Elle serait différente si ces textboxes étaient finalement autre chose encore.*
D'où l'absolue nécessité d'être très précis dans toutes tes réponses.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Je reprend :
Tous mes objets sont issus de la "Boite à outils Controles", modifiables uniquement si je suis en "Mode création"
List est une ListBox à choix multiples (MultiSelect à 1)
List0 à List19 sont des TextBox

Tous sont présent sur la feuille 1 de mon classeur.
Le Code est en Feuil1(Création)

Après si la réponse ne te va pas, c'est très certainement que je n'ai pas compris la question..
Donc ?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Et on aurait tout aussi bien pu parler d'objets Shape de la collection Shapes si ça avait été les contrôles formulaires de feuille (au-dessus des ActiveX).

De là l'importance d'être précis dans ses questions comme le stipule ucfoutu
Bonne chance

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Pas de pb,
C'est mon premier post dans ce domaine.

Je test ça et vous tiendrais au courant
Impécable
Merci pour le temps que vous m'avez accordé !