Publipostage depuis Excel : nom de sortie du fichier
Bonjour à tous,
je cherche à réaliser une macro VBA pour lancer un publipostage depuis Excel.
J'ai trouvé quantité d'exemple sur le site mais je bloque après voir mis mes propres éléments (chemins d'accès et nom de fichier)
Je voudrais :
[list]
Sub Publipostage()
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String
NomBase = "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\COMMANDES MATIERE OEUVRE_V1.xlsm"
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\modele commande.dot")
'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 (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [Feuil1$]"
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
' Sauvegarde du document publiposté
With appWord.ActiveDocument
.ExportAsFixedFormat OutputFileName:="\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\EXPORT\fiche.pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
End With
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
merci d'avance.
Bonjour,
si le message est sur la définition de word.application ou word.document, l'erreur doit venir de la référence manquante. (si elle est bien cochée, vérifie que la référence n'est pas en erreur).
comme autre option tu peux essayer le code suivant
Sub Publipostage()
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Object
Dim appWord As Object
Dim NomBase As String
NomBase = "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\COMMANDES MATIERE OEUVRE_V1.xlsm"
Application.ScreenUpdating = False
Set appWord = CreateObject("word.application")
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\modele commande.dot")
'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 (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [Feuil1$]"
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
' Sauvegarde du document publiposté
With appWord.ActiveDocument
.ExportAsFixedFormat OutputFileName:="\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\EXPORT\fiche.pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
End With
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
Bonjour h2so4 et merci pour ta réponse.
j'ai repris ta seconde proposition qui fonctionne. mais j'ai un message d'erreur ("Argument ou appel de procédure incorrect) au niveau de la ligne
.ExportAsFixedFormat OutputFileName:="\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\EXPORT", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
J'ai bien l'ouverture du fichier word, la fusion s'opère mais je n'arrive pas à :
- générer le publipostage sur les seules lignes remplies du tableau excel
- générer un document pdf par ligne qui prenne le nom de la cellule AO correspondant à la ligne.
Je suppose qu'il faut que je regarde du coté des propriétés de mailmerge ?
pour ce qui est de réaliser le publipostage sur les seules lignes remplies, je pense à une boucle. Est ce la bonne solution ?
bonjour
pourquoi le besoin d'automatiser ce qui est déjà très scénarisé par Microsoft (la création de publipostage) ?
tu en fais 3+ différents par jour ?
amitiés à tous
Bonjour JMD,
en fait cela sert à une de mes collèges qui n'est pas très à l'aise avec la fonction de publipostage.
Aussi je trouvais l'idée d'automatiser les choses plus simples pour elle (cliquer sur un bouton pour éviter d'avoir d'autres manipulations à faire et de venir me chercher pour me dire que ça ne fonctionne pas).
Ce fichier sert à recueillir des besoins en commande sur 10 équipes différents et donc il peut arriver qu'on lance des séries de 10 commandes 3 ou 4 fois par jour (bon ok la méthode n'est sans doute pas idéale)
aprés je suis d'accord avec toi que la fonction de publipostage est plutôt simple.
voilà pour le contexte
re
10 équipe ?
c'est donc plus qu'une TPE
je te conseille de passer à un progiciel genre GPAO
tout le monde va gagner du temps
amitiés
bonjour Jmd, désolé pour le délai de réponse.
En fait les équipes se servent du fichier excel pour saisir mais ne générent pas le publipostage car il faut que ma collègue y mentionne des données financières.
Donc en fait, le fichier "maitre" qui contient les macro n'est utilisé que par une personne. je me suis mal exprimé.
J'ai repris ma macro en essayant d'adapter ce que j'ai trouvé ici et là.
Sub publi_()
'--------------------------------------------------------------------------------
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
'--------------------------------------------------------------------------------
Dim docWord As Object
Dim appWord As Object
Dim NomBase, fic_doc, cheminW, fichier_source, DocName As String
Dim nom_fichier, Nomsourcebase, message_boite As String
Dim Fin, I As Integer
fichier_source = "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\modele commande.dot"
NomBase = "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\COMMANDES MATIERE OEUVRE_V1.xlsm"
cheminW = "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\EXPORT\"
Application.DisplayAlerts = False
Set appWord = CreateObject("word.application")
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\modele commande.dot")
With docWord.MailMerge
.OpenDataSource Name:="\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\COMMANDES MATIERE OEUVRE_V1.xlsm", _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & "\\filer3\PLACIDO_Cde_Pub$\05_Fournitures\09_Outillage_materiaux\Outillage_matière_oeuvre_ERI_2019\COMMANDES\COMMANDES MATIERE OEUVRE_V1.xlsm" & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [PUBLIPOSTAGE$]"
End With
For I = 1 To Fin
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Spécifie la fusion vers un nouveau doc
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
'Prend en compte uniquement l'enregistrement i
With .DataSource
.FirstRecord = I
.LastRecord = I
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
'recupère le nom dans la colonne AO(41)du fichier source excel
.DataSource.ActiveRecord = I
DocName = .DataSource.DataFields(41).Value
End With
nom_fichier = cheminW & DocName & ".pdf"
With appWord.ActiveDocument
'export pdf
.ExportAsFixedFormat OutputFileName:=(nom_fichier), _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=False, _
CreateBookmarks:=wdExportCreateHeadingBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=False, UseISO19005_1:=False
'fermeture du fichier W sans enregistrement
.Close False
End With
Next I
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
Le modèle.dot s'ouvre bien mais cela ne génère pas la fusion et bien entendu cela ne sauvegarde pas le fichier.
j'ai beau chercher je ne trouve pas pourquoi.
Est ce que quelqu'un pourrait me donner un coup de main pour finaliser cette macro ?
merci !
re
vu l'effectif de ton enterprise, je ne peux que renouveler mon conseil : prendre un progiciel (ou le faire faire)
amitiés