Excel vers word - Publipostage via VBA

Bonjour à tous,

Je suis nouveau sur ce forum, et après plusieurs recherches, je ne trouve pas de solutions à mon problème.

Je tiens à préciser que je n'ai pas vraiment de connaissance en VBA.

Voilà ma situation :

J'ai un modèle Word

J'ai une base de données Excel

J'ai lié ces deux documents via le publipostage, et cela fonctionne très bien.

Cependant, étant donné que j'ai plusieurs documents à éditer, qui sont issus de cette même base de données, je souhaite créer plusieurs boutons (correspondant à chaque document), qui me permettent d'imprimer ces documents en questions, en reprenant les informations de ma base de données Excel. (les informations de cette base sont modifiées régulièrement).

Voilà le cheminement que j'espère réussir à créer avec votre aide :

Je suis sur le document Excel, je clique sur le bouton, cela ouvre mon modèle Word, modifie les données du document en fonction de celles de ma base de données Excel, et affiche mon document Word. Je n'ai alors plus qu'à vérifier les informations et imprimer le document.

Je recherche juste un modèle, avec quelques explications, qui me permettra d'avancer sur mon projet.

Merci par avance de votre aide,

Bonjour,

Je vois plusieurs problèmes à votre idée :

Créer des boutons ou des liens hypertexte dans votre fichier Excel pour ouvrir votre Modèle Word,

fera apparaître (en arrière plan) La fénêtre de sécurité "Commande SQL" ou vous devez répondre Oui pour la liaison avec la source.

  • C'est galère cette fenêtre en arrière plan car on ne vois pas de suite qu'elle est ouverte.
  • Le seul moyen, est de modifier la sécurité dans la base de registre….. mais du coup votre PC et moins protégé contre des commandes qui seraient lancées à votre insu.

Microsoft aurait pu prévoir une autorisation accordée manuellement par l'utilisateur.

Salut Tibo0,

Je ne suis pas une machine en VBA mais je vais essayer de t'aider.

Tout d'abords, j'aimerai mieux comprendre : comment, au clic du bouton sur Excel, comptes tu que ta macro sache quels sont les éléments de ta base de données Excel à placer dans ton fichier Word ? Il y a une manip avant ?

Je te conseille de commencer par créer ton Word, avec toutes les informations que tu veux, mais vierge au niveau des éléments que ta BDD (Base de Données) va remplir. Aux différents endroits où tu aimerais qu'un élément de ta BDD remplisse le vide, ajoute un signet avec un nom bien spécifique (Insertion -> Signet).

Ainsi, avec vba depuis Excel, tu seras en mesures de remplir ton document de cette manière :

'On ouvre le fichier word et on le masque
    Set wordApp = CreateObject("word.Application")
    Set WordDoc = wordApp.Documents.Open("CHEMIN_DU_DOCUMENT_VIERGE.doc")
    wordApp.Visible = False

'On remplie le fichier word
     WordDoc.Bookmarks("Signet1").Range.Text = XX.Value
     WordDoc.Bookmarks("Signet2").Range.Text = XX.Value
     WordDoc.Bookmarks("Signet3").Range.Text = XX.Value
     WordDoc.Bookmarks("Signet4").Range.Text = XX.Value

     wordApp.Visible = True

Dis moi déjà si tu arrives à faire cela, on verra l'impression après

EDIT : Coucou Xmenpl, j'ai déjà utilisé la méthode que je cite au dessus sans problème de commande SQL pour ma part

Salut Baboutz,

Tout d'abord, merci pour ta réactivité.

En fait, mon document Word est créé, et les éléments à remplir automatiquement (noms, adresses, etc.) sont défini et liés au fichier Excel, par la fonction Publipostage. (je les ai liés avec la manip suivant : Insert Merge Field).

Est-ce que avec cette manip, ton exemple fonctionnera quand même ?

Ou dois-je repasser via les signets, et lier chaque variable de mon tableau à mon élément Word ?

EDIT : Coucou Xmenpl, j'ai déjà utilisé la méthode que je cite au dessus sans problème de commande SQL pour ma part

Bonjour Baboutz oui effectivement çà doit fonctionner puisque le Doc n'est plus un modèle lié à une base.

Bien vu j'avoue que je n'y avais même pas pensé un seul instant.

Je garde çà en mémoire pour une prochaine utilisation … merci à toi

Hum, j'aimerai bidouiller un petit peu pour voir, tu pourrai mettre ton word et ton excel avec le bouton ? (En mettant du faux texte dans ta BDD évidemment)

merci à toi

Avec plaisir Xmenpl

Du coup, je pense que la méthode des signets est plus "propre" et carré.

Je suis en train de refaire le document, ensuite je fais le bouton avec ton code et je te fais un retour.

En tout cas, un grand merci, cela va me permettre d'avancer !

Avec plaisir ! Tiens nous au courant

Alors, j'ai créé un petit fichier Word avec 3 signets (Nom, Prenom, Age), et une BDD avec ces éléments.

Voici ce que j'ai mi dans le bouton (je ne sais pas comment afficher le code comme vous, alors je le colle simplement ci-dessous )

Sub Button1_Click()

'On ouvre le fichier word et on le masque

Set wordApp = CreateObject("word.Application")

Set WordDoc = wordApp.Documents.Open("C:\Users\ThibautC\Desktop\Test pour forum\Test_bouton_publipostage.docx")

wordApp.Visible = False

'On remplie le fichier word

WordDoc.Bookmarks("Nom").Range.Text = Cells(A, 2)

WordDoc.Bookmarks("Prenom").Range.Text = Cells(B, 2)

WordDoc.Bookmarks("Age").Range.Text = Cells(C, 2)

wordApp.Visible = True

End Sub

Lorsque je le lance, il me propose comment je souhaite ouvrir le Word (lecture seule, copie locale ou recevoir une notif lorsque l'original est dispo) et peu importe mon choix, j'ai ce message d'erreur : Run-time error '1004' Application-defined or object-defined error

Si jamais vous avez la solution

Merci d'avance !

Bonne soirée

Dans ton édition de texte, sur le site, tu as le symbole </>, clique dessus et insère ton code entre les balises

Ajoute le fichier word ainsi que le fichier excel, ça sera beaucoup plus facile pour moi de te montrer !

En dessous de ta plage d'édition de texte où tu écris, tu as les boutons "Aperçu" et "Envoyer" et encore en dessous tu as le bouton "Ajouter des fichiers". Tu peux nous les partager de cette manière !

Je te remercie pour ces éléments !

Voici les fichiers !

Bonne soirée

47test-pour-forum.zip (17.64 Ko)

Salut Tibo0 !

Alors, je ne sais pas où tu as mis le code ! Il faut faire alt + F11 pour ouvrir la fenêtre d'édition de code VBA

En faisant ça avec le fichier joint, tu verras que j'ai créer un module qui est relié au bouton et qui au clic du bouton effectue le code. Ma macro marche pour la première ligne, est-ce déjà ce que tu souhaite ?

(Attention, pour faire les tests de ton côté, dans Set WordDoc = wordApp.Documents.Open("XX.docx") met bien le chemin de ton fichier word à la place des X)

Salut Baboutz !

Je mettais le code de mon macro dans le bouton

Après avoir activé les macros dans les paramètres de mon Word & Excel, ça fonctionne !

Je vais tenter de reproduire cela dans mon vrai fichier et je te tiens informé !

Un immense merci !!

Ah mince.. J'ai peut-être effectué une mauvaise manip en ouvrant ton fichier !

Tant mieux si ça marche

Par contre, là ça ne marche que pour une personne de ta liste. Donc si tu veux effectuer un publipostage avec par exemple 30 personnes dans la liste, il va falloir adapter le code !

En fait, je me suis arrangé pour tout mettre sur une ligne (c'est un formulaire par personne), donc pas de soucis de ce coté-là.

Comme je souhaite faire plusieurs boutons qui dirigent chacun vers un document spécifique, je n'ai plus qu'a voir comment associer un code à un bouton et le tour est joué.

Pour associer un code à un bouton, il suffit de créer ton bouton, puis de faire un clic droit dessus et d'ajouter une macro !

Tu voulais aussi faire un impression, non ?

D'accord !

J'essaierai de lier mes boutons dans un second temps.

Comme je souhaite vérifier si le document est correctement créer, je ne sais pas si la fonction imprimer via le VBA est intéressante pour moi.

Cependant, afin d'avoir un maximum d'info pour faire évoluer le document (ou créer d'autres boutons)à, je veux bien voir un exemple de ce code, qui me permettrai d'imprimer via PDF et de l'enregistrer ou je veux

Ca ne fonctionne pas, il me met l'erreur "Erreur définie par l'application ou par l'objet"

Voici mon code:

Sub bouton()

'On ouvre le fichier word et on le masque
    Set wordApp = CreateObject("word.Application")
    Set WordDoc = wordApp.Documents.Open("Chemin_vers_Mon_Document_Word.docx")
    wordApp.Visible = False

    'On remplie le fichier word
    WordDoc.Bookmarks("Signet 1").Range.Text = Range("E9").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("E5").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("B2").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("G9").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("G5").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("B11").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("B6").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("B7").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("C4").Value
    WordDoc.Bookmarks("Signet n").Range.Text = Range("E4").Value

    wordApp.Visible = True

End Sub

Il y a beaucoup plus de signet que cela, et j'ai remplacé dans mon code les "Signet n" par les différents signets de mon Word.

Avez vous des idée ?

Bonjour,

ok pour les numéro de signet mais pour l'adresse et le nom du fichier ? c'est remplacé aussi ?

Set WordDoc = wordApp.Documents.Open("Chemin_vers_Mon_Document_Word.docx")

"C:\users\monnom\mes_documents\formulaire2.docx" '( exemple de l'adresse et du nom de fichier )

Rechercher des sujets similaires à "word publipostage via vba"