VBA excel - publipostage vers Word, en se basant sur un *.dotx [Résolu]

Signaler
Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
-
Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
-
Bonjour !

Je suis en train de réaliser un outil dans Excel, me permettant, à l'aide d'un USERFORM de récupérer des données clients.
1 saisie = 1 ligne dans un onglet spécifique.
mes données sont de nature Nom, Prénom, adresse, ... ainsi que VRAI/FAUX (états issus de checkbox).

La finalité : généré pour un enregistrement réalisé dans Excel, un document word, issu d'un *.dotx "publipostage", se basant sur ma feuille excel de données.

je coince sur une étape "bête" : A partir d'Excel, avec pour 1 enregistrement donné et connu (et complet), je souhaite lancer Word, créer un nouveau document à partir de mon modèle *.dotx et constater que tous ses champs de publipostage sont à jour.
Si je fais cette action à la main <=> double clic sur mon *.dotx, aucun problème, ça fonctionne "au poil". Je constate systématiquement un message à l'ouverture de Word de "synchro" avec ma source de données, que je dois valider.

En revanche, si je le fais par excel, je constate mon modèle "brut", ie. sans update des champs, comme si la connexion à la source de données était KO.

voici comment j'ai codé ça, dans Excel (et qui ne fonctionne pas) :

Set appWrd = CreateObject("Word.Application")
' word visible pour debug
appWrd.Visible = True
'Set docWord = CreateObject("Word.document")
doc = "D:\TEST\Mod1.dotx"
Set docWord = appWrd.documents.Add(doc)


à cette étape :
1. word s'est lancée : OK
2. un nouveau document, basé sur mon *.dotx a été créé : OK.
3. par contre, je vois tous les champs de publipostage... bruts, "non-évalués".
lors de l'étape 2 (création du doc), je n'ai pas le message de liens vers ma source de données... et je me dis que le problème vient certainement de là.

Toute lumière pour éclairer ma lanterne serait la bienvenue !!!

12 réponses

Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
11
C'est exactement ce que j'ai fait de mon côté, en variabilisant la valeur que j'injecte dans le first & last record.

Encore merci pour votre aide !

Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Juste au passage, pouvez-vous mettre votre document Mod1.dotx à disposition?
Et le code complet....!

Salutations.
Le Pingou
Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
11
Bonjour Le Pingou,

les 2 fichiers nécessaires sont disponibles ici : https://wetransfer.com/downloads/e2d6a4bdfef4a5b382dc341a95bb736520200419125919/956cc0

Le fichier Excel est le fichier "principal" : pour accéder à la macro, il faut cliquer sur bouton "Générer Document", présent dans l'onglet "Chiffrage".
Le fichier "Mod1.dotx" doit être placé à la racine de C:\, ou bien modifier le code en fonction.
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Merci de votre réponse, la réponse va suivre, patience.
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
En principe mon code fonctionne sauf avec votre modèle ou il me revoie un document comme suit:


Je n'ai encore pas trouvé ou est le problème...!
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
En cherchant, j'ai découpé le document Mod1.dotx en 3 ...1 page par nouveau document et en lançant le publipostage les 2 premières (page 1 et 2) sont OK par contre la 3 reproduit l'erreur "Erreur de calcule da .......". Je doit donc trouver ce qui cloche sur la page 3 de votre document (la partie ::: Proposition chiffrée ....et la suite)

Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
11
Bonjour Le Pingou,

Désolé pour le côté pas simple à dépatouiller ! Merci beaucoup dans tous les cas pour l'énergie !

j'avoue que sur la page 3, j'ai fait des champs très imbriqués ; il peut s'avérer plus rapide & malin de les calculer directement dans Excel.
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Merci du retour. J'avais remarqué dans votre classeur qu'il manquait des totaux qui pouvaient être fait directement sur la feuille.........je vais le faire et ceci simplifiera les champs de publipostage.
Patience.
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Ce n’était pas simple, les 2 fichiers doivent être dans le même dossier. Dans le programme de publipostage (sous module : lepingou macro : Sub Publipost() ) j’ai introduit le code pour créer un sous dossier dans lequel le document de publipostage sera enregistrée.
Je vous laisse la découverte.
Le lien : https://mon-partage.fr/f/chiaJBVT/

Messages postés
77
Date d'inscription
jeudi 9 septembre 2010
Statut
Membre
Dernière intervention
30 mai 2020
11
Vu le temps passé, je me doute que ce n'était pas simple !
Il me semble que ce que je n'avais pas compris, c'est (entre autre !) la déclaration du lien vers la base de donnée.

Un grand merci car c'est exactement ce que je voulais faire !

Juste une dernière question, est-il possible de ne générer le publipostage que d'un seul enregistrement spécifique, en particulier le dernier ?
Est-ce qu'à tout hasard le .firstRecord & .lastRecord me permettraient de réaliser ça ?

Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Merci du retour, content pour vous. Je ne crois pas qu'il est possible de le faire avec .firstRecord & .lastRecord .......j'ai une autre idée en Tête à voir demain.
Messages postés
9728
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
17 juin 2020
1 058
Bonjour,
Je vous propose d'essayer pour le dernier enregistrement en adaptant le code selon ce qui suit:
.suppressBlankLines = True

'****code à essayer pour un enregistrement le dernier...
nbrec = .DataSource.RecordCount
With .DataSource
.firstRecord = nbrec 'wdDefaultFirstRecord
.lastRecord = nbrec 'wdDefaultLastRecord
End With
' ********* fin de modification

.Execute Pause:=False 'Exécute l'opération de publipostage

Merci du retour