Récupérer noms des macros dans un onglet

Polobe36

XLDnaute Occasionnel
Bonjour à tous, le Forum,

Je souhaiterais retrouver dans un onglet sous forme de liste le nom des macros présentes dans mon classeur:
- nom de la macro, touche de raccourci et description
Ainsi que l'objet où elle est "rédigée":
- nom et type (feuille, formulaire ou module) de l'objet

Est-ce possible?

Merci par avance de votre aide
 

JCGL

XLDnaute Barbatruc
Re : Récupérer noms des macros dans un onglet

Bonjour à tous,

Trouvé sur le Forum.

VB:
Option Explicit


Sub Liste()
    Dim o As Object, i&, t$, Nom$, Liste$(), n&, c As Range
    '---liste des procédures Sub---
    For Each o In ThisWorkbook.VBProject.VBComponents
        With o.CodeModule
            For i = 1 To .CountOfLines
                t = " " & Trim(.Lines(i, 1))
                Nom = .ProcOfLine(i, 0)
                If t Like "* Sub " & Nom & "(*)" Then
                    If t Like " Sub " & Nom & "()" Then
                        n = n + 1
                        ReDim Preserve Liste(1 To 2, 1 To n)
                        Liste(1, n) = o.Name    'nom du module
                        Liste(2, n) = Nom    'nom de la macro
                    End If
                    i = i + .ProcCountLines(Nom, 0) - 1    'saute les lignes
                End If
            Next
        End With
    Next
    '---RAZ---
    Application.ScreenUpdating = False
    [A2:B65536].ClearContents
    For Each o In Me.Shapes
        If o.TopLeftCell.Column = 3 Then o.Delete
    Next
    '---création de la liste et des boutons---
    If n Then
        With [A2:B2].Resize(n)
            .Value = Application.Transpose(Liste)
            .Sort [B2], Header:=xlNo    'tri
            For Each c In .Columns(2).Cells
                With Me.Buttons.Add(c(1, 2).Left, c.Top, c(1, 2).Width, c.Height)
                    .OnAction = c(1, 0) & "." & c
                    c = Replace(c, "_", " ")
                    .Characters.Text = c
                End With
            Next
        End With
    End If
End Sub

A+ à tous
 

Polobe36

XLDnaute Occasionnel
Re : Récupérer noms des macros dans un onglet

Bonjour JCGL,

Merci pour ta réponse rapide. Malheureusement je ne suis pas un expert :( , où et comment dois-je incorporer çà, parce que j'ai des messages d'erreurs différents à chaque essai que je fait?
Peut-être faut-il adapter le code, mais quoi..? Ou manque t'il une référence?

Pourrais-tu joindre le lien de la discussion où tu as trouvé le code, peut-être que cela va m'aiguiller?
 
Dernière édition:

VIARD

XLDnaute Impliqué
Re : Récupérer noms des macros dans un onglet

Bonjour JCGL, Polobe36 et à toutes et tous

Si je puis me permettre, j'ai trouvé intéressant le module de "JCGL", pour moi avec excel2007, la deuxième partie ne fonctionne pas
aussi je l'ai repris en adaptant l'affichage à un onglet supplémentaire, code joint.

Code:
Option Explicit
'======================
Sub Liste_Sub()
Dim o As Object, i&, t$, Nom$, Liste$(), n&, c As Range
Dim Col%
 '--------- liste des procédures Sub -------
For Each o In ThisWorkbook.VBProject.VBComponents
     With o.codemodule
         For i = 1 To .CountOfLines
             t = " " & Trim(.Lines(i, 1))
             Nom = .ProcOfLine(i, 0)
             If t Like "* Sub " & Nom & "(*)" Then
                 If t Like " Sub " & Nom & "()" Then
                     n = n + 1
                     ReDim Preserve Liste(1 To 2, 1 To n)
                     Liste(1, n) = o.Name    'nom du module
                    Liste(2, n) = Nom        'nom de la macro
                End If
                 i = i + .ProcCountLines(Nom, 0) - 1  'saute les lignes
            End If
         Next
     End With
 Next
 '-------- Ajout Feuille --------
Sheets.Add
Col = 2
'----------- Affichage ----------
Cells(1, Col).Value = "Liste des SUB"
Cells(2, Col).Value = "Nom du Module"
Cells(2, Col + 1).Value = "Nom de la macro"
For i = 1 To n
    Cells(i + 2, Col).Value = Liste(1, i)
    Cells(i + 2, Col + 1).Value = Liste(2, i)
Next i
Range("B:C").EntireColumn.AutoFit
Range(Cells(1, Col), Cells(1, Col + 1)).Merge
Range(Cells(1, Col), Cells(2, Col + 1)).HorizontalAlignment = xlCenter
With Range(Cells(1, Col), Cells(2, Col + 1)).Borders
    .LineStyle = xlContinuous
    .Weight = xlMedium
End With
ActiveSheet.Delete
End Sub
'=======================

Salutation

Jean-Paul
 

Polobe36

XLDnaute Occasionnel
Re : Récupérer noms des macros dans un onglet

Bonjour à tous,

Merci pour les infos(wouah super boulot de Tototiti) et pour votre aide.
J'ai testé la solution proposée par Jean-Paul, et çà marche, merci beaucoup. Par contre, quel code faudrait-il rédiger pour récupérer également les "Private sub"?
 

VIARD

XLDnaute Impliqué
Re : Récupérer noms des macros dans un onglet

Bonjour Polobe36 et à toutes et tous

J'ai été quelque peut absent, mais j'ai trouvé ceci, qui devrait faire ton affaire.

Code:
Sub Essai()
'Nécessite d'activer la référence
    'Microsoft "Visual basic For Application Extensibility 5.3"
Dim VBCmp As VBComponent
Dim cdMod As CodeModule
Dim Wb As Workbook
Dim Debut&

'---- Indiquez le nom du classeur ouvert ----
'Set Wb = Workbooks("Classeur1.xls")
Set Wb = ThisWorkbook
'Boucle sur tous les composantsdu projet :
    'Modules standards
    'Modules de feuilles et de classeur
    'Modules de classe
    'UserForms
For Each VBCmp In Wb.VBProject.VBComponents
    Set cdMod = VBCmp.CodeModule
'---------------------------
    With cdMod
        Debut = .CountOfDeclarationLines + 1
        Do Until Debut >= .CountOfLines
            'Nom de la procédure et du module
            Debug.Print VBCmp.Name & " / " & .ProcOfLine(Debut, vbext_pk_Proc)
            Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, _
                vbext_pk_Proc), vbext_pk_Proc)
        Loop
    End With
'---------------------------
Next VBCmp
End Sub

Par contre pour voir le résultat, ouvrir le VBE puis effectuer "Ctrl G"
le listing apparaît dans la fenêtre "Exécution".

De la tu peux faire une copie vers un formulaire.

Amicalement

Jean-Paul
 

MJ13

XLDnaute Barbatruc
Re : Récupérer noms des macros dans un onglet

Bonjour à tous

Sinon, 2 petites macros pour avoir la liste des macros et du code du classeur actif ou la liste uniquement des Sub, facilement adaptable pour les private ou inclure un like dans le code.
 

Pièces jointes

  • Liste_Macros_Sur_feuille_MJ.xlsm
    23.1 KB · Affichages: 19

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz