VBA excel - publipostage vers Word, en se basant sur un *.dotx

Résolu
JoePJ Messages postés 82 Statut Membre -  
JoePJ Messages postés 82 Statut Membre -
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 !!!

--
"L'intelligence, c'est la chose la mieux pourvue chez l'homme car : quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez...vu que c'est avec ça qu'il juge"  Coluche

12 réponses

  1. JoePJ Messages postés 82 Statut Membre 12
     
    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 !

    1
  2. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Juste au passage, pouvez-vous mettre votre document Mod1.dotx à disposition?
    Et le code complet....!

    0
  3. JoePJ Messages postés 82 Statut Membre 12
     
    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.
    0
  4. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci de votre réponse, la réponse va suivre, patience.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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...!
    0
  7. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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)

    0
  8. JoePJ Messages postés 82 Statut Membre 12
     
    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.
    0
  9. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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.
    0
  10. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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/

    0
  11. JoePJ Messages postés 82 Statut Membre 12
     
    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 ?

    0
  12. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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.
    0
  13. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    0