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 toutes les procédures d'un classeur


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
    Avril 2007
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 835
    Par défaut Remplacer un mot dans toutes les procédures d'un classeur
    Bonsoir à tous.

    Un petit coup de pouce SVP.

    J'ai dans le code de plusieurs classeurs (projet VBA protégé par un mot de passe) une constante dont la valeur est fausse que je souhaiterais remplacer.

    Explication de la procédure du fichier joint.

    Dans une première phase ouvrir le classeur a traité.

    Ensuite, ouvrir le classeur ("RemplacerMotDansProcéduresClasseurActif 4.xls") qui contient un userform permettant la recherche et le remplacement de cette constante. Le classeur sera masqué à l’ouverture et une barre est créée qui permettra de lancer cet userform.

    En cliquant sur la barre, l’userform est activé, celui-ci contient de 2 textbox et un bouton de commande.

    Saisi du mot rechercher dans le TextBox1 et le mot à remplacer dans le TextBox2.

    Le clic sur le bouton de commande déprotégera le projet VBA du classeur actif a traité, puis permettra dans ce classeur de rechercher dans toutes les procédures si le mot du TextBox1 n’existe pas, dans ce cas il active l’userform pour faire une nouvelle saisie et relancer la procédure. Si il existe, le mot du TextBox1 sera remplacer par le mot du TextBox2 dans toutes les procédures.

    Le code trouvé sur le net que j’ai adapté (voir le fichier joint) ne fonctionne pas dans la phase de vérification de l’existence ou non du mot rechercher.

    Merci d’avance pour votre réponse.

    @ +.

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir

    à tester si cela te convient

    code du commandButton à remplacer
    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
    Private Sub CommandButton1_Click()
    Me.Hide
    Dim ClasseurActif As String
    ClasseurActif = "" & ActiveWorkbook.Name & ""
    'Déprotéger le classeur actif
    UnprotectVBProject Workbooks(ClasseurActif), "MotDePasse"
     
    RemplaceDansCode ActiveWorkbook, TextBox1, TextBox2
    If NonTrouvé Then
      Me.Show
    Else
    Unload Me
    MsgBox "Mise à jour du classeur " & "[" & Workbooks(ClasseurActif).Name & "]" & vbLf _
     & Cpt & " remplacement(s) effectué(s)."
    End If
     
    End Sub
    Fonction à placer où tu veux en haut de 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Option Explicit
    Option Compare Text
    Public Cpt As Integer
    Function RemplaceDansCode(Wbk As Workbook, motRecherche As String, motRemplace As String)
    Dim VBComp As Object
    Dim NbLigneCode As Long
    Dim CodeDuModule As Variant, LigneDeModule As Variant, T1 As Variant, T2 As Variant
    Dim i As Double, j As Double
    Dim NonTrouvé As Boolean
    Cpt = 0
    NonTrouvé = True
     
        For Each VBComp In Wbk.VBProject.VBComponents
        NbLigneCode = VBComp.CodeModule.CountOfLines
          If NbLigneCode > 0 Then
            CodeDuModule = VBComp.CodeModule.Lines(1, NbLigneCode)
            LigneDeModule = Split(CodeDuModule, vbNewLine) 'Chr(13) + Chr(10))
              For i = 0 To UBound(LigneDeModule)
                If InStr(1, LigneDeModule(i), motRecherche) Then
                  NonTrouvé = False: Cpt = Cpt + 1
                  T1 = Split(LigneDeModule(i), motRecherche)
                  T2 = T1(0)
                    For j = 1 To UBound(T1)
                      T2 = T2 + motRemplace + T1(j)
                    Next j
                  VBComp.CodeModule.ReplaceLine i + 1, T2
                End If
              Next i
          End If
        Next
        If NonTrouvé Then MsgBox motRecherche & " n'a pas été trouvé!"
    End Function
    cordialement

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 835
    Par défaut
    Bonjour fred65200, le forum.

    Merci pour ta réponse.

    à tester si cela te convient

    code du commandButton à remplacer
    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
    Private Sub CommandButton1_Click()
    Me.Hide
    Dim ClasseurActif As String
    ClasseurActif = "" & ActiveWorkbook.Name & ""
    'Déprotéger le classeur actif
    UnprotectVBProject Workbooks(ClasseurActif), "MotDePasse"
     
    RemplaceDansCode ActiveWorkbook, TextBox1, TextBox2
    If NonTrouvé Then
      Me.Show
    Else
    Unload Me
    MsgBox "Mise à jour du classeur " & "[" & Workbooks(ClasseurActif).Name & "]" & vbLf _
     & Cpt & " remplacement(s) effectué(s)."
    End If
     
    End Sub
    j'ai inséré ton code dans mes procédures, petit problème lorsque j'exécute la macro le msgbox informe que zéro occurence n'a était trouvée, pourtant en vérifiant dans le VB Editor le projet et bien déverrouillé et les mots recherchés ont été remplacés.

    Sans quitter le fichier à traité, je relance la macro, mais cette fois le msgbox informe que X occurences on étaient trouvées?

    Je n'arrive pas à contourner cet obstacle, ais-je inséré ton code au mauvais endroit?

    As-tu une idée.
    @ +

  4. #4
    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
    Par défaut
    Tu devrais jeter un oeil dans la FAQ ici "Comment remplacer un mot dans toutes les procédures d'un classeur ?"
    Il te suffit de modifier un peu la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub RemplacementMotDansProcedure(Ancien, Nouveau)
    de déplacer les déclarations et l'affectation de Nouveau et Ancien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim Ancien As String, Nouveau As String
    'et
        Ancien = "Feuil1"
        Nouveau = "Feuil3"
    pour que tu puisses appliquer cette procédure aux différents classeurs à modifier.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 835
    Par défaut
    Bonsoir ouskel'n'or.

    Il te suffit de modifier un peu la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub RemplacementMotDansProcedure(Ancien, Nouveau)
    de déplacer les déclarations et l'affectation de Nouveau et Ancien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim Ancien As String, Nouveau As String
    'et
        Ancien = "Feuil1"
        Nouveau = "Feuil3"
    pour que tu puisses appliquer cette procédure aux différents classeurs à modifier.
    Je ne vois pas, il faut modifier, déplacer et affecter, le code de ma procédure ou celui qui est sur le lien "Comment remplacer un mot dans toutes les procédures d'un classeur"?.

    @ +.

  6. #6
    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
    Par défaut
    Si tu ne vois pas comment utiliser le code de SilkyRoad, je ne vois qu'une raison : Tu ne sais pas sur quelles lignes se trouvent les mots à remplacer... C'est bien ça ? Parce que là, ça risque d'être plus compliqué...
    Tu dis
    A+

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/07/2014, 19h46
  2. Positionnement dans toutes les feuilles d'un classeur Excel
    Par josephhd dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/05/2012, 10h32
  3. [WD-2007] Remplacer un mot dans tout le document
    Par laclac dans le forum Word
    Réponses: 2
    Dernier message: 29/06/2011, 18h14
  4. procedure recherche d'un mot dans toutes les bdd
    Par asmar dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/11/2009, 10h10
  5. Réponses: 4
    Dernier message: 01/03/2006, 13h58

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