Définir Docword pour des étiquettes dans macro autom. publipostage

libellule85

XLDnaute Accro
Bonjour le forum,

J'ai récupéré sur l'excellent site developpez.com (Le publipostage Word-Excel) une macro pour automatiser un publipostage, et mon problème c'est de définir le docword pour les étiquettes actuellement j'ai ceci :

Code:
With docWord.mailMerge

Je vous mets ci-dessous la macro complète :

Code:
Private Sub commandButton1_Click()
    Dim docWord As Word.Document
    Dim appWord As Word.Application
    Dim NomBase As String
    
    NomBase = "C:\dossier\labase.xls"
    
    Application.ScreenUpdating = False
    Set appWord = New Word.Application
    appWord.Visible = True
    'Ouverture du document principal Word
    Set docWord = appWord.Documents.Open("C:\leDocument.doc")
    
    '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$]"
        'Spécifie la fusion vers l'imprimante
        .Destination = wdSendToPrinter
        .suppressBlankLines = True
            'Prend en compte l'ensemble des enregistrements
            With .DataSource
                .firstRecord = wdDefaultFirstRecord
                .lastRecord = wdDefaultLastRecord
            End With
        'Exécute l'opération de publipostage
        .Execute Pause:=False
    End With
    
    Application.ScreenUpdating = True
    
    'Fermeture du document Word
    docWord.Close False
    appWord.Quit
End Sub

D'avance merci pour votre aide
 
Dernière édition:

RENAUDER

Nous a quitté
Repose en paix
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Bonjour,

Il faut créer le document Word (docWord) avec les champs de fusion.
Je te joins 2 fichiers exemples.
 

Pièces jointes

  • Mailing.xls
    23.5 KB · Affichages: 155
  • mailing.doc
    48 KB · Affichages: 128
  • Mailing.xls
    23.5 KB · Affichages: 165
  • mailing.doc
    48 KB · Affichages: 161
  • Mailing.xls
    23.5 KB · Affichages: 172
  • mailing.doc
    48 KB · Affichages: 160

libellule85

XLDnaute Accro
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Bonjour Renauder,

J'avais oublié de dire que mes documents étaient créés :

- les étiquettes dans Word (avec les champs de fusion)
- la base de données dans Excel,

et j'ai bien modifié les chemins et noms de documents dans la macro. J'ai simplement mis dans le fil la macro originelle.
Mais quand je lance la macro d'une feuille excel c'est là que le débogueur me met que le docword n'est pas défini. Et c'est là que je pense qu'il faut modifier docWord.mailMerge. Mais peut-être je me trompe.
 

libellule85

XLDnaute Accro
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Re,

J'ai trouvé:cool::cool::cool:

En fait il fallait que j'active Microsoft Word 12.0 Object Library !!!

Maintenant celà fonctionne impeccablement....

Un grand merci quand même à toi Renauder d'avoir pris le temps de me répondre.

Bon Après midi à tous
 

libellule85

XLDnaute Accro
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Re,:eek: :confused:

Je reviens vers vous avec ma macro (ci-dessous). En effet, dans ma base de données dans la colonne A (à partir du A2) je met O ou N pour éditer ou non l'adresse qui se trouve sur la ligne. Mais la macro édite toutes mes adresses ! Ne serait-il pas possible d'ajouter dans cette macro une ligne lui demandant d'imprimer que si il y a un O.
D'avance merci à nouveau pour votre aide

Code:
Private Sub Label4_Click()
     Dim docWord As Word.Document
     Dim appWord As Word.Application
     Dim NomBase As String
     
     NomBase = "F:\Publipostage Enveloppes\Adresses Frs.xls" 
     
     Application.ScreenUpdating = False
     Set appWord = New Word.Application
     appWord.Visible = True
     'Ouverture du document principal Word
     Set docWord = appWord.Documents.Open("F:\Publipostage Enveloppes\Gabarit Env 110 par 220.doc") 
     
     '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$]"
         'Spécifie la fusion vers l'imprimante
         .Destination = wdSendToPrinter
         .suppressBlankLines = True
             'Prend en compte l'ensemble des enregistrements
             With .DataSource
                 .firstRecord = wdDefaultFirstRecord
                 .lastRecord = wdDefaultLastRecord
             End With
         'Exécute l'opération de publipostage
         .Execute Pause:=False
     End With
     
     Application.ScreenUpdating = True
     
     'Fermeture du document Word
     docWord.Close False
     appWord.Quit
 End Sub
 

RENAUDER

Nous a quitté
Repose en paix
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Bonjour,
J'ai une proposition qui est d'exporter les lignes avec O en colonne A vers une feuille temporaire Temp, utiliser cette feuille comme étant la Base de données ( SQLStatement:="SELECT * FROM [Temp$]), lancer le mailing puis supprimer la feuille temporaire Temp.

Code:
Sub Mailing()
    '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
    Dim MaPlage As Range
    NomBase = "C:\Excel\Mailing.xls"
    ' ***************************************************************
    ' Export des données vers une feuille Temp ayant O en colonne A
    ' ****************************************************************
    Worksheets.Add().Name = "Temp"
    Sheets("Feuil1").Activate
    Selection.AutoFilter Field:=1, Criteria1:="O"
    Set Destination = ActiveWorkbook.Sheets("Temp").Range("A1")
    Set MaPlage = Sheets("Feuil1").AutoFilter.Range
    Set MaPlage = MaPlage.Offset(0, 0).Resize(MaPlage.Rows.Count, MaPlage.Columns.Count)
    MaPlage.Copy Destination
    Selection.AutoFilter
    ' ******************************************
    ' Début du mailing
    ' ******************************************
    Application.ScreenUpdating = False
    Set appWord = New Word.Application
    appWord.Visible = True
    'Ouverture du document principal Word
    Set docWord = appWord.Documents.Open("C:\Excel\Mailing.doc")
    '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 [Temp$]"
        'Spécifie la fusion vers l'imprimante
        .Destination = wdSendToPrinter
        .suppressBlankLines = True
        'Prend en compte l'ensemble des enregistrements
        With .DataSource
            .firstRecord = wdDefaultFirstRecord
            .lastRecord = wdDefaultLastRecord
        End With
        'Exécute l'opération de publipostage
        .Execute Pause:=False
    End With
    Application.ScreenUpdating = True
    'Fermeture du document Word
    docWord.Close False
    appWord.Quit
    ' ***************************************
    ' Suppression de la feuille temporaire
    ' ***************************************
    Sheets("Temp").Select
    ActiveWindow.SelectedSheets.Delete
End Sub
 

libellule85

XLDnaute Accro
Re : Définir Docword pour des étiquettes dans macro autom. publipostage

Re Renauder,

Ta proposition fonctionne à merveille, simplement à la suppression de la feuille temporaire j'avais un message d'alerte "Les feuilles sélectionnées peuvent contenir des données..."
j'ai donc mis au-dessus d' "ActiveWindow.SelectedSheets.Delete" : Application.DisplayAlerts = False et après "ActiveWindow.SelectedSheets.Delete" : Application.DisplayAlerts = True
Et il n'y a plus de message.

En tous cas Renauder je te remercie une nouvelle fois beaucoup pour ton aide, c'est vraiment sympa.
A bientôt
 

Discussions similaires