Grouper à partir d'une forme

Bonjour à tous !

Je bricole un code permettant de simplifier la vie des utilisateurs de mon fichier en permettant de grouper et dégrouper des lignes sans utiliser le "+" et "-" via des formes.

Le code à l'heure actuelle ressemble à ça :

Sub GrouperDégrouper()
    Dim rowExpanded As Boolean

rowExpanded = Rows(3).ShowDetail
If rowExpanded = True Then
    ActiveSheet.Protect , userinterfaceonly:=True
    Rows(3).ShowDetail = False

'Modification des propriétés de la forme Ovale
    ActiveSheet.Shapes.Range(Array("Oval 1")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Voir les activités du métier"

    With Selection.ShapeRange.Fill
        .ForeColor.RGB = RGB(146, 208, 80)
    End With
    Range("A1").Activate

Else
    ActiveSheet.Protect , userinterfaceonly:=True
    Rows(3).ShowDetail = True

'Modification des propriétés de la forme Ovale
    ActiveSheet.Shapes.Range(Array("Oval 1")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Réduire les activités du métier"

    With Selection.ShapeRange.Fill
        .ForeColor.RGB = RGB(255, 192, 0)
    End With
    Range("A1").Activate
End If
End Sub

Les petits soucis sont :

  • j'ai énormément de shapes auxquelles je dois affecter cette macro.
  • il est possible d'insérer des lignes supplémentaires dans les groupes rendant les index de mes Rows incorrects.

Je me demandais, après modification, s'il n'était pas possible d'affecter le même code à l'ensemble de mes formes.

Pour cela il faudrait que je parvienne à rendre dynamiques les index de mes Rows en fonction de la position du Shape

J'ai cherché du coté de l'objet Shape afin de voir s'il était possible de lui affecter un Activate mais a priori cela n'existe pas

En résumé, la Shape correspondante à un groupe doit pouvoir ouvrir et fermer le groupe en utilisant le même code pour toutes les Shapes. Est ce possible?

Pas facile à expliquer, je vous propose un fichier en pièce jointe

11classeur-v4.xlsm (157.71 Ko)

PS : La protection de la feuille n'a pas de code, il suffit de l'ôter

Bonjour

Remplaces ta macro par celle-ci

Sub GrouperDégrouper()
Dim rowExpanded As Boolean
Dim Sh As Shape

  ActiveSheet.Protect , userinterfaceonly:=True
  Set Sh = ActiveSheet.Shapes(Application.Caller)
  rowExpanded = Rows(Sh.TopLeftCell.Row).ShowDetail
  If rowExpanded = True Then
    Rows(Sh.TopLeftCell.Row).ShowDetail = False

    'Modification des propriétés de la forme Ovale
    Sh.TextFrame.Characters.Text = "Voir les activités du métier"
    Sh.Fill.ForeColor.RGB = RGB(146, 208, 80)
  Else
    Rows(Sh.TopLeftCell.Row).ShowDetail = True

    'Modification des propriétés de la forme Ovale
    Sh.TextFrame.Characters.Text = "Réduire les activités du métier"
    Sh.Fill.ForeColor.RGB = RGB(255, 192, 0)
  End If
End Sub

Bonjour,

C'est parfait, comme d'habitude, un grand merci! Je vais étudier les modifications.

Bonne journée

Rechercher des sujets similaires à "grouper partir forme"