Publipostage Excel --> word et sortir en word ?

Bonjour,

J'ai créé un publipostage sur word à partir d'une base de données excel.

J'ouvre mon word et cela me génère des PDF, c'est normal.

Mais est-ce qu'il est possible de générer des fichiers word à la palce ?

Ou alors créer une macro qui pourait les éditer ?

Car le but est de pouvoir y mettre 2 ou 3 listes déroulantes avant de les envoyer par mail par la suite.

Je vous remercie pour vos éclairages.

Hello,

"J'ouvre mon word et cela me génère des PDF, c'est normal." non, ça n'est pas "normal" c'est un paramétrage et il est effectivement possible d'avoir des doc Word mais il faudrait voir comment vous générer le publipostage

C'est quand je lance l'impression qu'il me donne le choix, soit d'imprimer, soit d'enregistrer au format PDF.

Mais est-ce possible que ce soit des .doc ?

Hello,

désolé, je ne suis pas devin (bien ma femme trouve que je suis divin )

je répète donc : il faudrait voir comment vous générer le publipostage.

Je ne vois pas votre écran et ne suis pas non plus à coté de vous pour voir ce que vous faites, désolé.

Bonjour à tous,

Une solution consiste à faire le mailing directement depuis un tableau structuré Excel.

Le code ci-dessous crée un fichier Word à partir d'un modèle (peu importe le format : docm, docx). Ici le modèle est dans le répertoire de destination par simplicité mais il pourrait être dans les modèles Word.

Comme indiqué en commentaire dans le code, il vaut mieux référencer Word dans en phase de développement.

Visiblement les paramètres du type WdXXX semblent fonctionner même en late binding.

Option Explicit

' En phase de développement, référencer la DLL Microsoft Word pour profiter de l'intellisence
' Un point derrière la variable objet vous donne accès à toutes ses propriétés, actions, événements.

Sub MettreAJourLesSignets()

Dim I As Integer
Dim AireNom As Range, AireAdresse As Range, AireCP As Range, AireCommune As Range, AireObjet As Range, AireMontant As Range
Dim RepertoireDeDestination As String

' En phase de développement, référencer la DLL Microsoft Word pour profiter de l'intellisence
'Dim WordApp As Word.Application
'Dim WordDoc As Word.Document, DocEnCours As Word.Document

' Pour distribuer le fichier sur des postes avec des versions pouvant être différentes passer en late binding
Dim WordApp As Object
Dim WordDoc As Object

    RepertoireDeDestination = "D:\Documents\XXXXXX\" ' A adapter

    Set AireNom = Range("t_Docs[Nom]")
    Set AireAdresse = Range("t_Docs[Adresse]")
    Set AireCP = Range("t_Docs[Code postal]")
    Set AireCommune = Range("t_Docs[Commune]")
    Set AireObjet = Range("t_Docs[Objet]")
    Set AireMontant = Range("t_Docs[Montant]")

    Set WordApp = CreateObject("word.application") 'Ouvre une session Word
    WordApp.Visible = True 'False word masqué pendant l'operation

    For I = 1 To AireNom.Count

        CreerUnNouveauFichierAPartirDUnModele WordApp, RepertoireDeDestination & "Modèle mailing.docm" ' A adapter
        Set WordDoc = WordApp.ActiveDocument

        MajSignet WordDoc, "Nom", AireNom(I)
        MajSignet WordDoc, "Adresse", AireAdresse(I)
        MajSignet WordDoc, "Code_Postal", AireCP(I)
        MajSignet WordDoc, "Commune", AireCommune(I)
        MajSignet WordDoc, "Objet", AireObjet(I)
        MajSignet WordDoc, "Montant", Format(AireMontant(I), "#,##0.00 €")

        With WordDoc
             .SaveAs2 RepertoireDeDestination & AireNom(I) & " " & Year(Date) & "-" & Month(Date) & "-" & Day(Date)
             .Close savechanges:=True
        End With
        Set WordDoc = Nothing
    Next I
    WordApp.Quit 'ferme la session Word

    Set WordDoc = Nothing
    Set WordApp = Nothing

    Set AireNom = Nothing: Set AireAdresse = Nothing: Set AireCP = Nothing
    Set AireCommune = Nothing: Set AireObjet = Nothing: Set AireMontant = Nothing

End Sub

Sub MajSignet(ByVal DocEnCours As Object, ByVal NomDuSignet As String, ByVal ContenuDuSignet As Variant)

    DocEnCours.Bookmarks(NomDuSignet).Select
    With DocEnCours.Parent.Selection
         .Range.Text = ContenuDuSignet
         .Expand Unit:=3 'wdSentence   ' 3 : Si problème en late binding, prendre la valeur numérique correspondante dans la fenêtre propriétés
         .Bookmarks.Add Name:=NomDuSignet ' Pour reconstituer le signet
    End With

End Sub

Sub CreerUnNouveauFichierAPartirDUnModele(ByVal WordApp2 As Word.Application, ByVal CheminEtNomDocumentModele As String)
    WordApp2.Documents.Add Template:=CheminEtNomDocumentModele, NewTemplate:=False, DocumentType:=0
End Sub

Merci pour le retour.

@eric juste une question : pourquoi partir d'Excel et donc avec des macros pour faire un publipostage quand Word peut le faire nativement avec bine plus de fonctionnalité ?

Salut Jean-Louis,

Parce qu'il est plus simple parfois de transférer des données sous forme de tableaux ou de captures d'écran de cette façon là. En plus, tu restes sous Excel et tu n'as pas besoin d'aller sur Word quand tu as des tâches très répétitives à réaliser, cela peut arriver, même si la tendance est plutôt d'éditer en pdf.

Bonnes fêtes de Noël.

Rechercher des sujets similaires à "publipostage word sortir"