Publipostage avec Word

Le saviez-vous ?

Une table (ou mieux : une requête) Access peut servir de base à un publipostage dans Word.

Vous aimerez aussi...

10 réponses

  1. gds10 dit :

    Ça y est j’ai trouvé la solution.

    Merci

  2. gds10 dit :

    Ah oui j’avais fait une erreur
    Private Sub Commande60_Click()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
    If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
    MsgBox « Aucune donnée ! », vbInformation
    End If
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    strCheminDoc = « F:INTRODUCTIONCTIBR02.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
    If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
    MsgBox « Aucune donnée ! », vbInformation
    End If
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    Set wdApp = Nothing
    End Sub

  3. gds10 dit :

    En fait oui chaque fusion se fait à partir CTIBRxy ou CTxy.
    En fait l’objectif est que la secrétaire est juste à remplir un tableau en choisissant le code du courrier correspondant pour chaque client. Puis ensuite qu’elle appuie sur un bouton et que les différents type de courrier sortent. Personnalisée bien sur !

  4. Hervé Inisan dit :

    gds10 > Ce n’est pas une bonne idée de copier/coller le code pour le répéter : cela crée du code redondant et donc moins évolutif. Une procédure paramétrée sera plus pratique. Pour situer :

    • Il s’agit bien de fusionner des enregistrements de la table INTRO qui ont un code CTIBRxy vers un document qui s’appellera CTIBRxyFUSION.doc ?
    • Toutes les fusions partent de CTIBR01 ? (ce ne serait pas au contraire CTIBRxy ?)
  5. gds10 dit :

    Merci beaucoup,
    Ça marche pour le 1er.
    Mais si je simule CTIBR01 est vide alors il me sort bien le message.
    Et si ensuite pour le 2ème courrier CTIBR02 il y a des données, il ne poursuit pas la commande.
    Private Sub Commande60_Click()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
    If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
    MsgBox « Aucune donnée ! », vbInformation
    Exit Sub
    End If
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion

    strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
    If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
    MsgBox « Aucune donnée ! », vbInformation
    Exit Sub
    End If
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With

  6. Hervé Inisan dit :

    Le problème se pose quand il n’y a aucune ligne dans la table INTRO, par rapport au filtre demandé, c’est bien ça ?

    Si c’est le cas, il faudrait effectivement tester le nombre de lignes avant de lancer toute l’opération. Par exemple, après le strSQL = « … » :

  7. gds10 dit :

    Bonjour,
    Alors pour résumer, j’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
    J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
    J’ai mis ce code dans un bouton d’action :
    Code :

    Private Sub Commande60_Click()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    Set wdApp = Nothing

    End Sub

    Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.

    Auriez vous une solution ? Je pensais peut être mettre une fonction IF ??

    D’avance merci

  8. gds10 dit :

    Et bien depuis tout à l’heure j’ai réfléchi…et en fait il faudrait que je puisse ajouter une condition qui dirait que si le fichier n’existe pas dans ma table ACCESS je passe à l’autre fichier.
    Voilà ma commande mis dans le click du bouton
    Private Sub Commande60_Click()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
    strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
    strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=False
    .Destination = wdSendToNewDocument
    .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    Set wdApp = Nothing

    End Sub

    J’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
    J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
    J’ai mis ce code dans un bouton d’action :
    Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.

    D’avance merci

  9. Hervé Inisan dit :

    gds10 > Quel est le bout de code qui pose problème ?

  10. gds10 dit :

    J’ai utilisé votre code pour faire un publipostage ACCESS/ Word.
    Cela marche très bien, ça ce complique juste quand on plusieurs types de courriers !! En effet, je copie le code pour chaque type de courrier. Cela fonctionne quand des données sont entré pour ce type de courrier, mais si des données ne sont pas encore entré pour ce courrier, alors ça bug. Auriez vous une solution ?
    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *