Menu

Remplacement text dans Word depuis Excel [Résolu]

Messages postés
212
Date d'inscription
lundi 27 avril 2009
Dernière intervention
14 février 2019
- - Dernière réponse : GDX
Messages postés
212
Date d'inscription
lundi 27 avril 2009
Dernière intervention
14 février 2019
- 14 févr. 2019 à 15:20
Bonjour,

Je programme en vba sous excel. Mon fichier et un grand tableau (base de données).

A partir de cette base de donnée, je souhaite générer un document word.

J'ai donc un template et je souhaite avec la macro remplacer des parties de texte par les données dans ma base de donnée.

Voilà comment je fais :

' Je déclare mes variables
Dim appWrd As Object
Dim docWord As Object

' J'attribue à mes objet les propriété d'un document Word
Set appWrd = CreateObject("Word.Application")
Set docWord = CreateObject("Word.DOCUMENT")

' Je charge mon template
Doc = "C:\...\template.dotx"
Set docWord = appWrd.Documents.Open(Doc)

' Je remplace une chaine de caractère par une autre
With docWord.Content.Find
.ClearFormatting
.Text = "toto"
With .Replacement
.ClearFormatting
.Text = "toto_new"
End With
.Execute Replace:=wdReplaceAll
.Forward = True
.Wrap = wdFindContinue
End With


Ce code ne me retourne aucune erreur. Le document s'ouvre bien mais le remplacement de la chaire de caractères ne se fait pas.

Je ne comprends pas pourquoi, pouvez-vous m'aider ?

Merci d'avance,
Afficher la suite 

Votre réponse

4 réponses

Messages postés
5825
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 février 2019
404
0
Merci
Bonjour,

Essaie ceci:

docWord.Content.Find.Execute FindText:="toto", ReplaceWith:="toto_new", Replace:=wdReplaceOne


Pour le code, si tu pouvais le mettre entre les balises comme ceci:

https://codes-sources.commentcamarche.net/forum/affich-10044470-valeur-maxi#49


Commenter la réponse de cs_Le Pivert
Messages postés
212
Date d'inscription
lundi 27 avril 2009
Dernière intervention
14 février 2019
7
0
Merci
Merci,

désolé pour l'absence de balise.

Le code proposé ne donne pas plus de résultats.

J'ai essayé de changer le template de .dotx en .docx mais pas plus de succès non plus.

Quand je fais un Ctrl+H dans le document word directement cela fonctionne parfaitement.

GDX
cs_Le Pivert
Messages postés
5825
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 février 2019
404 -
voilà un exemple à adapter:

https://www.cjoint.com/c/IBokI1QhxmQ

@+ Le Pivert
Commenter la réponse de GDX
Messages postés
212
Date d'inscription
lundi 27 avril 2009
Dernière intervention
14 février 2019
7
0
Merci
Merci,

j'ai trouvé d'où venait le problème.

Dans mon code, je déclare mes variables de la manière suivante :

' Je déclare mes variables
 Dim appWrd As Object
 Dim docWord As Object
 

' J'attribue à mes objet les propriété d'un document Word
 Set appWrd = CreateObject("Word.Application")
 Set docWord = CreateObject("Word.DOCUMENT")


alors que dans votre exemple, vous les déclarez comme ceci :

    Dim appWrd As Word.Application
    Dim docWord As Word.DOCUMENT


Votre manière de déclarer les variables nécessite l'utilisation de la référence "Microsoft Office 15.0 Object Library"

Je ne veux pas dépendre de cette référence car dans ma socété, cetaine personne utilise la version 15.0 et d'autre la version 16.0.

Quand les personnes enregistrent le fichier avec la version 16.0, les personnes utilisant la version 15.0 ne peuvent plus utiliser la macro.

Est-il possible de faire du remplacement de texte sans utiliser la référence ?

Merci,
Commenter la réponse de GDX
Messages postés
212
Date d'inscription
lundi 27 avril 2009
Dernière intervention
14 février 2019
7
0
Merci
Yeeeesss,

j'ai enfin trouvé.

Il fallait juste que je redéfinisse mes constantes.

Const wdFindContinue As Integer = 1
 Const wdReplaceAll As Integer = 2
 Const wdReplaceOne As Integer = 1


Très bon forum sur le sujet :
https://www.developpez.net/forums/d1460984/logiciels/microsoft-office/excel/macros-vba-excel/microsoft-word-xx-0-object-library-l-erreur-d-execution-429-a/

Merci beaucoup,
Commenter la réponse de GDX