Bonjour.
Je voulais trouver une macro qui me liste la totalité des macros située dans les 120 feuilles de mon classeur. J'ai trouvé le code suivant, mais qui ne fonctionne pas. Il affiche une erreur au sujet de ByRef que je ne sais pas résoudre.
Si quelqu'un a la solution, merci.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Sub ListAllSheetMacros()
    Dim ws As Worksheet
    Dim vbComp As Object
    Dim vbMod As Object
    Dim macroNames() As String
    Dim wsMacroList As Worksheet
    Dim rowIndex As Long
    Dim i As Long
    Dim macroListIndex As Long
 
    ' Créer une nouvelle feuille ou utiliser une feuille existante pour lister les macros
    On Error Resume Next
    Set wsMacroList = ThisWorkbook.Sheets("Liste des Macros")
    On Error GoTo 0
 
    If wsMacroList Is Nothing Then
        Set wsMacroList = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        wsMacroList.Name = "Liste des Macros"
    Else
        ' Effacer le contenu de la feuille existante si elle existe déjà
        wsMacroList.Cells.Clear
    End If
 
    ReDim macroNames(1 To 1000) ' Ajuster la taille du tableau si nécessaire
 
    ' Parcourir toutes les feuilles du classeur
    For Each ws In ThisWorkbook.Worksheets
        If ws.CodeName <> "" Then ' Vérifier si la feuille a un nom de code VBA
            Set vbMod = ThisWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule
            For i = 1 To vbMod.CountOfLines
                macroName = vbMod.ProcOfLine(i, vbext_pk_Proc)
                If macroName <> "" Then
                    If Not IsMacroSheetInList(macroNames, macroName) Then
                        macroListIndex = macroListIndex + 1
                        macroNames(macroListIndex) = macroName
                    End If
                End If
            Next i
        End If
    Next ws
 
    ' Afficher les noms des macros dans la feuille "Liste des Macros"
    rowIndex = 1
    For i = 1 To macroListIndex
        wsMacroList.Cells(rowIndex, 1).Value = macroNames(i)
        rowIndex = rowIndex + 1
    Next i
End Sub
 
Function IsMacroSheetInList(arr() As String, macroName As String) As Boolean
    Dim i As Long
 
    For i = LBound(arr) To UBound(arr)
        If arr(i) = macroName Then
            IsMacroSheetInList = True
            Exit Function
        End If
    Next i
 
    IsMacroSheetInList = False
End Function