Publipostage en pdf avec VBA Excel
Bonjour,
J'ai créé une VBA afin d'automatiser un processus de Publipostage. Je me retrouve face à deux problèmes:
- Lorsque je lance la VBA, Word bloque car il attend une réponse au message suivant : "L'ouverture de ce document éxecute la commande SQL suivante : SELECT*FROM 'BASE DE DONEE PUBLIPOSTAGE$' Des données de votre base de données seront insérées dans le document Voulez-vous continuer?"
Si je ne réponds pas, Excel me renvoie une boite de dialogue m'indiquant qu'il attend une réponse d'une action OLE ("Microsoft Excel attend la fin de l'exécution d'une action OLE d'une autre application");
- Une fois que je valide manuellement la requête, deux documents sont générés. Un intitulé "Lettre 1 type" qui présente un document tel qu'attendu et un document intitulé "Document 1" qui est vierge.
Ainsi, mes problèmes sont la boite de dialogue requête SQL et le document 1 que j'aimerais ne plus voir apparaitre.
Je souhaiterais également enregistré, dans un dossier spécifié, la "lettre type 1" en format PDF sous un nom de document sous le format - Prélèvement en date du "date" sur chantier "numéro de chantier" - (par ex: Prélèvement en date du 061219 sur chantier n°19-186) en fichier PDF
Ne sachant pas comment faire, si quelqu'un a des idées à me proposer, je suis preneur
merci d'avance.
Karim
Bonjour Krimo48 et
Je ne comprendrais jamais pourquoi les gens comme toi veulent partir d'Excel avec du VBA pour faire un publipostage
Un publipostage se fait de Word en liant une source de données qui est en général un fichier Excel.
Cela t'éviterais tous ces problèmes
Certes, cela m'éviterait beaucoup de problème mais ce publipostage fait parti d'un tout construit sous Excel (Formulaire -> Base de données -> Publipostage). Une fois que j'aurai la formule magique, je l'intégrerai au bouton "valider/enregistrer" du formulaire afin que cette étape valide l'enregistrement dans la base de donnée et déclenche l'impression en PDF du document correspondant. Les gens comme moi sont un peu complexes je l'admets mais ne sont pas dans le jugement. Une solution serait la bienvenue, je connais déjà les problèmes
Ceci dit, j'ai un peu avancé.
Si quelqu'un pouvait m'aider sur la façon de nommer le fichier, ça m'enlèverait une grosse épine du pied
Mon code VBA mis à jour:
Sub Publipostage()
'Enregistre le fichier au format.pdf
'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 = ThisWorkbook.FullName
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("C:\Users\PC\Desktop\ProjetPublipostage\VI\PUBLIPOSTAGE RAPPORT V3.docx")
'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 (*.xlsx)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [BASE DE DONNEE PUBLIPOSTAGE$]"
With .DataSource
.FirstRecord = 1
.LastRecord = 1
End With
'Ex?cute l'op?ration de publipostage
.Execute
End With
' Sauvegarde du document publipost?
With appWord.ActiveDocument
.ExportAsFixedFormat OutputFileName:="C:\Users\PC\Desktop\ProjetPublipostage\VI\" & "New_name" & ".pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
End With
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.ActiveDocument.Close False
appWord.Quit
End Sub
Pour l'instant le hic se trouve ici:
With appWord.ActiveDocument
.ExportAsFixedFormat OutputFileName:="C:\Users\PC\Desktop\ProjetPublipostage\VI\" & "New_name" & ".pdf", ExportFormat:= _
Où il doit y avoir une ligne qui manque pour appeler le fichier Excel en cours et appeler les données de cellules AE2 et A2. Ainsi, New_name serait égale à "Prèlevement n°" & "Range("A2").Value" & "effectué en date du " & "Range (AE2).Value"
Mais si je rentre la formule tel qu'elle, vu que je commence avec "With appWord.ActiveDocument", le VBA ne trouve pas la référence (la feuille excel)
Une idée?
Merci d'avance.
J'ai mis à jour ma VBA en suivant l'idée que j'avais dans mon précédent message en présentant la chose comme suit :
New_name = "Prélèvement n° " & Range("B2").Value & " effectué en date du " & Range("AE2") & " sur chantier n? " & Range("A2").Value
With appWord.ActiveDocument
.ExportAsFixedFormat OutputFileName:="C:\Users\PC\Desktop\ProjetPublipostage\VI\" & New_name & ".pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
End With
Cependant ça bug en surlignant cette partie:
.ExportAsFixedFormat OutputFileName:="C:\Users\PC\Desktop\ProjetPublipostage\VI\" & New_name & ".pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=False
Et en indiquant dans le message de la boite de dialogue :
"Erreur d'exécution '-2147467259 (80004005)
Le nom du dossier est incorrect"
Quelqu'un pourrait m'aider ?
Je joins les fichiers concerné
Merci d'avance.
Finalement j'ai trouvé la solution