masquer plusieurs images dans une feuille élégamment

Boini

XLDnaute Nouveau
Bonjur
Dans une feuille excel, j'ai un douzaine d'images que je veux pouvoir , par exemple masquer rapidement.
Dans une private sub dans la feuille correspondante, je peux faire par ex
Set p1 = ActiveSheet.Shapes("dodeq")
Set p2 = ActiveSheet.Shapes("dodbg")
Set p3 = ActiveSheet.Shapes("dodbd")
Set p4 = ActiveSheet.Shapes("dleq")
Set p5 = ActiveSheet.Shapes("dlbd")
Set p6 = ActiveSheet.Shapes("dlbg")
Set p7 = ActiveSheet.Shapes("dblbg")
Set p8 = ActiveSheet.Shapes("dblbd")
Set p9 = ActiveSheet.Shapes("dbleq")
Set p10 = ActiveSheet.Shapes("logbd")
Set p11 = ActiveSheet.Shapes("logbg")
Set p12 = ActiveSheet.Shapes("logeq")
'0
If Range("d149").Value = "" Then
i1.Visible = False
i2.Visible = False
i3.Visible = False
i3.Visible = False
i4.Visible = False
i5.Visible = False
i6.Visible = False
i7.Visible = False
i8.Visible = False
i9.Visible = False
i10.Visible = False
i11.Visible = False
i12.Visible = False
End If

bon, ça marche, mais c'est pas sport, surtout que je vais avoir plus de cas semblables à traiter selon des mécanismes voisins et ça va vite devenir un code énorme pour rien
donc j'ai tenté un for...next
comme ceci:
Dim x As Integer
Dim p As String
Dim px As String
Set p1 = ActiveSheet.Shapes("dodeq")
Set p2 = ActiveSheet.Shapes("dodbg")
Set p3 = ActiveSheet.Shapes("dodbd")
Set p4 = ActiveSheet.Shapes("dleq")
Set p5 = ActiveSheet.Shapes("dlbd")
Set p6 = ActiveSheet.Shapes("dlbg")
Set p7 = ActiveSheet.Shapes("dblbg")
Set p8 = ActiveSheet.Shapes("dblbd")
Set p9 = ActiveSheet.Shapes("dbleq")
Set p10 = ActiveSheet.Shapes("logbd")
Set p11 = ActiveSheet.Shapes("logbg")
Set p12 = ActiveSheet.Shapes("logeq")

If Range("d149").Value = "" Then
For x = 1 To 12
Shapes("p" & x).Visible = false
Next x
End If

mais ça marche pas. Mon Shapes lui plait pas . Pas plus que directement écrire px, "p" & x etc etc. Quelqu'un peut il me donner l'astuce syntaxique qui débloquera le chose ???
merci beaucoup
R Boini
 

jean62

XLDnaute Nouveau
Re : masquer plusieurs images dans une feuille élégamment

Bonjour voila ce que j'ai trouver dans un site
La macro que je proposais permet lors de sa 1ère exécution
de masquer les images (et uniquement les images)

lors de sa seconde exécution: les images seront démasquées.

Donc associée à un bouton sur une barre d'outils, la macro permet de :
(en l'état tout le classeur est pris en compte)

1 clic -> masque
2 clic -> démasque

et ce, quels que soient le noms des images.

Pour ne considérer que la feuille active
Code
sub macroimagesfeuilleactive()
Dim s as worksheet
Dim sp as Shape
set s=ActiveSheet
For Each sp In s.Shapes ' dans tous les formes
If sp.Type = 13 Then 'si ce sont des images
sp.Visible = Not sp.Visible ' alors masque/démasque
End If
Next
end sub
 

Boini

XLDnaute Nouveau
Re : masquer plusieurs images dans une feuille élégamment

Bonsoir et merci de l'idée
un premier détail, je n'arrive pas à transformer l'idée en private sub change by val etc....
et surtout je vais avoir dans les feuilles plusieurs collections à gèrer selon les valeurs recueillies dans certains champs, et ce , de façon indépendante les unes des autres. Donc là, masquer tout d'office ne va pas répondre à mon problème, je crains.
Merci pour l'idée, mais il va m'en falloir une autre, si je n'abuse pas !!:rolleyes:
R Boini
 

Boini

XLDnaute Nouveau
Re : masquer plusieurs images dans une feuille élégamment

Une version qui permet de ne pas s'occuper des noms d'images...

Cordialement
Bonsoir
super intéressant la deuxième idée. Pour adapter, il me faut un peu d'explication complémentaire, en particulier il y a deux sub dont une qui s'appelle init, là je ne sais pas ce que c'est et pourquoi il faut ces deux sub. Est ce que je peux avoir un peu de "décodage", parce que , bien que concis, le code me parait déjà d'un joli niveau ...:)
merci
R Boini
 

mécano41

XLDnaute Accro
Re : masquer plusieurs images dans une feuille élégamment

Bonjour à tous,

...Pour adapter, il me faut un peu d'explication complémentaire, en particulier il y a deux sub dont une qui s'appelle init...

L'initialisation est là pour mettre à jour le tableau de cochage si des noms ont été changés (automatiquement ou non). Voici une version commentée. Elle reprend la précédente en ajoutant la possibilité de supprimer/ajouter des images sans avoir à modifier quoi que ce soit.

Si le tableau de cochage est situé à partir de A1 et B1 dans la première feuille, il n'y a rien à changer dans le sub d'initialisation. J'ai mis des boutons pour ce modèle, mais je suppose que les opérations seront déclenchées depuis ton code ; il suffira de copier le contenu des deux procédures de masquage et d'affichage aux bons endroits dans ton code.

Si le nombre d'images et leurs noms sont définitifs et que le masquage/affichage se fait par bouton, utilise le code donné ci-dessus par SI... ce sera plus simple.

Cordialement
 

Pièces jointes

  • Masquer images3 .xlsm
    96.6 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 078
Messages
2 085 110
Membres
102 782
dernier inscrit
Basoje