Remplacement text dans Word depuis Excel

Résolu/Fermé
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 - 14 févr. 2019 à 10:45
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 - 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,
A voir également:

4 réponses

GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
14 févr. 2019 à 15:20
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,
1
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 14 févr. 2019 à 11:06
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


0
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
14 févr. 2019 à 11:22
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 févr. 2019 à 11:35
voilà un exemple à adapter:

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

@+ Le Pivert
0
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
14 févr. 2019 à 14:43
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,
0