Microsoft 365 fusion de document vba publipostage

Lysaxel

XLDnaute Nouveau
Bonjour j ai deux fichiers un Excel un word pour mettre en place un publipostage. Je souhaiterai automatiser la création et l enregistrement du document fusionné avec les données repris sous Excel en .pdf. Après la création des documents (un à un), je souhaiterai créer un macro qui me permette d envoyer automatiquement le document personnalisé à une personne désignée dans ce même fichier Excel en pièce jointe. J ai réussi à créer une macro mais qui envoie un document identique. Merci pour vos supers conseils.
 

Pièces jointes

  • TEST2.xlsm
    364 KB · Affichages: 25
  • publipostagebis.docm
    35.7 KB · Affichages: 23

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Lysaxel

Lysaxel
Inutile de doublonner en créant un second fil.
Un simple up dans le premier suffisait.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Lysaxel

Lysaxel
Elles ne sont pas perdues. Je les ai effacé.

(Un petit mouvement d'humeur et/ou une crise d'égomanie à cause d'un pouce qui fut levé puis subitement ne le fut plus...:rolleyes:)


Reste l'essentiel: l'usage sur le forum (en théorie), c'est de faire un up (se répondre à soi-même), pour que sa discussion s'affiche de nouveau en haut de la liste des discussions.
Et pour retrouver ses propres discussions, il suffit de cliquer sur Trouver des discussions
 

Lysaxel

XLDnaute Nouveau
Je n ai pas mis la macro volontairement pour partir sur une base vierge. Quant à tonton Walt, heureusement ce ne sont pas ses penchants auxquels je pense quand je parle de Mickey. Et même si « Mickey a les yeux bleus », mon publipostage n avance pas
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Lysaxel

Lysaxel
• Alors que ton publipostage avance ou pas (ce n'est pas grave)
(voir la charte du forum => point 2, section demandeur)

• Si je voulais lire ton code VBA, c'était pour à sa lecture déterminer peu ou prou quel est on niveau de maîtrise de VBA et donc adapter mes réponses en conséquence.
(Pour rester dans l'univers Disney, je cause pas pareil le VBA avec un.e padawan ou avec un.e Jedi ;))
Et accessoirement, si la macro avait était présente, j'aurai pu me contenter de l'adapter et/ou compléter.
Là, va falloir, tout écrire de A à Z.

NB: Le lien présent dans le message#5 ne t'a permis d'avancer un chouia ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Lysaxel

De mon côté, j'ai avancé plus qu'un chouia
(mais le mérite n'est point mien)
Voir la PJ
Mode opératoire pour faire un test (avec le code tel que fourni)
(A copier dans un module d'un document Word qui contiendra les trois champs de fusion idoines.
avec un fichier Excel comme base de données
agencé comme suit:
PRENOM|NOM|OBJ_MAIL|EMAIL

Test OK (réalisé ce matin au boulot => Office 2010)
J'avais mis uniquement trois enregistrements dans la base
(en mettant mon propre email)
Reste un souci (que je te laisse le soin de découvrir)
 

Pièces jointes

  • vbMailMerge.zip
    1.2 KB · Affichages: 26

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Lysaxel

• Lysaxel
Pas de nouvelles, bonnes nouvelles?
De mon côté, je continue mon petit bonhomme de chemin
J'ai repris quelques éléments du code de laurent3372 (cf ce post)
Auquel j'ai ajouté quelques lignes
VB:
Sub Publi_Export_PDF_Single()
Const NoCarac$ = """:.|/?\*"
Dim nomfic$, Doss$, cpt&, i&
Application.ScreenUpdating = False
With ThisDocument.MailMerge
    Doss = .Parent.Path & "\"
    .Destination = 0: .SuppressBlankLines = True
    On Error Resume Next
    For cpt = 1 To .DataSource.RecordCount
        With .DataSource
          .FirstRecord = cpt: .LastRecord = cpt: .ActiveRecord = cpt
          If Trim(.DataFields("NOM")) = "" Then Exit For
          'adapter avec les champs idoines pour constituer le nom des PJ
          nomfic = UCase(.DataFields("NOM") & .DataFields("PRENOM"))
          End With
          .Execute Pause:=False
          If Err.Number = 5631 Then
          Err.Clear
          GoTo Suivant
          End If
          For i = 1 To Len(NoCarac)
          nomfic = Replace(nomfic, Mid(NoCarac, i, 1), "_")
          Next 'export en PDF (1 pdf par enregistremnt)
        ActiveDocument.SaveAs Doss & VBA.Trim(nomfic) & ".pdf", 17: ActiveDocument.Close False
Suivant:
Next cpt
End With
Application.ScreenUpdating = True
End Sub
Je suis partie sur cette voie (car pour le moment pas réussi à résoudre le problème évoqué dans le message#10)
Cette nouvelle voie étant de:
1)WORD=>faire le publipostage en générant un PDF par enregistrement dans la base.
2) EXCEL=> dans un fichier contenant les émails, lancer une macro qui inséré le chemin et le nom des PDF générés en 1)
Puis lancer une macro qui fera le mailing dans Outlook en joignant le PDF en pièce jointe.

• Lysaxel: j'attends tes commentaires et/ou feedback pour savoir si je continue ou pas dans cette voie.
Merci.
 

Lysaxel

XLDnaute Nouveau
bonjour merci pour ton aide encore une fois. C'est exactement la procedure que je souhaite derouler
voici la macro redigée qui envoie le mail :
Sub Envoimail()
Dim sfichier As String
Dim omsgapp As Outlook.Application
Dim omsg As Outlook.MailItem
Dim ligne As Integer
'sfichier = Application.GetOpenFilename(, , "Selectionner le fichier à envoyer")
For ligne = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Set omsgapp = New Outlook.Application
Set omsg = omsgapp.CreateItem(olMailItem)
With omsg
.To = Range("am" & ligne)
.Attachments.Add ("cheminoùtrouverledocument")
.Subject = " organisation Customer service **"
.Body = " Bonjour," & Chr(10) & Chr(10) & "Nous avons le plaisir de vous presenter la nouvelle organisation du customer service **, nous vous laissons la découvrir à la lecture de la pièce jointe." & Chr(10) & Chr(10) & "Le service client reste à votre disposition et vous souhaite une bonne journée." & Chr(10) & Chr(10) & "Le service client."
.Send
End With

et voici la macro sous word qui fusionne le document mais au global par un document par ligne. je planche sur ce point actuellement.
Sub fusion()
fusionMacro
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\hemin \TEST2.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:\chemin \TEST2.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB" _
, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ActiveWindow.ActivePane.VerticalPercentScrolled = 0
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
"C:\chemin ou copier\RESULTAT1.pdf", _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ActiveWindow.Close
End Sub
Next
 

Staple1600

XLDnaute Barbatruc
Re

Merci pour le retour.
Ce sont les macros initiales (celles que tu n'avais pas jointes?)
Si oui, cela m'aurait fait une base sur laquelle partir ;)
(et cela m'aurait économisé quelques neurones ;))

Tu n'as pas vu le code que je te propose dans le message#11 ?
Il génère justement un PDF par enregistrement
(et il fonctionne , j'ai testé)
 

Staple1600

XLDnaute Barbatruc
Re

Non, pas du tout.
Le code du message#11 (qui se lance depuis Word) nécessite juste une version de Word qui gère l'export PDF en natif (donc à partir de Word 2007)
Au cas où, je remets le mode opératoire pour faire le test
Il faut une base Excel avec les entêtes de colonne suivants:
NOM
PRENOM
OBJ_MAIL
EMAIL
(Dans cette base, mettre six enregistrements
2) Dans un document Word:
Créer un document pour publipostage, en insérant les 4 champs de fusion
3) Copiez le code dans un module standard
4) Enregistrer en *.docm
5) Lancer la macro
Tu obtiendras alors six PDF distincts.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 214
Membres
103 158
dernier inscrit
laufin