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

VBA Word Discussion :

Rechercher-remplacer par lots


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Rechercher-remplacer par lots
    Bonjour à tous,

    Je cherche à écrire une macro qui me permettra de rechercher et remplacer plusieurs termes dans de nombreux fichiers (plusieurs centaines).

    Voici ce que j'ai pour l'instant :
    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
    Sub rechercher_remplacer_batch()
        Dim Directory As String
        Dim FType As String
        Dim FName As String
        'mettre ici le chemin d'accès au dossier où se trouvent les fichiers
        Directory = "C:\fic"
        FType = "*.rtf"
     
     
        ChDir Directory
     
        FName = Dir(FType)
     
        Do While FName <> ""
     
            Documents.Open FileName:=FName
     
            Selection.Find.ClearFormatting
            Selection.Find.Replacement.ClearFormatting
            With Selection.Find
    ' copier autant de fois qu'il y a d'éléments à remplacer
                .Text = "(-:"
                .MatchCase = True
                .Replacement.Text = "{0>"
                .MatchWildcards = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
     
    ' copier autant de fois qu'il y a d'éléments à remplacer
            With Selection.Find
                .Text = ")="
                .MatchCase = True
                .Replacement.Text = "<}"
                .MatchWildcards = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
     
     
    ' copier autant de fois qu'il y a d'éléments à remplacer
            With Selection.Find
                .Text = "101"
                .MatchCase = True
                .Replacement.Text = "100"
                .MatchWildcards = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
     
     
    ' copier autant de fois qu'il y a d'éléments à remplacer
            With Selection.Find
                .Text = "%("
                .MatchCase = True
                .Replacement.Text = "{>"
                .MatchWildcards = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
     
     
    ' copier autant de fois qu'il y a d'éléments à remplacer
            With Selection.Find
                .Text = ":-)"
                .MatchCase = True
                .Replacement.Text = "<0}"
                .MatchWildcards = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
     
            ActiveDocument.Close wdSaveChanges
     
            FName = Dir
        Loop
     
    End Sub
    Parfois la macro fonctionne sur un ou deux fichiers, parfois elle ne se lance pas du tout. Lorsque j'ai un message d'erreur, VBA me signale qu'il ne trouve pas tel ou tel fichier, pas forcément le même à chaque fois. La macro fonctionne en général sur au moins un fichier avant de planter.

    De toute évidence je loupe quelque chose, mais j'ai beau triturer ce bout de code, je tourne en rond !

    Merci d'avance à ceux qui pourront m'aider !

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je n'ai pas des tonnes de fichiers RTF sous la main, pour tester, mais voici de quoi, pour éviter quelques répétitions de cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    With Selection.Find
    ' copier autant de fois qu'il y a d'éléments à remplacer
          .Text = "(-:"
          .MatchCase = True
          .Replacement.Text = "{0>"
          .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    J'ai mis les "mots avant" dans la colonne a d'une feuille Excel, et les "mots après" correspondants dans la colonne b. Je les récupères dans un dictionnaire et je boucle sur les dictionnaire. Attention, j'ai mis le nom du fichier Excel et le nom du dossier en dur dans le code. Tu vas devoir adapter. Et puis, n'oublie pas d'ajouter les références indiquées dans les commentaires du début.

    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
    Sub ChangerDesMotsAvecSourceDesMotsDansExcel()
    'IMPORTANT.
    'Ajouter la référence à Microsoft Scripting Runtime
    'et la référence à ExcelXX Objects Library
    'Sinon, cela va joyeusement planter
    'Les mots à remplacer sont dans la "Feuil1" en colonne A
    'Les nouveaux mots sont dans la "Feuil1" en colonne B
        Dim AppExcel As Excel.Application
        Dim Feuille As Excel.Worksheet
        Dim Classeur As Excel.Workbook
        Dim AvantAprès As Scripting.Dictionary
        Set AvantAprès = New Scripting.Dictionary
        Set AppExcel = New Excel.Application
        Set Classeur = AppExcel.Workbooks.Open("C:\Test\Substituts.xlsx")
        Set Feuille = Classeur.Sheets("Feuil1")
        Dim LeDernier As Integer
        LeDernier = Feuille.UsedRange.Rows.Count
        'Récupérer les couples de mots à changer et
        'leur remplaçants
        For i = 1 To LeDernier
            AvantAprès.Add Key:=Feuille.Cells(i, 1).Value, Item:=Feuille.Cells(i, 2).Value
        Next
        AppExcel.Quit
        Dim fso As Scripting.FileSystemObject
        Set fso = New Scripting.FileSystemObject
        Dim repertoire As Scripting.Folder
        Dim lefichier As Scripting.File
        Dim lesfichiers As Scripting.Files
        Set repertoire = fso.GetFolder("C:\Test")
        Set lesfichiers = repertoire.Files
        Dim LesClefs
        Dim LesItems
        LesClefs = AvantAprès.Keys
        LesItems = AvantAprès.Items
        Dim cefichier As String
        For Each lefichier In lesfichiers
            If UCase(Right(lefichier.Name, 4)) = ".RTF" Then
                Documents.Open FileName:=lefichier.Path
                For i = 0 To AvantAprès.Count - 1
                    LaClef = LesClefs(i)
                    LItem = LesItems(i)
                    Selection.Find.ClearFormatting
                    Selection.Find.Replacement.ClearFormatting
                    With Selection.Find
                        .Text = LaClef
                        .MatchCase = True
                        .Replacement.Text = LItem
                        .MatchWildcards = False
                    End With
                    Selection.Find.Execute Replace:=wdReplaceAll
     
                Next
                Documents(lefichier.Path).Save
                Documents(lefichier.Path).Close
             End If
        Next
    End Sub
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2015, 21h59
  2. Rechercher/remplacer par dans word depuis Excel
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2011, 17h00
  3. vbs pour rechercher-remplacer par fichier spécifique
    Par chicano dans le forum VBScript
    Réponses: 7
    Dernier message: 17/03/2009, 13h25
  4. Réponses: 3
    Dernier message: 19/07/2008, 09h57
  5. Réponses: 5
    Dernier message: 18/06/2008, 15h11

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