Bonjour Bonjour cocoww_25 ,
La gestion des groupes de formes dans Excel VBA est étrange. Pas mal d’écueils sont à surmonter jusqu'à la gestion du nom par défaut des groupes en français ou en anglais (en interne) et qui sont bien sûr différents ! Maintenant, je ne suis pas un expert dans gestion des formes sous Excel.
...
J'ai pondu une fonction de nom ListeShapes qui en entrée a deux arguments :
- le premier est l'objet feuille où se trouve le groupe recherché (c'est bien un objet et non pas simplement le nom de la feuille)
- le second est le nom du groupe à rechercher ( c'est une variable ou constante de type string)
En sortie :
- la fonction retourne une collection qui contient tous les noms des formes de base (et non pas les objets formes eux-mêmes) qui composent le groupe
- si le groupe n'a pas été trouvé alors la fonction renvoie l'objet Nothing
Tout le code pour cette fonction est dans le module nommé ModuleShapeGroup
...
Le module Module1 contient un exemple d'utilisation.
- On choisit en cellule P2 le groupe concerné
- On choisit en cellule Q2 si les membres du groupe doivent être affiché ou non (aucune valeur sera considéré comme "oui")
- On clique sur le bouton Hop!
Pour l'exemple, il y a 5 groupes dont certains sont imbriqués:
- Groupe 10 avec deux objets groupés (ceux en vert)
- Groupe 11 avec deux objets groupés (ceux en orange)
- Groupe 13 avec deux objets groupés (ceux en mauve)
- Groupe 12 avec le groupement des groupes 10 et 11
- groupe 14 avec le groupement des groupes 12 et 13
...
Le code de Test (dans module1) :
Sub TEST()
Dim monGroupe As Object, x
Application.ScreenUpdating = False
Set monGroupe = ListeShapes(Sheets("Feuil1"), [p2])
If Not monGroupe Is Nothing Then
For Each x In monGroupe
Sheets("Feuil1").Shapes(x).Visible = [q2] <> "non"
Next x
End If
End Sub
...