Microsoft 365 Publipostage VBA excel 365

.jakob@gmail.com

XLDnaute Nouveau
Bonjour
Je suis trésorier d'une association, et pour m'aider à envoyer les attestations fiscale, j'ai, en reprenant différents code, sur internet créé ce fichier excel.
j'ai cependant 2 points que je n'arrive pas à résoudre
1 / J'aimerais indiquer dans le code le chemin d'enregistrement des pdf ? (il les enregistre dans le dossier du fichier d'origine (et à cause de One drive, ca ne fonctionne plus)
2 / j'aimerais pouvoir faire une selection des lignes et ne pas prendre tous les enregistrement de la base de données (mettre "oui" dans la champs Chemin de la base de données par exemple et ne traiter que ces lignes )

d'avance merci beaucoup pour votre aide
 

Pièces jointes

  • Atestation fiscale.docx
    23.8 KB · Affichages: 0
  • liste des membres Saison 2022-2023.xlsm
    36.7 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Bonjour le fil

@.jakob@gmail.com
[Suggestion en passant]
Pour faire ce genre de tâche, je procède ainsi
1) Publipostage conditionnel depuis Word (avec une BD Excel) réalisé en VBA qui me génère un PDF par enregistement
2) Depuis Excel, une macro parcourt ce dossier et envoie un mail personnalisé en joignant le PDF correspondant au destinataire
(en se basant sur un numéro ou un code ajouté dans le nom du PDF)
NB: Sur cette feuille Excel, j'ai trois colonnes
EMAILS_DEST|NOM_PJ|VERIF
Dans la colonne VERIF, je vérifie que la PJ correspond bien au destinataire.
[/Suggestion en passant]
 

.jakob@gmail.com

XLDnaute Nouveau
bonjour
merci pour votre retour.
Mes fichiers joints dans ma demande, me permette déjà de faire cela.
je n'arrive pas a modifier le code, pour choisir un répertoire dans lequel enregistrer les différents PDF, et j'aimerais pour générer les PDF que des membres qui ont payés en indiquant un paramètre dans une colonne.
et ainsi éviter de régénérer des pdf déjà créés précédemment
merci
 

Staple1600

XLDnaute Barbatruc
Re

Effectivement, désolé
J'avais ouvert rapidement le fichier Excel.

Si je m'abuse les PDF sont enregistrés dans ce dossier, non ?
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx", , message_boite)
'...
nom_fichier = cheminW & DocName & ".pdf"
 

.jakob@gmail.com

XLDnaute Nouveau
Re

Effectivement, désolé
J'avais ouvert rapidement le fichier Excel.

Si je m'abuse les PDF sont enregistrés dans ce dossier, non ?
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx", , message_boite)
'...
nom_fichier = cheminW & DocName & ".pdf"
Oui les Pdf s'enregistent automatiquement dans le dossier d'origine
j'ai testé cela et ca a l'air de fonctionner
VB:
With appWord.ActiveDocument
        .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
        .SaveAs "C:\Toto\" & DocName & ".pdf"
        '.ExportAsFixedFormat nom_fichier, wdExportFormatPDF
        .Close False

il reste encore le second point qui me pose des soucis
merci
 

Staple1600

XLDnaute Barbatruc
Re

Voici un code VBA que j'utilise

Tu devrais pouvoir t'en inspirer pour alléger ton code. ;)

NB: Ici le code est dans un document Word, mais la logique sur le choix du dossier reste la même.

Si tu as des difficultés pour adapter, dis moi lesquelles.
 

.jakob@gmail.com

XLDnaute Nouveau
Bonjour
merci pour ce informations.
j'ai pu du coup traiter mon premier point.
aurais tu une idée pour le second ? pouvoir sélectionner que certaines ligne de ma BDD pour le publipostage ?
j'ai déja essaye en modifiant la requete SQL du code, mais du coup lorsque le code s'execute, ll plante sur le publipostage. j'ai essayé avec un filtre mais il n'en tient pas compte
merci
 

Staple1600

XLDnaute Barbatruc
Re

j'ai déja essaye en modifiant la requete SQL du code, mais du coup lorsque le code s'execute, ll plante sur le publipostage. j'ai essayé avec un filtre mais il n'en tient pas compte
J'ai le même souci lors de mes test
Malheureusement, autant pas de soucis, en manuel (pour Filtrer)
mais en VBA pour le moment, j'échoue

(test sur Office 365)

J'ai regardé sur le net et pour l'instant pas trouvé de solution.

@dysorthographie si jamais tu passes dans le coin, connaissant ton appétence pour le SQL ;)
 

Staple1600

XLDnaute Barbatruc
Re

Test OK avec cette macro (sur Word 365)
VB:
Sub test_OK()
Dim base_XL As String, vCRIT As String
base_XL = "C:\Users\STAPLE\Documents\PUBLIPOSTAGE\base.xlsx" ' à adapter
vCRIT = "X"
'publipostage avec filtrage
With ActiveDocument
    With .MailMerge
    .MainDocumentType = 0: .Destination = 0: .SuppressBlankLines = -1
    .OpenDataSource Name:=base_XL, ReadOnly:=True, AddToRecentFiles:=False, LinkToSource:=False, _
        Connection:="Provider=Microsoft.ACE.OLEDB.14.0;User ID=Admin;" & _
        "Data Source=base_XL;Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
        SQLStatement:="SELECT * FROM `BASE$` WHERE CHOIX  = """ & vCRIT & """"
    .Execute
    End With
End With
End Sub
ci-dessous, comment se présente la base Excel
(la feuille se nomme BASE)
 

Pièces jointes

  • test_publi.png
    test_publi.png
    13.5 KB · Affichages: 12

.jakob@gmail.com

XLDnaute Nouveau
Re

Test OK avec cette macro (sur Word 365)
VB:
Sub test_OK()
Dim base_XL As String, vCRIT As String
base_XL = "C:\Users\STAPLE\Documents\PUBLIPOSTAGE\base.xlsx" ' à adapter
vCRIT = "X"
'publipostage avec filtrage
With ActiveDocument
    With .MailMerge
    .MainDocumentType = 0: .Destination = 0: .SuppressBlankLines = -1
    .OpenDataSource Name:=base_XL, ReadOnly:=True, AddToRecentFiles:=False, LinkToSource:=False, _
        Connection:="Provider=Microsoft.ACE.OLEDB.14.0;User ID=Admin;" & _
        "Data Source=base_XL;Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
        SQLStatement:="SELECT * FROM `BASE$` WHERE CHOIX  = """ & vCRIT & """"
    .Execute
    End With
End With
End Sub
ci-dessous, comment se présente la base Excel
(la feuille se nomme BASE)
Merci pour le code.
je vais essayer de l'incorporer dans mon code et le faire fonctionner.
je te dirais si j'y suis arrivé
merci
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972