Lister tous les modules et les procédures de chaque module (vba)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 810 fois - Téléchargée 27 fois

Contenu du snippet

Ce code permet de lister tous les modules et les procédures de chaque module (VBA)

Source / Exemple :


Option Compare Database
Option Explicit
'Déclarations
Public Mdule As module
Public LigneDec As Long
Public LigneCount As Long
Public Proc As String
Public ProcNbre As Integer
Public Type SBProcedures
    Nom As String
End Type
Public Type SBModules
    Nom As String
    SBProcedure() As SBProcedures
End Type
Public Type SBCodes
    SBModule() As SBModules
End Type
Public SBCode As SBCodes
Sub AnalyseCode()
    ReDim SBCode.SBModule(Application.Modules.Count)
    'Liste les modules
    For i = 0 To Application.Modules.Count - 1
        Debug.Print Application.Modules(i).Name
        SBCode.SBModule(i).Nom = Application.Modules(i).Name
    Next i
    'Parcoure les modules
    For i = 0 To UBound(SBCode.SBModule) - 1
        DoCmd.OpenModule SBCode.SBModule(i).Nom
        Set Mdule = Modules(SBCode.SBModule(i).Nom)
        LigneCount = Mdule.CountOfLines
        LigneDec = Mdule.CountOfDeclarationLines
        ProcNbre = 0
        ReDim Preserve SBCode.SBModule(i).SBProcedure(ProcNbre)
        Proc = Mdule.ProcOfLine(LigneDec + 1, vbext_pk_Proc)
        SBCode.SBModule(i).SBProcedure(ProcNbre).Nom = Proc
        'Liste les procédures
        For j = LigneDec + 1 To LigneCount
            If Proc <> Mdule.ProcOfLine(j, vbext_pk_Proc) Then
                ProcNbre = ProcNbre + 1
                Proc = Mdule.ProcOfLine(j, vbext_pk_Proc)
                ReDim Preserve SBCode.SBModule(i).SBProcedure(ProcNbre)
                SBCode.SBModule(i).SBProcedure(ProcNbre).Nom = Proc
            End If
        Next j
    Next i
    'Affiche les procédures dans la fenêtre debug
    For i = 0 To UBound(SBCode.SBModule) - 1
        For j = 0 To UBound(SBCode.SBModule(i).SBProcedure) - 1
            Debug.Print SBCode.SBModule(i).Nom + " : " + SBCode.SBModule(i).SBProcedure(j).Nom
        Next j
    Next i
End Sub

Conclusion :


Ce code me sert dans Access, je suppose qu'il est transposable dans d'autres applications Office utilisant le VBA et les modules

A voir également

Ajouter un commentaire

Commentaires

Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009

tiens il y'a autre chose qu'il faut pas oublier :
Application.Modules.Count renvoie le nombre de modules OUVERTS de l'application étudiée.
Or si par malheur vous avez fermé vos modules avant de sauvegardé .. il vous renverra automatiquement 0 ^^
C'est une information à ne pas oublier
Messages postés
7
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

Pour Excel vous pouvez trouver une solution assez simple en suivant le lien suivant
http://groups.google.fr/group/microsoft.public.fr.excel/browse_thread/thread/8d9e267d8b8d5806/929ef81fa5bf1a37%23929ef81fa5bf1a37

Salut.
Messages postés
91
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
17 décembre 2008

Salut sbertho,

Est-ce que tu peux m'eclairer sur la necesite de :
DoCmd.OpenModule SBCode.SBModule(i).Nom
Ne suffit il pas d'appeler le module par
Module(Nom)

Quel est l'interet de
ReDim Preserve SBCode.SBModule(i).SBProcedure(ProcNbre)
puisque de toute facon ProcNbre est tjs a 0

Dans VBA-Excel, il ne reconnait ni "DoCmd", ni "vbext_pk_Proc".
Autre probleme, et de taille, "Application.Modules.Count" renvoi toujours 0 ! Quel que soit le nb de modules.

Y'a-t-il une DLL a charger ?
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Pour Access, il est possible d'exporter en texte la totalité du code des formulaires et états, ainsi que le code design, voir ici :
http://patrice.dargenton.free.fr/CodesSources/DBComp.vbp.html#115
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
exact ^^ (un oubli après copier/coller)

ne pas oublier un petit test
If Application.Modules.Count > 0 Then

et tout devrai rentrer dans l'ordre, n'opérant que s'il y a de la matière première
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.