Balayage des formes dans un groupe

Bonjour,

Je fais appel à vous car malgré mais recherches, je ne trouve pas de solutions à ma problématique.

Imaginons que dans un fichier, je crée deux formes "forme1" et "forme2", que je regroupe pour avoir ""groupe1". De la même manière, je crée "forme3" et "forme4" pour avoir "groupe2". Je groupe ensuite "groupe1" et "groupe2" pour avoir "groupe_total". En fonction des données saisies par l'utilisateur je souhaite masquée uniquement "groupe1" par exemple. J'utilise donc le code suivant :

For Each shp In ActiveSheet.Shapes("groupe_total").GroupItems
If shp.Name = "groupe1" Then

shp.Visible = False

End If

Next

Cependant, la fonction GroupItems ne reprend que les éléments de base, et ne retourne donc seulement "forme1", "forme2" ... Est-il possible d'accéder aux groupe "groupe1" et "groupe2" pour les masquer avec cette méthode ?

Merci d'avance,

Bonjour cocoww_25 ,

Essayez :

For Each shp In ActiveSheet.Shapes("groupe1").GroupItems: shp.Visible = False: Next

Merci du retour.

Cela ne marche pas. En faite, c'est comme si les groupes "groupe1" et "groupe2" n'existaient plus, alors que je les vois bien dans le volet des formes. Il ne sont également plus sélectionnables.

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 :

  1. 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)
  2. 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


...

Bonjour,

Merci pour le retour, et le code élaboré. Je vais regarder tout ça !

Rechercher des sujets similaires à "balayage formes groupe"