Publipostage Excel --> Word en VBA
Bonjour,
Je développe une application pour imprimer mes dossiers de façon automatique.
Mon problème sur l'application est le publipostage.
Mon Word a déjà les fusions, l'emplacement de mon Word sera toujours le même, par contre j'aimerai enregistrer mes dossiers sur le bureau (avant que je les classes manuellement).
Pouvez-vous m'aider s'il vous plait? (Et si possible encore un poils d'explication de la macro ça serait magnifique
Merci par avance à tous!!
Bonsoir et bienvenue sur excel Pratique.
Pour mon avis personnel il serait mieux de créer ta macro avec l'enregistreur de macro et de la poster ici afin que les pro du vba puissent l’améliorer.
Bonjour, merci pour cette réponse.
Le problème c'est que l'enregistreur marco d'excel n'enristre pas ma macro publipostage. Du coup j'ai enregistrais une macro depuis Word, mais je souhaite lancer le publipostage depuis Excel...
Enregistrement de la macro :
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"D:\PI\Générateur de solution\Le générateur_Maquette(1).xlsm", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\PI\Générateur de solution\Le générateur_Maquette(1).xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OL" _
, SQLStatement:="SELECT * FROM `BD_PUBLIPOSTAGE$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
Windows("Publipostage_Note technique.doc [Mode de compatibilité]"). _
ActivateEn image cela donne ça :
Merci encore de votre réponse! C'est très gentil de votre part!!
Bonjour, il faudrait d’abord créer une base de données de contacts excel.(avec une colonne noms, une prénoms,une adresse etc)
Et le document word viendrais prendre les noms dans les champs spécifiés.
Désoler de ne pouvoir t'en dire plus car je vient moi aussi demander des conseil sur cette excellent site.
Bonsoir!
Merci pour cette réponse. Mes zones de fusions sont déjà insérées dans mon word. Mon publipostage marche bien mais depuis Word; or j'aimerai le lancer depuis Excel..
Merci encore!
Bonjour, et bonjour aussi aux lecteur, trice du forum.
Voila ce que j'ai trouvé pour ouvrir word :
Sub Ouv_Word()
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open("C:\Users\admin\Desktop\Dupont.doc")
wrdApp.Visible = True
End SubNe pas oublier de mettre le bon chemin de ton fichier : C:\Users\admin\Desktop\Dupont.doc
A plus tard.
Bonjour à tous! Merci de m'avoir répondu, c'est très gentil.
Depuis j'ai bossé dans mon coin, en utilisant l'enregistreur de maccro et des parties de codes sur internet. Mais ma maccro ne marche toujours pas...
Sub Bouton8_Cliquer()
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String
NomBase = "C:\Users\Vincent\PI\G←n←rateur de solution\Le g←n←rateur_Maquette(1).xlsm"
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("C:\Users\Vincent\PI\G←n←rateur de solution\Le g←n←rateur_Maquette(1).xlsm")
'fonctionnalit← de publipostage pour le document sp←cifi←
With docWord.mailMerge
'Ouvre la base de donn←es
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xlsm)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM BD_PUBLIPOSTAGE$"
'sp←cifie la fusion vers Word
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
'Prendre en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Ex←cute l'op←ration de publipostage
.Execute Pause:=False
End With
Application.ScreenUpdating = True
End SubExcel me dit qu'il y a une erreur sur les formules Word.Document et Word.Application...
Bonjour à tous,
Voilà une solution (non optimisée) mais au moins ça marche 8)
J'ai fait le publipostage en deux étapes
1) Depuis Excel --> Ouvrir le Word
2) Depuis Word --> Juste enregistré la macro par l'enregistreur
Sub Ouv_Word()
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open("C:\Users\X\X\adresse du fichier\document.doc")
wrdApp.Visible = True
End SubSub Publipostage()
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\Users\X\X\adresse du fichier\document.xlsm" _
, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\X\X\adresse du fichier\document.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:En" _
, SQLStatement:="SELECT * FROM ONGLET EXCEL$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End SubIl faut changer dans la première macro l'adresse du document Word, afin de le trouver.
Puis dans la seconde, deux fois l'adresse du document excel et de l'onglet qu'on va utiliser pour publiposter les données
Voilà comment j'ai réussi...
Toutefois, si quelqu'un peut me donner la clé du publipostage en une fois... J'en serai très très heureux
Merci à tous et à Bruno9442
Re-bonjour à tous,
Mon code actuel était pas mal, mais les zones de fusion affiche toujours le même résultat, de plus je cherche encore un code correct pour mon publipostage, mais ça ne marche toujours pas
Voici le code que j'ai travaillé, mais ça ne donne rien.. Pouvez-vous m'aider??
Sub Bouton_Publipostage_to_Word()
'Dim appWord As Word.Application
Dim docWord As New Word.Document
Set docWord = GetObject("C:\Users\Vincent\CESI\PI\Générateur de solution\Logement\Publipostage_Logement.doc")
Dim NomBase As String
NomBase = "C:\Users\Vincent\CESI\PI\Générateur de solution\Le générateur_Maquette(1).xlsm"
' Lance Word
'Set appWord = New Word.Application
With docWord
.Visible = True
' Ajoute un nouveau document
Set docWord = .Documents.Add
.Activate
End With
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xlsm)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM BD_PUBLIPOSTAGE$"
'spécifie la fusion vers Word
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
'Prendre en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
End Sub