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]

  • déclencher la macro par un appui sur un bouton

    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

    Rechercher des sujets similaires à "publipostage nom sortie fichier"