Comment récupérer les noms des macros à partir d’un classeur Excel à l’aide de Visual Basic 6.0

Résumé

Cet article pas à pas explique comment utiliser Visual Basic 6.0 pour récupérer les noms des macros à partir d’un classeur Excel.

Conditions requises

Les éléments suivants décrivent le matériel, les logiciels, l’infrastructure réseau, les compétences et les connaissances recommandés et les service packs dont vous avez besoin :

  • Excel 2000, Excel 2002, Office Excel 2003 ou Office Excel 2007
  • Macros Excel
  • Visual Basic pour Applications

Créer un classeur Excel avec deux macros

  1. Démarrez Excel. Un classeur vide est créé.

  2. Appuyez sur Alt+F11 pour démarrer Visual Basic Editor.

  3. Dans l’Explorateur de projets, double-cliquez sur ThisWorkbook pour démarrer l’éditeur de code.

  4. Collez le code suivant pour deux macros simples dans l’éditeur de code :

    Option Explicit
    
    Sub Macro_A()
        MsgBox "This is Macro A"
    End Sub
    
    Sub Macro_B()
        MsgBox "This is Macro B"
    End Sub
    
  5. Fermez Visual Basic Editor et revenez à l’affichage feuille de calcul.

  6. Dans Excel 2003 et dans les versions antérieures d’Excel, enregistrez le classeur en tant que C:\Abc.xls.

    Dans Excel 2007, enregistrez le classeur sous la forme d’un classeur compatible macro nommé C:\Abc.xlsm.

  7. Fermez le classeur et quittez Excel.

Créer une application Visual Basic pour répertorier les macros dans le classeur

  1. Dans Visual Basic 6.0, créez un projet EXE standard.

  2. Dans le menu Projet , cliquez sur Références. Dans la boîte de dialogue Références , sélectionnez les références suivantes :

    • Extensibilité de Microsoft Visual Basic pour Applications 5.3
    • Pour Microsoft Excel 2000 : Bibliothèque d’objets Microsoft Excel 9.0
    • Pour Microsoft Excel 2002 : Bibliothèque d’objets Microsoft Excel 10.0
    • Pour Microsoft Office Excel 2003 : Bibliothèque d’objets Microsoft Excel 11.0
    • Pour Microsoft Office Excel 2007 : Bibliothèque d’objets Microsoft Excel 12.0
  3. Cliquez sur OK.

  4. Ajoutez un bouton au formulaire. Le bouton porte le nom par défaut Command1.

  5. Ajoutez une zone de liste au formulaire. La zone de liste porte le nom par défaut List1.

  6. Définissez une procédure de gestionnaire d’événements click pour le bouton. Utilisez le code suivant pour cette procédure, afin d’afficher des informations sur les macros définies dans C:\Abc.xls :

    Private Sub Command1_Click()
        ' Declare variables to access the Excel workbook.
        Dim objXLApp As Excel.Application
        Dim objXLWorkbooks As Excel.Workbooks
        Dim objXLABC As Excel.Workbook
    
    ' Declare variables to access the macros in the workbook.
        Dim objProject As VBIDE.VBProject
        Dim objComponent As VBIDE.VBComponent
        Dim objCode As VBIDE.CodeModule
    
    ' Declare other miscellaneous variables.
        Dim iLine As Integer
        Dim sProcName As String
        Dim pk As vbext_ProcKind
    
    ' Open Excel, and open the workbook.
        Set objXLApp = New Excel.Application
        Set objXLWorkbooks = objXLApp.Workbooks    
        Set objXLABC = objXLWorkbooks.Open("C:\ABC.XLS")
    
    ' Empty the list box.
        List1.Clear
    
    ' Get the project details in the workbook.
        Set objProject = objXLABC.VBProject
    
    ' Iterate through each component in the project.
        For Each objComponent In objProject.VBComponents
    
    ' Find the code module for the project.
            Set objCode = objComponent.CodeModule
    
    ' Scan through the code module, looking for procedures.
            iLine = 1
            Do While iLine < objCode.CountOfLines
                sProcName = objCode.ProcOfLine(iLine, pk)
                If sProcName <> "" Then
                    ' Found a procedure. Display its details, and then skip 
                    ' to the end of the procedure.
                    List1.AddItem objComponent.Name & vbTab & sProcName
                    iLine = iLine + objCode.ProcCountLines(sProcName, pk)
                Else
                    ' This line has no procedure, so go to the next line.
                    iLine = iLine + 1
                End If
            Loop
            Set objCode = Nothing
            Set objComponent = Nothing
        Next
    
    Set objProject = Nothing
    
    ' Clean up and exit.
        objXLABC.Close
        objXLApp.Quit
    End Sub
    
    

Tester l’exemple

  1. Générez et exécutez l’application.
  2. Cliquez sur le bouton de commande. La zone de liste affiche les noms de toutes les macros et du classeur qui les contient, comme suit : ThisWorkbook Macro_A ThisWorkbook Macro_B

Résolution des problèmes

En raison des dispositions de sécurité améliorées dans Excel 2002, Excel 2003 et Excel 2007, vous pouvez recevoir le message d’erreur suivant du programme Visual Basic lorsque vous utilisez Excel 2002, Excel 2003 ou Excel 2007 : l’accès programmatique à Visual Basic Project n’est pas approuvé.

Pour plus d’informations sur ce problème et la façon de le résoudre, cliquez sur le numéro d’article suivant pour afficher l’article dans la Base de connaissances Microsoft :

282830 PRB : l’accès par programmation au projet Office XP VBA est refusé

References

Pour plus d’informations, consultez le site web Microsoft Developer Network (MSDN) suivant :

Développement Microsoft Office avec Visual Studio

Pour plus d’informations, consultez les articles suivants de la Base de connaissances :

219905 Comment ajouter et exécuter dynamiquement une macro VBA à partir de Visual Basic