Macro pour un publipostage Excel/Word

Lexie

XLDnaute Nouveau
Bonjour à tous,

Après une rapide présentation dans la partie du forum dédiée, je viens vous exposer mon problème de macro.

Je dois réaliser plusieurs publipostages pour générer toujours le même fichier Word, avec uniquement les coordonnées qui changent (magasin, personne concernée, prix).
Je me suis fait un très joli petit classeur Excel, avec plusieurs onglets : un onglet "base" qui recense tous les magasins, un onglet "formation" avec toutes les infos concernant les formations, un onglet "récap" et un onglet publipostage.

L'onglet "récap" permet d'aller plus vite : on sélectionne dans la liste déroulante le magasin, la formation, le collaborateur, et tout s'actualise dans l'onglet "publipostage" afin de faire mon document Word.

Comme je suis une bonne grosse feignasse, j'en ai marre à chaque fois que j'actualise l'onglet récap d'enregistrer, ouvrir Word, faire tout le process de publipostage, enregistrer et tout... J'aimerais bien qu'en appuyant sur un bouton dans Excel, tout ça soit fait tout seul.

Pour le moment, j'ai réussi depuis Excel à ouvrir mon fichier de publipostage Word, mais pas de faire le publipostage.
J'ai aussi réussi depuis Word à faire une macro qui fait toute seule le publipostage ET qui va l'enregistrer où je veux sur le serveur, MAIS je n'arrive pas à faire en sorte que mes documents changent de noms, du coup si je vais pas le renommer, le document suivant écrase le précédent, et c'est embêtant.

Dans un monde parfait, j'aimerais que quand je clique sur le petit bouton "générer la convention" comme sur l'image, mon document Word se crée et aille s'enregistrer tout seul avec le bon nom sur le serveur.

Je vous remercie de votre aide ! (je ne mets pas de code macro, clairement la macro Word j'ai juste fait "enregistrer une macro" et la macro Excel pour ouvrir le fichier word, c'est 4 lignes trouvées sur le net)
 

Pièces jointes

  • captureforum.jpg
    captureforum.jpg
    55.4 KB · Affichages: 406

tototiti2008

XLDnaute Barbatruc
Re : Macro pour un publipostage Excel/Word

Bonsoir Lexie,

voici une macro qui automatise un publipostage Word (sur Excel 2010, je suppose qu'elle fonctionnera sur 2007)

Code:
Sub Publipostage(AdrSource As String, AdrWd As String, AdrDest As String)
Dim Wkb As Workbook, MonWord As Object, MonDoc As Object, Conn As String, DocRes As Object
    Application.ScreenUpdating = False
    Set MonWord = CreateObject("Word.Application")
    MonWord.DisplayAlerts = 0
    Set MonDoc = MonWord.Documents.Open(Filename:=AdrWd, ConfirmConversions:=True, _
        ReadOnly:=True, AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:="", Format:=0, XMLTransform:="")
    Conn = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & AdrSource & _
        ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";" & _
        "Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:D"
    MonDoc.MailMerge.OpenDataSource Name:=AdrSource, ConfirmConversions:=False, _
        ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=0, _
        Connection:=Conn, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", _
        SubType:=1
        With MonDoc.MailMerge
            .Destination = 0
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = 1
                .LastRecord = -16
            End With
            .Execute Pause:=False
        End With
    MonDoc.Close False
    Set DocRes = MonWord.ActiveDocument
    DocRes.SaveAs2 Filename:=AdrDest, FileFormat:=12, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, _
        WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=14
    DocRes.Close False
    MonWord.DisplayAlerts = -1
    Set MonDoc = Nothing
    Set DocRes = Nothing
    MonWord.Quit
    Set MonWord = Nothing
    Application.ScreenUpdating = True
End Sub

AdrSource est le chemin d'accès à la source Excel
AdrWd est le chemin du document principal Word, avec les champs de fusion
AdrDest est le chemin où enregistrer le résultat Word du publipostage

Les données de la source sont censées être en Feuil1 (sinon remplacer Feuil1 par le nom de feuille adéquat)
 

Lexie

XLDnaute Nouveau
Re : Macro pour un publipostage Excel/Word

Merci Tototiti, je vais essayer de trouver où indiquer les chemins de mes fichiers Excel et Word maintenant :)

Mon code était le suivant, j'avais fini par réussir à changer les noms de fichier, mais je ne comprends toujours pas pourquoi quand j'ouvrai le doc Word via la macro Excel, la macro Word ne fonctionnait pas...

Macro Excel :
Code:
Sub ouvrir_word()

    Set wrdApp = CreateObject("Word.Application")
        Set wrdDoc = wrdApp.Documents.Open("\MonChemin\")
    wrdApp.Visible = True
   
End Sub

Macro Word :
Code:
Sub publipostageCC()
'
' publipostageCC Macro
'
'
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    
    Dim nom
        nom = ActiveDocument.Paragraphs(47).Range.Words(1)
    Dim prenom
        prenom = ActiveDocument.Paragraphs(47).Range.Words(2)
        
    ChangeFileOpenDirectory _
        "MonChemindEnregistrement\"
    
    ActiveDocument.SaveAs FileName:= _
        "Monchemin\Convention " & nom & "" & prenom & ".doc" _
        , FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
        ActiveWindow.Close

End Sub
 

Statistiques des forums

Discussions
315 092
Messages
2 116 119
Membres
112 666
dernier inscrit
Coco0505