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 :

Remplacer un mot dans le code d’un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut Remplacer un mot dans le code d’un userform
    Bonsoir.

    La macro « Comment remplacer un mot dans toutes les procédures d'un classeur » de SilkyRoad

    Lien : http://excel.developpez.com/faq/inde...ectedProjetVBE.

    Elle permet de rechercher et remplacer un mot dans tous les modules, mais je souhaiterais que cette action puisse le faire dans le code des userform.

    Je ne sais pas comment modifier le code.

    Une petite idée pour m’aider, merci d’avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Un tuto du même auteur : http://silkyroad.developpez.com/VBA/VisualBasicEditor/

    Starec

  3. #3
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,

    à la lecture du code donné par SilkyRoad
    http://excel.developpez.com/faq/inde...ectedProjetVBE
    il me semble que les mots sont remplacés dans tout le projet VBA, module de feuille, de code, de classe ou userform.
    Cordialement

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonsoir Starec, fred65200.

    à la lecture du code donné par SilkyRoad
    http://excel.developpez.com/faq/inde...ectedProjetVBE
    il me semble que les mots sont remplacés dans tout le projet VBA, module de feuille, de code, de classe ou userform.
    J'ai l'impression que les mots ne sont pas remplacés dans l'userform du fichier ci-joint ???

  5. #5
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir, dans ton code il y a un truc qui me tracasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Ancien = "Feuil3"
        Nouveau = "Feuil3"
    à quoi ça sert??

    Si tu places le code dans le classeur il faut que tu ajoutes une condition pour ne pas le faire dans la macro "RemplacementMotDansProcedure"

    Sinon ça fonctionne très bien

    cordialement

    EDIT
    Nommes un module modRemplacement et place la macro RemplacementMotDansProcedure dans ce module
    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
    Sub RemplacementMotDansProcedure()
        'Nécéssite d'activer la référence
        '"Visual basic For Application Extensibility 5.3"
        '
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim i As Integer
        Dim Wb As Workbook
        
        Set Wb = Workbooks("MomClasseur.xls")
        
        Ancien = "Feuil1"
        Nouveau = "Feuil3"
        
        For Each VBComp In Wb.VBProject.VBComponents
            If VBComp.Name = "modRemplacement" Then GoTo Suite
            For i = 1 To VBComp.CodeModule.CountOfLines
                Cible = VBComp.CodeModule.Lines(i, 1)
                Cible = Replace(Cible, Ancien, Nouveau)
                VBComp.CodeModule.ReplaceLine i, Cible
            Next i
    Suite:
        Next VBComp
    End Sub

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonsoir fred, le forum.

    bonsoir, dans ton code il y a un truc qui me tracasse
    Code :
    Ancien = "Feuil3"
    Nouveau = "Feuil3"
    à quoi ça sert??
    Petite erreur de ma part c'est bien Ancien = "Feuil1".

    Effectivement j'ai pas pensé qu' il faut ajouter une condition pour ne pas le faire dans la macro "RemplacementMotDansProcedure". J'ai testé ta procédure elle fonctionne très bien.

    J'ai ajouté ce bout de 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
     
    For Each VBComp In Wb.VBProject.VBComponents
        For I1 = 1 To VBComp.CodeModule
            If VBComp.CodeModule.Find(Ancien) = False Then
                MsgBox "Aucune occurence trouvée "
                Exit Sub
            Else
                For Each VBComp2 In Wb.VBProject.VBComponents
                If VBComp2.Name = "modRemplacement" Then GoTo Suite
                    For I2 = 1 To VBComp2.CodeModule.CountOfLines
                        Cible = VBComp2.CodeModule.Lines(I2, 1)
                        Cible = Replace(Cible, Ancien, Nouveau)
                        VBComp2.CodeModule.ReplaceLine I2, Cible
                    Next I2
    Suite:
                    Next VBComp2
                End If
        Next I1
    Next VBComp
     
    End Sub
    Mais ma synatxe Find ne fonctionne pas???

    Pourrais-tu la corriger SVP.

    Merci d'avance.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    j'aurai écrit plutôt ceci pour ne réaliser les changement que dans le code des UserForms :

    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
     
    Sub RemplacementMotDansProcedure1()
       'Nécéssite d'activer la référence
       '"Visual basic For Application Extensibility 5.3"
       '
       Dim oVBC As VBComponent
       Dim oCM As CodeModule
       Dim oWB As Workbook
       Dim Ancien As String, Nouveau As String, Cible As String
       Dim i As Long
       Set oWB = Workbooks("MomClasseur1.xls")
       Ancien = "Feuil1"
       Nouveau = "Feuil3"
       For Each oVBC In oWB.VBProject.VBComponents
          If oVBC.Type = vbext_ct_MSForm Then 'c'est un User Form
             Set oCM = oVBC.CodeModule
             For i = 1 To oCM.CountOfLines
                If InStr(oCM.Lines(i, 1), Ancien) Then
                   Cible = Replace(oCM.Lines(i, 1), Ancien, Nouveau)
                   oCM.ReplaceLine i, Cible
                End If
             Next i
          End If
       Next oVBC
       Set oCM = Nothing
       Set oVBC = Nothing
       Set oWB = Nothing
    End Sub
    Philippe

  8. #8
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Bonsoir,

    pour répondre à ton problème de "non Trouvé" une petite fonction

    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
    Option Explicit
    Public NonTrouvé As Boolean
    Public VBComp As Object
    Sub tes2()
    RemplaceDansCode ActiveWorkbook, "xxx", "feuil2"
    End Sub
    Function RemplaceDansCode(Wb As Workbook, motRecherche As String, motRemplace As String)
    ' Méthode de SilkyRoad -- http://excel.developpez.com/faq/?page=VBA#RemplacerMotVBE
    NonTrouvé = True
    Dim Cible As String
    Dim i As Integer
    'Dim Wb As Workbook
     
    Set Wb = ActiveWorkbook
     
    For Each VBComp In Wb.VBProject.VBComponents
      For i = 1 To VBComp.CodeModule.CountOfLines
        Cible = VBComp.CodeModule.Lines(i, 1)
        If InStr(1, Cible, motRecherche) Then NonTrouvé = False
        Cible = Replace(Cible, motRecherche, motRemplace)
        VBComp.CodeModule.ReplaceLine i, Cible
      Next i
    Next VBComp
    If NonTrouvé Then MsgBox """" & motRecherche & """ n'a pas été trouvé!"
     
    End Function
    cordialement

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonsoir philben.

    j'aurai écrit plutôt ceci pour ne réaliser les changement que dans le code des UserForms :
    C'est très bien pour ne réaliser les changement que dans le code des UserForms, mais le changement doit se faire dans tous les modules, les Userforms et le Thisworkbook.

    Mais avant le changement, je souhaiterais tester, si le mot "Feuil1" n'existe pas on quitte la procédure, si non, réaliser les changements.

    Merci d'avance pour ta réponse, @+.

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    C'est très bien pour ne réaliser les changement que dans le code des UserForms, mais le changement doit se faire dans tous les modules, les Userforms et le Thisworkbook.
    le titre du thread ne dit pas ça...

    Voici la fonction qui fait la modification partout sauf dans le module "modremplacement". A adapter selon besoin :
    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
     
    Sub RemplacementMotDansProcedure1()
       'Nécéssite d'activer la référence
       '"Visual basic For Application Extensibility 5.3"
       '
       Dim oVBC As VBComponent
       Dim oWB As Workbook
       Dim Ancien As String, Nouveau As String, Cible As String
       Dim i As Long
       Set oWB = Workbooks("MomClasseur1.xls")
       Ancien = "Feuil3"
       Nouveau = "Feuil1"
       For Each oVBC In oWB.VBProject.VBComponents
          If oVBC.Name <> "modRemplacement" And _
             oVBC.CodeModule.Find(Ancien, 1, 1, -1, -1) Then
             With oVBC.CodeModule
                For i = 1 To .CountOfLines
                   If InStr(1, .Lines(i, 1), Ancien, vbTextCompare) Then
                      Cible = Replace(.Lines(i, 1), Ancien, Nouveau, , , vbTextCompare)
                      .ReplaceLine i, Cible
                   End If
                Next i
             End With
          End If
       Next oVBC
       Set oVBC = Nothing
       Set oWB = Nothing
    End Sub
    Philippe

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonsoir fred.

    J'ai modifier un peu le code ça fonctionne très bien.

    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
    Option Explicit
    Public NonTrouvé As Boolean
    Public VBComp As Object
    
    Sub test2()
    Dim TexteRechercher As String
    TexteRechercher = InputBox("Saisir le mot rechercher") 
    RemplaceDansCode ActiveWorkbook, TexteRechercher, "Feuil2"
    End Sub
    
    Function RemplaceDansCode(Wb As Workbook, motRecherche As String, motRemplace As String)
    ' Méthode de SilkyRoad -- http://excel.developpez.com/faq/?page=VBA#RemplacerMotVBE
    NonTrouvé = True
    Dim Cible As String
    Dim i As Integer
    'Dim Wb As Workbook
     
    Set Wb = ActiveWorkbook
       
    For Each VBComp In Wb.VBProject.VBComponents
    If VBComp.Name = "modRemplacement" Then GoTo Suite
      For i = 1 To VBComp.CodeModule.CountOfLines
        Cible = VBComp.CodeModule.Lines(i, 1)
        If InStr(1, Cible, motRecherche) Then NonTrouvé = False
        Cible = Replace(Cible, motRecherche, motRemplace)
        VBComp.CodeModule.ReplaceLine i, Cible
      Next i
    Suite:
    Next VBComp
    If NonTrouvé Then MsgBox """" & motRecherche & """ n'a pas été trouvé!"
     
    End Function


    J’insiste un petit peu, en rapport avec ma demande initiale comment utiliser la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.VBE.VBProjects("vbaproject").VBComponents.CodeModule.Find(Ancien, , , , , False, False) = False
    Faut-il utiliser impérativement le nom du VBAProject ("vbaproject") ou peut-on utiliser le nom du classeur???

    Si tu as quelques explications, elles sont les bien venues, car le sujet n'est pas très renseigné dans l'aide VBA.

    Merci pour ton aide, cordialement modus57

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir,

    Faut-il utiliser impérativement le nom du VBAProject ("vbaproject") ou peut-on utiliser le nom du classeur???
    Il n'est pas nécessaire de connaitre le nom du projet pour le manipuler, tout ce qu'il te faut c'est une référence au classeur qui le contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Project As VBProject
    Set Project = ThisWorkbook.VBProject 'Pour manipuler ce projet
     
    Set Project = Workbooks("NomClasseur").VBProject 'Pour manipuler un autre projet
     
    With Project
        .VBComponents .....la suite
    End With
    Par contre pour utiliser une variable de type VBProject il faut cocher la référence Microsoft Visual Basic For Applications Extensibility.

    Cordialement,

    Tirex28/

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonjour Tirex28.

    Il n'est pas nécessaire de connaitre le nom du projet pour le manipuler, tout ce qu'il te faut c'est une référence au classeur qui le contient:
    J'ai essayer de bidouiller le code d'une procédure trouver sur le net :
    http://xlbysteph.free.fr/aideinforma...l_code_vba.htm

    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
     
    Sub rechercher()
    Dim Project As VBProject
    Set Project = Workbooks("MomClasseur_1.xls").VBProject 'Pour manipuler un autre projet
    Dim NomProjet As String
    NomProjet = "MomClasseur1.xls"
    Dim k As Integer, j As Integer
    Dim z As Long
    nbproc = Application.VBE.VBProjects(Project).VBComponents.Count
    cpt = 0
    Ancien = "Feuil1"
     
    For j = 1 To nbproc
    z = 1
        For k = 1 To Application.VBE.VBProjects(Project).VBComponents(k).CodeModule.CountOfLines - 1
        If Application.VBE.VBProjects(NomProjet).VBComponents(j).CodeModule.Name <> "Module7" Then
            If Application.VBE.VBProjects(Project).VBComponents(k).CodeModule.Find(Ancien, z, 1, z + 1, 1, False, False) = False Then
                cpt = cpt + 1
                MsgBox ("Nombre d'occurences de " & Chr(34) & Ancien & Chr(34) & "dans le projet " & Chr(34) & NomProjet & Chr(34) & " : " & Chr(13) & cpt)
                End
            Else
                cpt = cpt + 1
                MsgBox ("Nombre d'occurences de " & Chr(34) & Ancien & Chr(34) & "dans le projet " & Chr(34) & NomProjet & Chr(34) & " : " & Chr(13) & cpt)
                Exit For
            End If
            z = z + 1
        End If
        Next k
    Next j
     
    End Sub
    A prime abord elle ne fonctionne pas, j'ai certainement mal utilisé les références au classeur.

    Pourrais-tu me dire ce qui ne va pas dans l'exemple de code ci-dessus.

    Merci et @ +.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Pourrais-tu me dire ce qui ne va pas dans l'exemple de code ci-dessus.
    Je veux bien essayer mais dis moi d'abord ce que tu attend de cette procedure et quelle erreur tu obtiens.

    - déclare toutes tes variables
    - nbproc semble correspondre au nombre de modules et non au nombre de procedures
    - L'instruction End devrait sans doute etre remplacé par Exit For
    - Remplace Application.VBE.VBProjects(Project) par Project

    Si tu veux une boucle sur chaque module d'un projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim VBComp As VBComponent
    For Each VBComp In Project.VbComponents
    'code
    Next
    Cordialement,

    Tirex28/

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonjour tirex28.

    Je m'excuse pour le retard de ma réponse.

    Pour répondre à ta question:

    Cette macro doit rechercher la variable "Ancien" dans tous les modules y compris les Userforms sauf dans le module qui contient la macro "rechercher", si elle est trouvée on sort de la procédure.

    Si elle n'est pas trouvée, exécution du code ''' Ici code.

    Voici le code modifier, çà bug à la ligue 30, message "Erreur '91' : Variable objet ou variable de bloc With non définie"

    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
     
    Option Explicit
     
    Sub rechercher()
          Dim Project As VBProject
    10    Set Project = Workbooks("MomClasseur_1.xls").VBProject 'Pour manipuler un autre projet
          Dim NomProjet As String
    20    NomProjet = "MomClasseur1.xls"
          Dim k As Integer, j As Integer
          Dim z As Long
          Dim nbproc As VBComponent
    30    nbproc = Project.VBComponents.Count
          Dim cpt As Integer
    40    cpt = 0
          Dim Ancien As String
    50    Ancien = "Feuil4"
     
    60    For j = 1 To nbproc
    70    z = 1
    80        For k = 1 To Project.VBComponents(k).CodeModule.CountOfLines - 1
    90        If Project.VBComponents(j).CodeModule.Name <> "Module7" Then
    100           If Project.VBComponents(k).CodeModule.Find(Ancien, z, 1, z + 1, 1, False, False) = False Then
    110               cpt = cpt + 1
    120               MsgBox ("Nombre d'occurences de " & Chr(34) & Ancien & Chr(34) & "dans le projet " & Chr(34) & NomProjet & Chr(34) & " : " & Chr(13) & cpt)
    130               Exit For
    140           Else
    150               cpt = cpt + 1
    160               MsgBox ("Nombre d'occurences de " & Chr(34) & Ancien & Chr(34) & "dans le projet " & Chr(34) & NomProjet & Chr(34) & " : " & Chr(13) & cpt)
                      'Exit For
                      '''Ici code ....
    170           End If
    180           z = z + 1
    190       Exit For
    200       End If
    210       Next k
    220   Next j
     
    End Sub
    J'espère que je suis assez clair, si non demande moi des explications complémentaires.

    @ +

  16. #16
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour
    je pense que tu as une errreur ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim nbproc As VBComponent
    nbproc doit retourner un nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim nbproc As integer 'ou Byte ou Long
    cordialement

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    nbproc est un integer, pas un VBComponent.
    Change ta déclaration

    Pour être certain de tout remplacer, et pour te rassurer, tu peux tester le module concerné :
    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
    Sub TesterLexistenceDunModule()
    Dim ok As Boolean
        Set CL1 = ThisWorkbooks
            For Each VBCmp In CL1.VBProject.VBComponents
                Select Case VBCmp.Type
                    Case 100
                        MsgBox "Remplacement effectué dans la feuille, type " & VBCmp.Type & " " & VBCmp.Name
                    Case 1
                        MsgBox "Remplacement effectué dans le module standard, type " & VBCmp.Type & " " & VBCmp.Name
                    Case 2
                        MsgBox ""Remplacement effectué dans le module de classe, type " & VBCmp.Type & " " & VBCmp.Name
                    Case 3
                        MsgBox ""Remplacement effectué dans l'Userform, type " & VBCmp.Type & " " & VBCmp.Name
                    Case Else
                        MsgBox "Doit rien avoir ici " & VBCmp.Type & " " & VBCmp.Name
                End Select
                If Not LCase(VBCmp.Name) = "nom du module contenant la macro ""remplacer""" Then
                     'Ton code de remplacement
                     '...
                End If
     
            Next VBCmp
     
    End Sub
    Et tu places toutes les macros et fonctions utilisées dans un nouveau module dont tu donnes en minuscules le nom à la place de "nom du module contenant la macro ""remplacer"""
    A+

  18. #18
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour à tous,

    Personellement je mettais ce genre de code dans un projet à part, ca simplifie le traitement (on ne verifie pas le nom du module contenant la procédure) et permet une éventuelle réutilisation.

    - Le projet contenant ces procédures utilise la référence à Microsoft Visual Basic for Applications Extensibility.
    - Le projet cible ne doit pas etre protégé.
    - Outils>Macros>Securite>Editeurs approuves>Cocher "Faire confiance au projet .."


    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
    Sub Demarrer()
        RechercherRemplacer Workbooks("Test").VBProject, "AncienMot", "NouveauMot"
    End Sub
     
    Sub RechercherRemplacer(Project As VBProject, Ancien As String, Nouveau As String)
        Dim VbComp As VBComponent
        Dim Exist As Boolean
        Dim NumLigne As Long, NumCol As Long
        For Each VbComp In Project.VBComponents
            NumLigne = 1
            NumCol = 1
            With VbComp.CodeModule
                Do
                    Exist = .Find(Ancien, NumLigne, NumCol, -1, -1, False, False)
                    If Exist Then
                        .ReplaceLine NumLigne, Replace(.Lines(NumLigne, 1), Ancien, Nouveau)
                        NumCol = NumCol + 1
                    End If
                Loop While Exist
            End With
        Next
    End Sub
    Bon dimanche,

    Tirex28/

    Ps: Les parametres de Find ne sont pas restrictifs (on ne regarde pas la casse, ni si le mot trouvé est entier), il serait peut etre plus prudent de les modifier.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    783
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 783
    Points : 179
    Points
    179
    Par défaut
    Bonsoir fred, le forum.

    Je reviens vers vous et sur ce fil afin de pouvoir le marquer comme résolu.

    Fred a dit :

    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
    Sub RemplacementMotDansProcedure()
        'Nécéssite d'activer la référence
        '"Visual basic For Application Extensibility 5.3"
        '
        Dim Ancien As String, Nouveau As String, Cible As String
        Dim VBComp As VBComponent
        Dim i As Integer
        Dim Wb As Workbook
     
        Set Wb = Workbooks("MomClasseur.xls")
     
        Ancien = "Feuil1"
        Nouveau = "Feuil3"
     
        For Each VBComp In Wb.VBProject.VBComponents
            If VBComp.Name = "modRemplacement" Then GoTo Suite
            For i = 1 To VBComp.CodeModule.CountOfLines
                Cible = VBComp.CodeModule.Lines(i, 1)
                Cible = Replace(Cible, Ancien, Nouveau)
                VBComp.CodeModule.ReplaceLine i, Cible
            Next i
    Suite:
        Next VBComp
    End Sub
    Comment ajouter une condition pour ne pas faire le remplacement dans la
    Private Sub Workbook_BeforeClose

    J'ai essayé ce code mais il ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If VBComp.Name = "Private Sub Workbook_BeforeClose(Cancel As Boolean)" Then GoTo Suite
    Quelle est la bonne syntaxe?

    Merci d'avance de votre réponse.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [JS] Remplacer les mots dans le code d'une page.
    Par sansamis dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/01/2007, 19h06
  3. Réponses: 10
    Dernier message: 29/04/2006, 10h40
  4. [RegEx] motif pour remplacer un mot dans du code HTML ...
    Par r-zo dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 13h31

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