Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 PUBLIPOSTAGE EN PDF AVEC VBA EXCEL

Karim48

XLDnaute Nouveau
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
 

Pièces jointes

  • BASE DE DONNEES PUBLIPOSTAGES.xlsm
    165.8 KB · Affichages: 8
  • Prélèvement d'Air (selon NF X 43-050) n°.docx
    836.5 KB · Affichages: 5

Karim48

XLDnaute Nouveau
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.
 

Karim48

XLDnaute Nouveau
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.
 

Pièces jointes

  • BASE DE DONNEES PUBLIPOSTAGES.xlsm
    167.1 KB · Affichages: 25
  • PUBLIPOSTAGE RAPPORT V3.docx
    854.4 KB · Affichages: 23

kiki29

XLDnaute Barbatruc
Salut tardif, Karim48
Pense à utiliser les balises Code </>
("Microsoft Excel attend la fin de l'exécution d'une action OLE d'une autre application")
A mettre avant procédures dans Déclaration du module
VB:
Private Declare Function _
    CoRegisterMessageFilter Lib "OLE32.DLL" _
    (ByVal lFilterIn As Long, _
    ByRef lPreviousFilter) As Long

A mettre dans la procédure où est appelé le lien OLE:
Code:
Dim lMsgFilter As Long

' Intercepter les messages OLE
CoRegisterMessageFilter 0&, lMsgFilter

           ' Code faisant un appel OLE

' Restaurer les messages OLE
CoRegisterMessageFilter lMsgFilter, lMsgFilter
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…