Fusion publipostage
Bonjour à vous,
J'ai un petit problème de codage qui me prends la tête concernant le publipostage, je m'explique.
Pour l'instant le code suivant marche mais je ne trouve pas la suite :
Sub puplipostage()
Dim WApp As Object, WDoc As Object
Dim NomBase As String
NomBase = "C:\Users\******\Desktop\test 1.xlsm"
Set WApp = CreateObject("Word.application")
WApp.Visible = True
Application.ScreenUpdating = False
'Ouverture du document principal Word
Set WDoc = WApp.Documents.Open("C:\Users\*******\Desktop\test d.docx")
'fonctionnalité de publipostage pour le document spécifié
With WDoc.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, SQLStatement:="SELECT * FROM [Feuil1$]"
End With
Application.ScreenUpdating = True
'Fermeture du document Word
WDoc.Close False
WApp.Quit
End Sub
après la ligne :
.OpenDataSource Name:=NomBase, SQLStatement:="SELECT * FROM [Feuil1$]"
je souhaite effectuer la commande "insérer un champ de fusion" sur le fichier word ouvert,
et je souhaite également "mettre à jour les étiquettes" afin que tout les nom soit copier.
Bien évidement j'ai testé d’enregistrer la macro mais lorsque je fais un copier coller du vba word au vba excel cela ne marche plus pour le 1er soucis.
pour le 2ème soucis si je relance le code dans Word la commande n'est pas enregistré.
Si quelqu'un peut me filer un petit coup de pouce ça serait pas mal.
merci d'avance.
Ps : voici le code enregistré sur Word
Sub Macro2()
'
' Macro2 Macro
'
'
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\Users\sinquina\Desktop\test 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=C:\Users\sinquina\Desktop\test 1.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking M" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="NOM"
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
ActiveWindow.ActivePane.VerticalPercentScrolled = 0
End Sub
Bonjour
personnellement quand je fais un publipostage par vba, le document word modèle possède déjà tous les champs au bon endroit dans le document.... ainsi quand je fais un publipostage (comme tu le ferais à la main) tous les champs se mettent a jour....
je n'ai jamais essayé d’insérer un champ par VBA dans un doc word... car il faudrait pouvoir se positionner dans la feuille.... et je ne suis pas sur que cela soit possible....
Fred
Salut,
merci de ta réponse.
le fichier Word est déjà mis en page, la forme des étiquettes sont déjà mise il s'agit juste de la fusion des données qui bloque.
Bonjour à tous,
Pour faire un publipostage depuis excel, voici un extrait de code fonctionnel (issu d'une de mes appli) :
With WDoc.mailMerge
.OpenDataSource Name:=NomBase, Connection:="Driver={Microsoft Excel Driver (*.xls, *.xlsm)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [Feuil1$]"
'.Destination = wdSendToPrinter 'Si besoin de fusion vers l'imprimante
.suppressBlankLines = True
With .DataSource
.firstRecord = wdDefaultFirstRecord
.lastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False 'Exécute l'opération de publipostage
End With
WDoc.Application.ActiveDocument.SaveAs "C:\chemin\nom_du_fichier.docx"
La dernière ligne enregistre le résultat de la fusion dans un nouveau fichier
Est-ce que ça répond à la question?
Pierre
Merci de ta réponse.
Je vais essayer de tester ça aujourd'hui mais je ne te promets rien.
edit : testé mais désolé ça ne m'aide pas plus.
j'ai déjà trouvé ce code mais il n’exécute pas ce que je souhaite.
Car je ne souhaite pas enregistrer le fichier juste imprimer et garder le fichier original.
Merci quand même
Bon merci pour l'aide,
Du coup je laisse tomber. Je laisserai les gens utiliser Word avec un msgbox comprenant les étapes à suivre.