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
Partager