Comment puis-je rechercher et remplacer dans plusieurs fichiers Word?


10

Je cherche un moyen de rechercher et de remplacer dans de nombreux fichiers Word (.doc) (à des fins d'automatisation du processus).

Le logiciel que j'ai trouvé jusqu'à présent ne me permet que de rechercher, mais pas de remplacer.

Comment puis-je faire cela avec Word?

Réponses:


7

Vous pouvez essayer VBA Find & Replace (lien mis en cache).

VBA Find and Replace © fournit une méthode pour rechercher et remplacer du texte n'importe où dans un document (ou une collection de documents) en utilisant des paires de variables définies par l'utilisateur "find" et "replace", ou une liste définie par l'utilisateur de "find" et "replace" paires. Il fournit également une méthode pour rechercher du texte et remplacer le texte trouvé par une entrée définie par l'utilisateur "AutoText" ou "Building Block".


Cela ressemble à ce que je voulais - Vous rock!
Tal Galili

Sur quels fichiers ce plugin recherche-t-il? Je ne trouve pas la possibilité de spécifier un répertoire de départ. Utilise-t-il uniquement tous les fichiers ouverts? Et comment puis-je simplement chercher sans remplacer?
Michael S.

2
@gentlesea le paramètre «Traiter les fichiers dans le dossier batch» ne vous aide-t-il pas?
Jay Wick

1
Il y a une période supplémentaire à la fin de cette URL - je la supprimerais mais StackOverflow est mal conçu et empêche cela: gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Chris Adams

1
merci, vraiment l'apprécie. (:
p._phidot_

0

Dans le but d'exécuter plusieurs remplacements normaux et génériques dans plusieurs fichiers MS Word situés dans plusieurs dossiers sous le dossier racine donné, j'ai créé la macro VBA suivante. Pour l'utiliser, vous devez changer le contenu des variables suivantes (constantes):

  • rootPath : dossier racine sous lequel se trouvent les dossiers contenant des documents Word.
  • findTextsWild et replaceTextsWild : tableau d'expressions de recherche et de remplacement basées sur des caractères génériques.
  • findTexts et replaceTexts : tableau d'expressions normales de recherche et de remplacement.

Peut-être que vous le trouverez utile :-)

Sub GlobalTextReplacement()
' Root under which all manuals are stored
Dim rootPath As String
rootPath = "c:\Data\Manuals\"

' Find and replace text for wildcard replacement. Performed first.
Dim findTextsWild() As Variant, replaceTextsWild() As Variant
findTextsWild = Array("[ ]{2;}", "[cC]onfiguration[/ ]@[pP]olicy [rR]epository", "[sS]ervlet[- ]@[fF]ilter")
replaceTextsWild = Array(" ", "Configuration/Policy Repository", "Servlet-Filter")

' Find and replace text for normal case insensitive replacement. Performed second.
Dim findTexts() As Variant, replaceTexts() As Variant
findTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "servletfilter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p ", " ^p")
replaceTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "Servlet-Filter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p", "^p")

' Main code
Application.ScreenUpdating = False

Dim dirNames(20) As String
Dim dirNamesCount As Integer
dirNamesCount = 0

Dim dirName As String
dirName = Dir$(rootPath & "*", vbDirectory)
Do Until LenB(dirName) = 0
    Dim dirPath As String
    dirPath = rootPath & dirName
    If ((GetAttr(dirPath) And vbDirectory) = vbDirectory) And (dirName <> ".") And (dirName <> "..") Then
        dirNamesCount = dirNamesCount + 1
        dirNames(dirNamesCount) = dirPath & "\"
    End If
    dirName = Dir$
Loop

Do While dirNamesCount > 0
    Dim fileName As String
    dirName = dirNames(dirNamesCount)
    dirNamesCount = dirNamesCount - 1
    fileName = Dir$(dirName & "*.doc", vbDirectory)
    Do Until LenB(fileName) = 0
        Dim filePath As String
        filePath = dirName & fileName
        fileName = Dir$

        Dim document As document
        Set document = Documents.Open(filePath)
        document.TrackRevisions = True

        document.Select

        Dim i As Integer, maxIndex As Integer
        maxIndex = UBound(findTextsWild)
        For i = LBound(findTextsWild) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTextsWild(i)
                .Replacement.Text = replaceTextsWild(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchWildcards:=True
            End With
        Next

        maxIndex = UBound(findTexts)
        For i = LBound(findTexts) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTexts(i)
                .Replacement.Text = replaceTexts(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchCase:=False, MatchWildcards:=False
            End With
        Next

        document.Save
        document.Close
    Loop
Loop

Application.ScreenUpdating = True
End Sub


-1

Si vous ne possédez pas Microsoft Word et que vous recherchez une alternative gratuite qui vous aidera, essayez OpenOffice.org .

Je ne pense pas que cela vous aidera si vous cherchez un moyen d'automatiser ce processus.


-1

Notepad ++ Est capable de le faire en utilisant "Rechercher dans les fichiers"


Raccourci clavier Ctrl + Maj + F
Yitzchak

2
Notepad ++ peut ouvrir des documents Microsoft Word?
Daniel Beck

1
Cela PEUT fonctionner si la correspondance de chaîne et la chaîne de remplacement ne sont pas des caractères spéciaux car les documents Word 2007+ sont en fait des fichiers XML par nature. Mais j'ai dit que c'était possible. Avez-vous pris soin de tester cela avant de poster comme réponse.
tumchaaditya

-2
Option Explicit

Public Sub BatchReplaceAll()
    Dim FirstLoop As Boolean
    Dim myFile As String
    Dim PathToUse As String
    Dim myDoc As Document
    Dim Response As Long

    PathToUse = ActiveDocument.Path
    On Error Resume Next
    Documents.Close SaveChanges:=wdPromptToSaveChanges
    FirstLoop = True
    myFile = Dir$(PathToUse & "\*.doc*")

    While myFile <> ""
        Set myDoc = Documents.Open(PathToUse & "\" & myFile)
        If FirstLoop Then
            Application.Dialogs(wdDialogEditReplace).Show
            FirstLoop = False

            Response = MsgBox("Do you want to process the rest of the files in this folder", vbYesNo)
            If Response = vbNo Then Exit Sub
        Else
            With Dialogs(wdDialogEditReplace)
                .ReplaceAll = 1
                .Execute
            End With
        End If
        myDoc.Close SaveChanges:=wdSaveChanges
        myFile = Dir$()
    Wend
End Sub

3
Qu'est-ce que ce bloc de code, que fait-il et comment peut-il aider à résoudre ce problème?
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.