Retourner la liste des macros affectées à des objets.

Avec un ami, nous sommes en train de travailler sur une nouvelle application à destination des chantiers de construction. D'ailleurs, si vous êtes dans ce domaine, n'hésitez pas à demander une démonstration.

L'outil prenant de l'ampleur, j'ai eu le besoin de documenter les macros qui sont attachées à des objets. Cette macro ne prend cependant pas en compte le code qui est automatiquement attaché à des contrôles ActiveX. Ce type de code est généralement comme ceci : NomDuControle_click.

Voici donc un petit code rapide qui permet de le faire :

Sub retourneMacroAffecteesAObject()
    Dim shp As Shape
    Dim wks As Worksheet
    Dim wksResult As Worksheet
    Dim lLigne As Long: lLigne = 1
    Set wksResult = ThisWorkbook.Worksheets.Add
    For Each wks In ThisWorkbook.Worksheets
        For Each shp In wks.Shapes
            If shp.OnAction <> "" Then
                wksResult.Range("A" & lLigne).Value = wks.name
                wksResult.Range("B" & lLigne).Value = shp.name
                wksResult.Range("C" & lLigne).Value = shp.OnAction
                wksResult.Range("D" & lLigne).Select
                wksResult.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
        "'" & wks.name & "'!A1", TextToDisplay:="'" & wks.name & "'!A1"
                lLigne = lLigne + 1
            End If
        Next shp
    Next wks
    wksResult.Columns("A:D").EntireColumn.AutoFit
    wksResult.Range("A1").Select
End Sub

A bientôt