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 :

Balayage par le code VBA d'un code VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut Balayage par le code VBA d'un code VBA
    Bonjour,

    Je cherche à balayer un code VBA et faire sortir dans une feuille Excel tous les noms de fonctions et de procédures où apparaissent un mot clé : on error resume next.

    J'espère que ma question est assez claire.

    Est-ce que vous pôurriez m'aider s'il vous plait ?

    Par avance merci.

    Marco.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 84
    Par défaut
    Voir cette discution... on utilise VBComponent ensuite c'est une histoire de chaines de caractères...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonsoir,

    Merci de cette réponse.

    J'ai essayé de travailler sur le sujet en m'aidant de ce que tu m'as transmis.

    Par contre je bloque encore sur la manière de récupérer le contenu des lignes de code à l'intérieur de mes fonctions.

    Voici mon code :

    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
     
     
     
    Option Explicit
     
    Function Audit() As Boolean
        Dim MyWorkbook      As Workbook
        Dim MySheet         As Worksheet
     
        Dim VBCodeMod       As CodeModule
        Dim MyComponent     As VBComponent
        Dim ProcType        As VBIDE.vbext_ProcKind
     
        Dim StrNomProc      As String
        Dim StrTypeProc     As String
     
        Dim LngStartProc    As Long
        Dim LngEndProc      As Long
     
        Dim StrContenuFonction  As String
        Dim StrChaineCherchee   As String
        Dim MaLigneCode    As String
     
    '    Dim ArrResume()
     
        Dim LngCpt          As Long
        Dim LngLigne        As Long
        Dim StartLine       As Long
     
    On Error GoTo erreur
     
       Set MyWorkbook = ActiveWorkbook
    '   Set MyWorkbook = Application.Workbooks("")
       Set MySheet = MyWorkbook.Sheets(1)
     
       StrChaineCherchee = "on error resume next"
     
       LngLigne = 1
     
        For Each MyComponent In MyWorkbook.VBProject.VBComponents
            'On recupere le type du composant
            Select Case MyComponent.Type
                Case vbext_ct_StdModule
                    StrTypeProc = "Module"
                Case vbext_ct_ClassModule
                    StrTypeProc = "Class"
                Case vbext_ct_Document
                    StrTypeProc = "Feuille"
                Case vbext_ct_MSForm
                    StrTypeProc = "UserForm"
            End Select
     
            Set VBCodeMod = MyWorkbook.VBProject.VBComponents(MyComponent.Name).CodeModule
     
            'On récupère la taille de la procédure
            With VBCodeMod
                StrNomProc = VBCodeMod.ProcOfLine(1, ProcType)
                If StrNomProc <> "" Then
                    StartLine = 1 '.CountOfLines + 1
                    StrNomProc = VBCodeMod.ProcOfLine(StartLine, ProcType)
                    'On recherche le type de la procédure
                    MaLigneCode = .Lines(StartLine, 1)
     
                    'On récupère le nom de la fonction et son type
                    LngStartProc = VBCodeMod.ProcBodyLine(StrNomProc, ProcType) + 1
                    LngEndProc = .ProcStartLine(StrNomProc, ProcType) + .ProcCountLines(StrNomProc, ProcType) - 2
     
                    LngCpt = StartLine
                    Do Until LngLigne >= LngEndProc
     
     
                       ********** MON problème est à ce niveau... **********
                        StrContenuFonction = LTrim(VBCodeMod.Lines(LngCpt, 1))
                       ********** MON problème est à ce niveau... **********
     
                        If InStr(1, StrChaineCherchee, StrContenuFonction) Then
                            MySheet.Range("A" & LngLigne) = MyComponent.Name
                            MySheet.Range("B" & LngLigne) = StrNomProc
                            MySheet.Range("C" & LngLigne) = StrTypeProc
                            MySheet.Range("D" & LngLigne) = StrChaineCherchee
                            LngLigne = LngLigne + 1
     
                        End If
                        LngCpt = LngCpt + 1
                    Loop
                End If
            End With
     
        Next
     
    erreur:
    Resume
        Set MyWorkbook = Nothing
     
    End Function

    Comment faire donc pour récupérer le contenu d'une ligne de code à l'intérieur de la fonction. A partir de là, j'ai une chaîne de caractére. Je veux savoir si elle contient la chaîne "on error resume next" dans ce cas précis et insérer un ligne dans une feuille excel pour en avoir une liste.

    J'espère être assez clair dans ma question. N'hésitez pas à me demander des éclaicissements.

    Bonne soirée et merci d'avance.

    Marc.

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 116
    Par défaut
    Salut
    Une petite question, quel est le but final, je veux dire trouver un texte dans un code VBA, ok, mais l’intérêt de tout ça? Pourquoi ne pas simplement ouvrir le fichier et faire une recherche voir un remplacement, tu as une grande quantité de donnée a traiter ?

    Sinon pour trouver une ligne, je suppose que j'utiliserait InStr pour trouver la position du mot en question, puis je chercherais de part et d'autre de se mot les caractères de mise a la ligne (vbNewLine ou vbCrLf).
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonjour,

    Tout d'abord merci de ta réponse.
    La finalité, comme je le disais plus haut c'est de retrouver certaines chaines de caractères dans une application.

    Je dois reprendre le développement d'une application qui a déja beucoup vécu et qui n'a pas été programmé trop dans les régles : elle a été faite principalement par des stagiaires et depuis le départ, de nombreuses personnes y ont participé.

    Le premier problème auquel je dois m'attaquer, c'est la gestion des erreur (qui est pour ainsi dire inexistante ou au mieu consiste à masquer des erreurs).

    Dans de nombreux cas le programme s'arrête et par dans le débugeur. Au bureau c'est ennuyeux, mais devant le client je vous laisse imaginer.

    Je dois dans un premier temps faire l'inventaire, proposer des solutions et après on verra pour un planning des corrections. C'est la première étape d'une chantier pour le refactoring de ce code.

    Au fait si tu as d'autres suggestions je susi preneur.

    Bonne journée.

    Marco.

  6. #6
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    moi dans ce genre de cas.

    j'imprime le code... je m'arme d'un fluo... une latte... et hop je passe en revue le code.

    rapide et j'ai une meilleure vue d'ensemble par la suite...

    aaahh le bon vieux papier

Discussions similaires

  1. [XL-2013] Classer des âges par tranches d'âges via un code VBA - Erreur 1004
    Par Estriny dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/12/2014, 21h04
  2. [VBA-E] executer code d'un userform depuis un autre
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 03/04/2006, 19h35
  3. [VBA-E]Pb code VLOOKUP
    Par fabrice92 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2006, 20h15
  4. [VBA-E] mon code ne marche pas sur un autre PC
    Par yannph dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2006, 21h03

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