Excel vers word - Publipostage via VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
T
Tibo0
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 29 octobre 2019
Version d'Excel : 2016
Version de Calc : 2016
Version de Sheets : 2016

Message par Tibo0 » 29 octobre 2019, 15:49

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,
Avatar du membre
Xmenpl
Membre impliqué
Membre impliqué
Messages : 2'512
Appréciations reçues : 168
Inscrit le : 16 mai 2018
Version d'Excel : 2003 à 2013

Message par Xmenpl » 29 octobre 2019, 16:28

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.
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 415
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 29 octobre 2019, 16:34

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 :wink:

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 :?
T
Tibo0
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 29 octobre 2019
Version d'Excel : 2016
Version de Calc : 2016
Version de Sheets : 2016

Message par Tibo0 » 29 octobre 2019, 16:41

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 ?
Avatar du membre
Xmenpl
Membre impliqué
Membre impliqué
Messages : 2'512
Appréciations reçues : 168
Inscrit le : 16 mai 2018
Version d'Excel : 2003 à 2013

Message par Xmenpl » 29 octobre 2019, 16:42

Baboutz a écrit :
29 octobre 2019, 16:34
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 :?
:good: 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 |k)
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 415
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 29 octobre 2019, 16:47

Hum, j'aimerai bidouiller un petit peu pour voir, tu pourrai mettre ton word et ton excel avec le bouton ? :wink: (En mettant du faux texte dans ta BDD évidemment)
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 415
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 29 octobre 2019, 16:48

Xmenpl a écrit :
29 octobre 2019, 16:42
merci à toi |k)
Avec plaisir Xmenpl :mrgreen:
1 membre du forum aime ce message.
T
Tibo0
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 29 octobre 2019
Version d'Excel : 2016
Version de Calc : 2016
Version de Sheets : 2016

Message par Tibo0 » 29 octobre 2019, 17:03

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 !
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 415
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 29 octobre 2019, 17:33

Avec plaisir ! Tiens nous au courant :wink:
T
Tibo0
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 29 octobre 2019
Version d'Excel : 2016
Version de Calc : 2016
Version de Sheets : 2016

Message par Tibo0 » 29 octobre 2019, 17:53

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 :lole: )

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 :oops:

Merci d'avance !
Bonne soirée
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message