Boucle avec images

  • Initiateur de la discussion Francois
  • Date de début
F

Francois

Guest
Bonjour,
En Visual Basic pour Excel, peut-on faire une boucle pour éviter de taper ce qui suit?

UserForm1.Image2.Visible = False
UserForm1.Image3.Visible = False
UserForm1.Image4.Visible = False
UserForm1.Image5.Visible = False
UserForm1.Image6.Visible = False
UserForm1.Image7.Visible = False
UserForm1.Image8.Visible = False

On m'a conseillé de grouper, d'indexer mais je ne vois pas comment....et la boucle suivante n'a pas marché :

For i=2 to 8
UserForm1.Image(i).Visible = False
Next


Merci
 
Z

Zon

Guest
Salut,

C pas possible en effet:

dim Img as msforms.control
for each img in userform1.controls
if typeof img is msforms.image then img.visible=false
next img

Une autre possibilité est de jouer avec la propriété Tag de tes images , par exemple tu nommes toutes les images "Image"

dim Img as msforms.control
for each img in userform1.controls
if img.tag="Image" then img.visible=flase
next img


A+++
 
T

Ti

Guest
Ben, Zon, te voilà donc défaitiste ? :)

Si, c'est possible, voici deux façons de faire. Selon les cas, on pourra préférer l'une ou l'autre. Dans le cas présent, la première ferait très bien l'affaire

Private Sub Test1()
Dim Bcle%
For Bcle = 1 To 4
Controls("Image" & Bcle).Visible = False
Next Bcle
End Sub

Private Sub Test2()
Dim Ctrl
For Each Ctrl In Array(Image1, Image2, Image3, Image4)
Ctrl.Visible = False
Next Ctrl
End Sub
 
@

@+Thierry

Guest
Bonjour Ti, Zon, François, le Forum

Et pour la petite histoire...

La méthode pour boucler sur TypeOf MsForm.TheTypeOfControl aurait été introduite par LL sur le MPFE, puis je l'ai largement diffusée ici.

La méthode très astucieuse pour boucler sur les Tag m'a été dévoilée par Ti ! et me rend d'innombrables services depuis !

La méthode si simple et radicale de concaténation pour boucler sur le nom du control Controls("TheControlName" & i) aurait été introduite sur ce Forum par Jacques de Ryes.

La méthode de la boucle sur Array nous a été dévoilée par STéphane à Ti et à moi lors de l'élaboration du USF_XLD_Contacts_ Manager...

Sinon moi j'ai aussi fait un truc marrant qui consiste à nommer des cellules avec les noms des controls et à récuperer leur nom dans une boucle du Style
Dim CTRL As Control
Dim Nom As Object
Dim r As Integer

Set Nom = ActiveWorkbook.Names
For r = 1 To Nom.Count
For Each CTRL In Controls
If CTRL.Name = Nom(r).Name Then
CTRL.Value = Range(Nom(r)).Value
End If
Next CTRL
Next r

Celà peut être utile aussi, pas vraiment pour le cas de Visible False, mais surtout pour envoyer des données dans les controls (ou inversement en retourner verS les feuilles...

Bonne Journée (TGIF)
@+Thierry
 
Z

Zon

Guest
Salut François et les Thierry's,

Je ne crois pas être défaitiste : je parlais d'indexation directe Image(i) car Image n'est pas une collection comme Sheets par exemple.

Si on a beaucoup de controles il vaudra mieux les 2 procédures de Ti.

Comme @+Thierry cite STephane dans un rôle d'historien qui lui va à meveille( c'est mieux que celui de gendarme lol), j'en profite pour lui souhaiter son anniversaire avec 3 jours d'avance.

A+++
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 119
Membres
103 478
dernier inscrit
Frederic Lagger