Remplacement d'un mot par un autre dans un document Word

Résolu
gregml
Messages postés
89
Date d'inscription
samedi 17 mai 2014
Statut
Membre
Dernière intervention
16 juin 2017
- 19 juin 2014 à 14:38
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
- 19 juin 2014 à 15:23
Bonjour,

A chaque jour suffit sa peine...
Aujourd'hui, je me suis lancé dans la recherche et le remplacement de chaînes de caractères dans un document Word.

J'ai fait des recherches et suis tombé sur la portion de code :

oword.ActiveDocument.Content.Find.Execute(FindText:="{nom}" ReplaceWith:="martin", Replace:=Word.WdReplace.wdReplaceAll)


J'ai alors écrit ce code :

Option Strict On
Option Explicit On
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Word

Module Module1

Sub Main()
Dim oWord As New Word.Application

oWord.Documents.Open(C:\Users\greg\Desktop\DocumentProjetSimplifieAccolade.docx)
oWord.Visible = True

oWord.ActiveDocument.Content.Find.Execute(FindText:={nom}, Replace:="martin", Replace:=Word.WdReplace.wdReplaceAll)

Console.ReadLine()
oWord.ActiveDocument.Close()
oWord.Visible = False
oWord.Quit()
End Sub
End Module


Jusqu'ici... tout va bien. Dans mon document Word, {nom} a été remplacé par
martin... Super.


Par contre, lorsque j'ai essayé de :

1) remplacer martin par une variable de type String, en faisant :

Dim Mot As String
Mot = martin
...
oword.ActiveDocument.Content.Find.Execute(FindText:="{nom}" ReplaceWith:=Mot, Replace:=Word.WdReplace.wdReplaceAll)


...là, ça n'a plus fonctionné. J'ai tenté la conversion avec CChar(Mot), mais rien n'y fait... Quelqu'un aurait-il une idée s'il vous plaît?

2) "systématiser" cette opération en créant une procédure du genre
Private Sub Remplacer (ByVal motancien As String, Byval motnouveau As String)
oWord.ActiveDocument.Content.Find.Execute(FindText:=motancien, ReplaceWith:=motnouveau, Replace:=Word.WdReplace.wdReplaceAll)
End Sub


...ça n'a pas marché : dans cette procédure, le oWord du début génère une erreur :
'oWord' n'est pas déclaré...

Je reproduis le code que j'ai tenté vainement d'exécuter :

Option Strict On
Option Explicit On
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Word

Module Module1
Dim motnouveau As String = "Martin"

Sub Main()
Dim oWord As New Word.Application

oWord.Documents.Open(C:\Users\greg\Desktop\DocumentProjetSimplifieAccolade.docx)
oWord.Visible = True

Remplacer("{nom}","martin")

Console.ReadLine()
oWord.ActiveDocument.Close()
oWord.Visible = False
oWord.Quit()

Sub Remplacer (ByVal motancien As String, Byval motnouveau As String)
oWord.ActiveDocument.Content.Find.Execute(FindText:=motancien, ReplaceWith:=motnouveau, Replace:=Word.WdReplace.wdReplaceAll)
End Sub

End Sub
End Module


Quelqu'un aurait-il la solution à ce désagrément ?

Merci d'avance, Grég

3 réponses

gregml
Messages postés
89
Date d'inscription
samedi 17 mai 2014
Statut
Membre
Dernière intervention
16 juin 2017

19 juin 2014 à 14:40
Ahhh, je viens de m'apercevoir que je me suis "planté" de forum... cela concerne VB.net et non VBA...

Désolé, Grég
0
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
358
19 juin 2014 à 14:45
=> Redirection faite ^^
0
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
358
19 juin 2014 à 14:43
Il ne te manquerait pas des apostrophes dans ton code ?

Mot = martin

==>
Mot = "martin"

0
gregml
Messages postés
89
Date d'inscription
samedi 17 mai 2014
Statut
Membre
Dernière intervention
16 juin 2017

19 juin 2014 à 14:52
Salut Jordane,
Merci encore une fois de venir à mon secours. C'est toujours réconfortant de vous voir arriver et d'être aussi dispos pour les autres.

Pour ce qui est du code, je viens de changer, en mettant des guillemets mais cela ne fonctionne pas davantage...?? J'avoue ne pas bien comprendre..

Option Strict On
Option Explicit On
Imports Microsoft.office.Interop
Imports Microsoft.Office.Interop.Word

Module Module1

Sub Main()
Dim oWord As New Word.Application
Dim motnouveau As String
motnouveau = "Martin"
oWord.Documents.Open("C:\Users\greg\Desktop\DocumentProjetSimplifieAccolades.docx")
oWord.Visible = True

oWord.ActiveDocument.Content.Find.Execute(FindText:="{nom}", ReplaceWith:=motnouveau, Replace:=Word.WdReplace.wdReplaceAll)

Console.ReadLine()

oWord.ActiveDocument.Close()
oWord.Visible = False
oWord.Quit()
End Sub

End Module
0
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
358
19 juin 2014 à 15:01
Tu n'aurais pas des indications d'erreurs dans ton visual studio ???

Remplace string par object sur la ligne :
 Dim motnouveau As Object
        motnouveau = "Martin"

0
gregml
Messages postés
89
Date d'inscription
samedi 17 mai 2014
Statut
Membre
Dernière intervention
16 juin 2017

19 juin 2014 à 15:03
C'est bon, j'ai remplacé String par Object et ça fonctionne.
0
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
358
19 juin 2014 à 15:10
et ça fonctionne.
Je sais... ^^

Tu penses à clore le sujet ?
0
gregml
Messages postés
89
Date d'inscription
samedi 17 mai 2014
Statut
Membre
Dernière intervention
16 juin 2017

19 juin 2014 à 15:15
Oui, je clos.
A titre d'information, j'ai aussi déclaré la variable oWord entre le Module1 et la Sub Main() et miracle...ma petite procédure d'appel a fonctionné...
Bientôt la gloire... je plaisante.

Merci encore, Grég
0
jordane45
Messages postés
35789
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
358
19 juin 2014 à 15:23
A titre d'information, j'ai aussi déclaré la variable oWord entre le Module1 et la Sub Main() et miracle...ma petite procédure d'appel a fonctionné...

Oui c'est normal.
Tu as rendu ta variable "Publique" .
Elle est donc accessible partout dans tes sub...
0