Bonjour à tous,
Je suis novice en VBA. comme indiqué dans le titre, je cherche à remplacer une liste de mots par une autre dans beaucoups de fichiers word.
Pour cela j'ai déjà pas mal cherché sur DVP et j'ai trouvé une macro dans le forum contribuez "Recherche d'un ou plusieurs mots d'une liste dans un Document - Trois options"
Mais je ne vois pas comment la modifier pour qu'elle me cherche les mots de la colonne de gauche et si il les trouve qu'ils les remplace dans tout le doc par le mot de la colonne de droite.
J'ai une grande liste de mots à remplacer, mais seulement un petit nombre par fichier word. J'ai écris un code qui met trop longtems et qui fini par planter :
Mon code :
Je sais que certains vont s'arracher les cheveux mais bon....
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 Sub Replace_ANCIEN_NOUVEAU() With ActiveDocument.Content.Find .ClearFormatting With .Replacement .ClearFormatting .Font.Color = wdColorRed End With ' A partir de cette zone coller les codes à remplacer '-------------------------------------------------- .Execute FindText:="40036021", ReplaceWith:="5014426", _ Format:=True, Replace:=wdReplaceAll .Execute FindText:="40036140", ReplaceWith:="5014427", _ Format:=True, Replace:=wdReplaceAll .Execute FindText:="40000654", ReplaceWith:="5014428", _ Format:=True, Replace:=wdReplaceAll .Execute FindText:="40000779", ReplaceWith:="5014429", _ Format:=True, Replace:=wdReplaceAll ........etc............. end with end sub
Merci beaucoup pour votre aide.
Voici le lien ou j'ai trouvé quelqhe chose de bien mais je ne sais pas trop l'exploiter :
http://www.developpez.net/forums/d44...trois-options/
2 - La liste des mots et le texte sont placés dans deux documents différents.
Le document 1 contient la macro, et la liste des mots.
La liste des mots est un tableau Word à deux colonnes dans le premier document.
La colonne 1 contient les mots à rechercher, 1 mot par cellule
La colonne 2 est destinée à recevoir une croix si le mot est trouvé
Le texte à parcourir est dans le second document.
Les documents
"Tableau des mots.doc" contient la macro et le tableau des mots
"C:\Le Rep\Le Texte.doc" contient le texte
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 Sub ChercherTrouver() Dim Doc1 As Document Dim Doc2 As Document Dim TableauDesMots(), ok As Boolean, i As Integer Dim DerLigne As Byte 'Désactiver la mise à jour de l'application pour éviter les mouvements de pages Application.ScreenUpdating = False Set Doc1 = Documents("Tableau des mots.doc") 'contient la macro Set Doc2 = Documents.Open("C:\Le Rep\Le Texte.doc") 'contient le texte DoEvents DerLigne = Doc1.Tables(1).Rows.Count ReDim Preserve TableauDesMots(DerLigne) For NoLigne = 1 To DerLigne TableauDesMots(NoLigne) = Doc1.Tables(1).Cell(NoLigne, 1) 'Suppression de vbcrlf en fin de cellule 'et ajout du No de ligne formaté sur 4 caractères TableauDesMots(NoLigne) = Trim(Left(TableauDesMots(NoLigne), _ Len(TableauDesMots(NoLigne)) - 2)) & Right("0000" & NoLigne, 4) Next For i = 1 To UBound(TableauDesMots) ok = recherche(Left(TableauDesMots(i), Len(TableauDesMots(i)) - 4), Doc2) If ok Then 'récup du No de ligne dans le tableau NoLigne = Val(Right(TableauDesMots(i), 4)) 'insertion d'une croix dans la colonne adjascente Doc1.Tables(1).Cell(NoLigne, 2).Range.Text = "X" End If Next 'Réactiver la mise à jour de l'application Application.ScreenUpdating = True End Sub Function recherche(LeMot As String, Doc2 As Document) As Boolean Dim Plage Set Plage = Doc2.Content With Plage.Find .Text = LeMot recherche = .Execute End With End Function
Partager