IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Liste des variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut Liste des variables
    Bonjour a toutes et tous, Forum bonjour

    J'ai définir de nombreuses variables dans mon projet et Je commence à m'y perdre quelque peu.

    Existe-il une macro où un logiciel qui me permettrai d'imprimer la liste des variables définies dans TOUT mon projet.

    j'ai installer Smart indenter sur mon Excel 2007 pas de soucis mais je pensais que ce logiciel faisait ça mais malheureusement non.

    Merci a vous et de votre temps, et vu l'heure un bon appétit a tous

    Cordialement Ray

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste, c'est une moulinette. Adapter l'Array :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Sub Noms_Modules()
     
        '1 => Module standard
        '2 => Module de Classe
        '3 => UserForm
        '100 => ThisWorkbook + Feuille
     
        Dim CollectionModule As Object
        Dim Module As Object
        Dim Tbl
        Dim Pos As Integer
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        On Error Resume Next
     
        'défini dans un tableau les mots à chercher, à adapter
        Tbl = Array("Dim", _
                    "Static", _
                    "Public")
     
        Set CollectionModule = ActiveWorkbook.VBProject.VBComponents
     
        For Each Module In CollectionModule
     
                'recherche les Modules standards de classes et d'UserForms
            Select Case Module.Type
     
                Case 1, 2, 3
     
                    K = K + 1
                'inscrit le nom du module en colonne A
                    Range("A" & K) = Module.Name
     
                    Range("A" & K).Font.Bold = True
     
                'recherche les lignes commençant par
                'les noms du tableau et les inscrit
                'en colonne B. C'est une moulinette
                'qui passe tous les noms du tableau
                'et toutes les lignes
     
                    With Module.CodeModule
     
                        For I = 0 To UBound(Tbl)
     
                            For J = 1 To .CountOfLines
     
                                Pos = InStr(.Lines(J, 1), Tbl(I))
     
                                If Pos = 1 Then
     
                                    K = K + 1
                                    Range("B" & K) = .Lines(J, 1)
     
                                End If
     
                            Next J
     
                        Next I
     
                    End With
     
            End Select
        Next
     
        Set CollectionModule = Nothing
        Set Module = Nothing
        Erase Tbl
     
    End Sub
    Hervé.

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Salut Theze

    Merci de ta réponse, mais je n'arrive pas où configure mal le code que tu me propose pour faire fonctionner ce code, ça plante direct mon Excel.

    Message: Excel cherche une solution et ça redémarre

    Bon ce n'ai pas grave, en fait ce que je souhaitai svp c'est un logiciel qui m'imprime la liste les variables utiliser dans un projet, j'ai déja eu ce style de logiciel, je vais tenter de le retrouver.

    Merci beaucoup pour ton aide, bonne après midi a toi

    Cordialement Raymond

  4. #4
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re salut

    Bon j'ai retrouver le programme mais autant pour moi c'est un programme qui mets le code en couleur avec indentation et imprime en couleur le code.

    le programme n'ai pas de moi, trouver sur le net, je le poste si ça peut servir a quelqu'un

    Sinon mon soucis de variable n'ai pas résolu, il doit bien exister un programme qui rempli cette mission

    Cdtl
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    J'ai modifié un peu mon code et il fonctionne chez moi sur Excel 2003 et 2007. Il te faut adapter à tes besoins :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Private Sub Noms_Modules()
     
        Dim CollectionModule As Object
        Dim Module As Object
        Dim Tbl
        Dim Ligne As String
        Dim Pos As Integer
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        Dim L As Integer
     
     
        On Error Resume Next
     
        'défini dans un tableau les mots à chercher
        Tbl = Array("Sub", _
                    "Function", _
                    "Public", _
                    "Global", _
                    "Private", _
                    "Dim", _
                    "Static")
     
        Set CollectionModule = ActiveWorkbook.VBProject.VBComponents
     
        For Each Module In CollectionModule
     
            K = K + 1
            L = L + 1
            'inscrit le nom du module en colonne A
            Cells(K, 1) = Module.Name
            Cells(K, 1).Font.Bold = True
            Cells(K, 2) = "Variables"
            Cells(K, 3) = "Sub/Function"
     
            'recherche les lignes commençant par les noms du tableau et les inscrit
            'en colonne B. C'est une moulinette qui passe tous les noms du tableau
            'et toutes les lignes
            For I = 0 To UBound(Tbl)
     
                For J = 1 To Module.CodeModule.CountOfLines
     
                    Ligne = Trim(Module.CodeModule.Lines(J, 1))
     
                    Pos = InStr(Ligne, Tbl(I))
     
                    If Pos = 1 Then
     
                        'si c'est une variable
                        If InStr(Ligne, "Sub") = 0 And InStr(Ligne, "Function") = 0 Then
     
                            K = K + 1
                            Cells(K, 2) = Ligne
     
                        'si c'est une Sub ou Function
                        Else
     
                            L = L + 1
                            Cells(L, 3) = Ligne
     
                        End If
                    End If
     
                Next J
     
            Next I
     
        Next
     
        Set CollectionModule = Nothing
        Set Module = Nothing
        Erase Tbl
     
    End Sub
    Hervé.

  6. #6
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    salut,
    c'est le complément MZ-tools 3.0 qu'il vous faut
    Dans le MENU "Autres utilitaires" "générer la doc. XML"
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  7. #7
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    @Theze:

    Re Salut

    Merci a toi, je te joint une capture des modules, Usf, il y a pas de macros dans le programme.

    je ne suis pas sur d'arriver a faire fonctionner ton code avec mon programme

    Pense tu que cela soit possible svp

    Merci a plus tard

    Ray
    Images attachées Images attachées  

  8. #8
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    salut,
    c'est le complément MZ-tools 3.0 qu'il vous faut
    Dans le MENU "Autres utilitaires" "générer la doc. XML"
    Salut Oliv-

    Merci pour ta réponse j'ai déja d'installer smart indenter dans mon Excel

    il me faudra sans doute désinstaller Smart indenter sinon risque de conflit ???
    avant d'installer MZ tools ou celui fonctionne t'il a part d'excel ???

    Merci bonne fin d'après midi

    Cdtl Ray

  9. #9
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par eliot.raymond Voir le message
    Salut Oliv-

    il me faudra sans doute désinstaller Smart indenter sinon risque de conflit ???
    avant d'installer MZ tools ou celui fonctionne t'il a part d'excel ???
    Ray
    du tout les 2 peuvent être présents, ils se complètent d'ailleurs.

    pour voir différemment les objets de ton classeur clique sur le dossier jaune en dessous de VBAPROJECT sur ton image
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  10. #10
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re Salut

    Ok merci de ton aide

    je cherche MZ tools 3.0 sur le net et je l'installerai sur mon Excel 2007

    Merci a plus tard

    Ray

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Tu dis :
    Merci a toi, je te joint une capture des modules, Usf, il y a pas de macros dans le programme.
    je comprends pas, mais à quoi te servent les cinq modules si il n'y a aucune macro ?

  12. #12
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Citation Envoyé par Theze Voir le message
    Tu dis :

    je comprends pas, mais à quoi te servent les cinq modules si il n'y a aucune macro ?
    Salut Theze

    si si il y en a pas mal des macros, excuse moi, je me suis complètement planter dans ce que je voulais t'écrire

    je suis encore une fois désolé, j'ai passer assez de temps dessus pour qu'il ni ai rien, de plus il fonctionne bien mais il est un peu long a se charger plus de 1 minute avant que j'ai de nouveau la main.

    ce pourquoi je voudrais bien faire un peu le ménage dans les codes

    Merci pour la remarque

    A plus tard

    Ray

    Citation Envoyé par Oliv- Voir le message
    du tout les 2 peuvent être présents, ils se complètent d'ailleurs.

    pour voir différemment les objets de ton classeur clique sur le dossier jaune en dessous de VBAPROJECT sur ton image
    Re Salut Oliv-

    J'ai installer et suivi les conseils, MZ-tools FR 3.0 ça fonctionne avec Smart indenter sur excel 2007.

    Pour mes variables toujours pas trouver le moyen d'imprimer mes variables et ou elles se trouvent dans les modules et UFS.

    Merci beaucoup pour ton aide, c'est gentil a toi.

    je vais essayer le code de l'ami These

    Cordialement Ray

    Bonjour Theze, Forum

    Je n'arrive pas a faire fonctionner ton code, je ne comprends pas trop comment
    ça marche

    j'ai beaucoup de variables et ne vois pas comment les retrouver toutes sans erreurs

    Ce n'ai pas grave, je te remercie pour ton aide, je te souhaite une bonne journée

    Cordialement Raymond

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour à toutes et tous,

    Raymond, je viens de nouveau de modifier ma proc. Teste si ça convient. Le nom des modules est inscrit en gras, la cellule colorée en jaune, les procédures sont aussi inscrites en gras mais la couleur de cellule en vert et ensuite, les variables sont inscrites alignées à gauche :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    Private Sub Noms_Modules()
     
        Dim CollectionModule As Object
        Dim Module As Object
        Dim Ligne As String
        Dim Pos As Integer
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        Dim Proc As Boolean
     
        On Error Resume Next
     
        Set CollectionModule = ActiveWorkbook.VBProject.VBComponents
     
        For Each Module In CollectionModule
     
            'le module où est mis ce code doit s'appeller "Module1" si on veux
            'éviter qu'il soit pris en compte sinon, adapter le nom ici
            If Module.Name <> "Module1" Then
     
                K = K + 1
     
                'inscrit le nom du module en gras, fond de cellule en jaune
                'et aligné à gauche
                Cells(K, 1) = Module.Name
                Cells(K, 1).Font.Bold = True
                Cells(K, 1).Interior.ColorIndex = 44
                Cells(K, 1).HorizontalAlignment = xlLeft
     
                'mets le drapeau à False pour récupérer les variables en tête de module
                Proc = False
     
                'boucle sur les lignes de code
                For I = 1 To Module.CodeModule.CountOfLines
     
                    'supprime les espaces
                    Ligne = Trim(Module.CodeModule.Lines(I, 1))
     
                    'variables en tête de module
                    If Left(Ligne, 3) = "Dim" Or _
                        Left(Ligne, 6) = "Public" Or _
                        Left(Ligne, 6) = "Global" Or _
                        Left(Ligne, 7) = "Private" Or _
                        Left(Ligne, 6) = "Static" Then
     
                        If Proc = False And InStr(Ligne, "Sub") = 0 And InStr(Ligne, "Function") = 0 Then
     
                            K = K + 1
     
                            'variables alignées à droite
                            Cells(K, 1) = Ligne
                            Cells(K, 1).HorizontalAlignment = xlRight
     
                        End If
     
                    End If
     
                    If InStr(Ligne, "Sub") <> 0 Or _
                        InStr(Ligne, "Function") <> 0 And _
                        InStr(Ligne, "End Sub") = 0 And _
                        InStr(Ligne, "End Function") = 0 Then
     
                        Proc = True
     
                        K = K + 1
     
                        'inscrit le nom de la proc en gras, fond de cellule en vert
                        Cells(K, 1) = Left(Ligne, InStr(Ligne, "(") - 1)
                        Cells(K, 1).Font.Bold = True
                        Cells(K, 1).Interior.ColorIndex = 43
                        Cells(K, 1).HorizontalAlignment = xlLeft
     
                        'continue le passage sur les lignes à partir de la ligne en cours
                        For J = I To Module.CodeModule.CountOfLines
     
                            'toujours sans espace
                            Ligne = Trim(Module.CodeModule.Lines(J, 1))
     
                            '
                            If Left(Ligne, 3) = "Dim" Or Left(Ligne, 6) = "Static" Then
     
                                K = K + 1
     
                                'variables alignées à droite
                                Cells(K, 1) = Ligne
                                Cells(K, 1).HorizontalAlignment = xlRight
     
                            End If
     
                            'si on rencontre la fin de la proc, continu la recherche des proc
                            'à la ligne suivante
                            If Left(Ligne, 7) = "End Sub" Or _
                                Left(Ligne, 12) = "End Function" Then
     
                                I = J
                                Exit For
     
                            End If
                        Next J
     
                    End If
     
                Next I
     
            End If
     
        Next
     
        Set CollectionModule = Nothing
        Set Module = Nothing
     
    End Sub
    Hervé.

  14. #14
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Salut Hervé

    Merci pour le code, je test de nouveau ça, a mon retour (RDV important)

    je te tient informer de mes essais un petit plus tard

    Encore merci de t'interresser a mon soucis, c'est sympa a toi

    Cordialement Raymond

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oups,

    les variables sont inscrites alignées à gauche
    Je voulais dire alignées à droite :o(

    Hervé.

  16. #16
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour à toutes et tous,

    Raymond, je viens de nouveau de modifier ma proc. Teste si ça convient. Le nom des modules est inscrit en gras, la cellule colorée en jaune, les procédures sont aussi inscrites en gras mais la couleur de cellule en vert et ensuite, les variables sont inscrites alignées à gauche :


    Hervé.
    chez moi cela fonctionne bien, il faut bien sûr avoir déclaré les variables !!

    mettre en t^te de chaque module et compiler pour vérifier.
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tout juste Oliv-, comme je le paramètre d'office dans les options, je n'ai pas pensé à ça :o((
    Donc, je re-poste de nouveau le code où j'ai mis un drapeau et affiche un message pour attirer l'attention dans le cas où la demande de déclaration n'est pas explicite :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    Private Sub Noms_Modules()
     
        Dim CollectionModule As Object
        Dim Module As Object
        Dim Ligne As String
        Dim Pos As Integer
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
        Dim Proc As Boolean
        Dim Op_Explicit As Boolean
     
        On Error Resume Next
     
        Set CollectionModule = ActiveWorkbook.VBProject.VBComponents
     
        For Each Module In CollectionModule
     
            'le module où est mis ce code doit s'appeller "Module1" si on veux
            'éviter qu'il soit pris en compte sinon, adapter le nom ici
            If Module.Name <> "Module1" Then
     
                K = K + 1
     
                'inscrit le nom du module en gras, fond de cellule en jaune
                'et aligné à gauche
                Cells(K, 1) = Module.Name
                Cells(K, 1).Font.Bold = True
                Cells(K, 1).Interior.ColorIndex = 44
                Cells(K, 1).HorizontalAlignment = xlLeft
     
                'mets le drapeau à False pour récupérer les variables en tête de module
                Proc = False
     
                'boucle sur les lignes de code
                For I = 1 To Module.CodeModule.CountOfLines
     
                    'défini un drapeau si la demande de déclaration des variables est explicitée
                    If Left(Ligne, 15) = "Option Explicit" Then
     
                        Op_Explicit = True
     
                    End If
     
                    'supprime les espaces
                    Ligne = Trim(Module.CodeModule.Lines(I, 1))
     
                    'variables en tête de module
                    If Left(Ligne, 3) = "Dim" Or _
                        Left(Ligne, 6) = "Public" Or _
                        Left(Ligne, 6) = "Global" Or _
                        Left(Ligne, 7) = "Private" Or _
                        Left(Ligne, 6) = "Static" Then
     
                        If Proc = False And InStr(Ligne, "Sub") = 0 And InStr(Ligne, "Function") = 0 Then
     
                            K = K + 1
     
                            'variables alignées à droite
                            Cells(K, 1) = Ligne
                            Cells(K, 1).Font.Bold = False
                            Cells(K, 1).HorizontalAlignment = xlRight
     
                        End If
     
                    End If
     
                    If InStr(Ligne, "Sub") <> 0 Or _
                        InStr(Ligne, "Function") <> 0 And _
                        InStr(Ligne, "End Sub") = 0 And _
                        InStr(Ligne, "End Function") = 0 Then
     
                        Proc = True
     
                        K = K + 1
     
                        'inscrit le nom de la proc en gras, fond de cellule en vert
                        Cells(K, 1) = Left(Ligne, InStr(Ligne, "(") - 1)
                        Cells(K, 1).Font.Bold = True
                        Cells(K, 1).Interior.ColorIndex = 43
                        Cells(K, 1).HorizontalAlignment = xlLeft
     
                        'continue le passage sur les lignes à partir de la ligne en cours
                        For J = I To Module.CodeModule.CountOfLines
     
                            'toujours sans espace
                            Ligne = Trim(Module.CodeModule.Lines(J, 1))
     
                            '
                            If Left(Ligne, 3) = "Dim" Or Left(Ligne, 6) = "Static" Then
     
                                K = K + 1
     
                                'variables alignées à droite
                                Cells(K, 1) = Ligne
                                Cells(K, 1).HorizontalAlignment = xlRight
     
                            End If
     
                            'si on rencontre la fin de la proc, continu la recherche des proc
                            'à la ligne suivante
                            If Left(Ligne, 7) = "End Sub" Or _
                                Left(Ligne, 12) = "End Function" Then
     
                                I = J
                                Exit For
     
                            End If
                        Next J
     
                    End If
     
                Next I
     
                'si pas de déclaration explicite, message sinon, remet le drapeau à False
                If Op_Explicit = False Then
     
                    MsgBox "Attention, la déclaration explicite des variables n'a pas été demandée en tête du module '" & Module.Name & "' !" & vbCrLf _
                           & "Il se peut que certaines variables ne soient pas déclarées explicitement, donc la procédure ne les détectera pas.", _
                           vbExclamation, _
                           "Déclaration des variables."
     
                Else
     
                    Op_Explicit = False
     
                End If
     
            End If
     
        Next Module
     
        Set CollectionModule = Nothing
        Set Module = Nothing
     
    End Sub
    Si d'autres personnes ont des idées pour faire évoluer ce code, surtout n'hésitez pas à les proposer.

    Hervé.

  18. #18
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Salut Hervé

    Je poste une capture comme ça c'est plus facile

    j'ai créer un module1 et j'ai mis (ton tout dernier code) et je ne peux pas exécuter le code

    je ne comprends vraiment pas comment ça marche

    désoler d'être un peu beaucoup naif sur ce coup la

    j'ai tout lu et relu tes explications mais j'avance pas MAIS ça plante plus et je n'ai d'erreur

    Merci de ta patience

    Cdlt Ray
    Images attachées Images attachées  

  19. #19
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Soit tu mets le curseur dans la proc (n'importe où) puis touche F5 ou bouton triangle bleu de lecture, soit tu vire le mot "Private" qui empêche de montrer la proc dans la fenêtre d'exécution des macros.

    Hervé.

  20. #20
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re

    j'ai enlever (Private) j'ai bien le nom de la macro je la lance mais il se passe rien mais pas d'erreur

    (1) faut'il que j'écrive dans ta macro ???

    je n'ai modifier une ligne dans ton code

    (2) Que devrai me répondre la macro

    Voila je retourne voir pour d'autres essais

    Ray

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/02/2008, 14h50
  2. Liste des variables.
    Par defacta dans le forum Langage
    Réponses: 1
    Dernier message: 13/09/2007, 13h59
  3. [Sécurité] $_ENV => Liste des variables liées
    Par Romanops dans le forum Langage
    Réponses: 8
    Dernier message: 17/04/2007, 16h07
  4. Réponses: 3
    Dernier message: 07/12/2006, 13h23
  5. [POO] Liste des variables de mon Objet
    Par hisy dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo