Remplacement d'un mot par un autre dans un document Word [Résolu]

gregml 89 Messages postés samedi 17 mai 2014Date d'inscription 16 juin 2017 Dernière intervention - 19 juin 2014 à 14:38 - Dernière réponse : jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

gregml 89 Messages postés samedi 17 mai 2014Date d'inscription 16 juin 2017 Dernière intervention - 19 juin 2014 à 14:40
0
Merci
Ahhh, je viens de m'apercevoir que je me suis "planté" de forum... cela concerne VB.net et non VBA...

Désolé, Grég
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 juin 2014 à 14:45
=> Redirection faite ^^
Commenter la réponse de gregml
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 juin 2014 à 14:43
0
Merci
Il ne te manquerait pas des apostrophes dans ton code ?

Mot = martin

==>
Mot = "martin"

gregml 89 Messages postés samedi 17 mai 2014Date d'inscription 16 juin 2017 Dernière intervention - 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
Commenter la réponse de jordane45
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 juin 2014 à 15:01
0
Merci
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"

gregml 89 Messages postés samedi 17 mai 2014Date d'inscription 16 juin 2017 Dernière intervention - 19 juin 2014 à 15:03
C'est bon, j'ai remplacé String par Object et ça fonctionne.
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 juin 2014 à 15:10
et ça fonctionne.
Je sais... ^^

Tu penses à clore le sujet ?
gregml 89 Messages postés samedi 17 mai 2014Date d'inscription 16 juin 2017 Dernière intervention - 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
jordane45 22884 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 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...
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.