Publiposter avec des pièces jointes identiques
Tags: publipostage, outlook, office, email
Published: 2022-06-05 11:41:30

Publiposter ses courriers électroniques, c'est-à-dire les envoyer à une liste de destinataires d'un seul clic, c'est très pratique. Mais il arrive souvent que l'on veuille ajouter un document à ce courrier électronique.

Par exemple, vous organisez un évènement et vous devez envoyer le menu sous forme de PDF à l'ensemble des invités. Avec du publipostage simple, il est très simple d'envoyer le courrier à l'ensemble des convives. Mais ajouter le PDF automatiquement pour ne pas envoyer chaque courrier individuellement, c'est une tout autre histoire et c'est ce que nous allons voir maintenant.

## Objectif

L'idée de ce tutoriel est de t'apprendre à envoyer des courriers électroniques contenant une ou plusieurs pièces jointes via le système de publipostage de Word.

Pour cela, voici le workflow
- Ajout des pièces jointes dans le courrier électronique via Outlook
- Écriture du courrier via Word et Excel
- Envoie du courrier

C'est aussi simple que cela.

## Prérequis

- Maitriser le publipostage simple
- Outlook, version bureau pour envoyer les courriers
- Word, version bureau pour réaliser le publipostage
- Excel, version bureau pour gérer la liste des destinataires


## Mise en place

Pour mener à bien notre objectif, nous allons utiliser une macro nous permettant d'ajouter nos pièces jointes à chacun de nos courriers juste avant que chacun d'eux parte.

Pour cela, il faut commencer par activer le mode développeur dans Outlook. Pour faire cela `Fichier > Options > Personnaliser le ruban` et activer le mode développeur, petite case dans la section de droite de la fenêtre.

## Activer les macros

Pour qu'Outlook prenne en compte les macros, il est important de les activer.

Pour cela, il te suffit de te rendre dans les options d'Outlook puis dans le `Centre de gestion de la confidentialité` et enfin dans les `Paramètres du Centre de gestion de la confidentialité...`. Une fois arrivé dans ce menu, tu trouveras les `Paramètres des macros` sur la gauche de la fenêtre. Une fois dedans, tu devras activer l'option `Activer toutes les macros`.

Il t'est possible de changer cette option à tout instant si tu ne souhaites pas laisser activer les macros en permanence.

## Création des scripts

Une fois le mode développeur activé, nous allons pouvoir ajouter deux scripts à Outlook pour que tout fonctionne.

Le premier script permet d'ajouter à Outlook le chemin vers les pièces jointes que l'on souhaite ajouter.

Le second script permet de charger les pièces jointes précédemment ajoutée à chacun de nos courriers contenant `PUBLIIDEM` en début d'objet.

Pour ajouter le premier script, tu dois te rendre dans l'onglet `Développeur` du ruban puis cliquer sur `Visual Basic`. Dès lors, une nouvelle fenêtre va apparaitre.

### Ajouter les fichiers à joindre

Dans un premier temps, nous allons ajouter le script permettant de charger les pièces jointes.

Pour cela, il faut créer un nouveau module comme le montre l'image ci-dessous :

![Image montrant la création d'un module](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7i7a5nritrgs5km2io2u.png)

Puis, en double cliquant sur le module, nommé `Module 1`, une fenêtre s'ouvre à gauche. Il faut y ajouter le script suivant :

```vba
Public publipostagePJ As Variant

Sub setPublipostage()
  On Error Resume Next

  If publipostagePJ(0) = "" Then publipostagePJ = Array("fin", "fin", "fin", "fin", "fin", "fin", "fin", "fin", "fin", "fin")

  While publipostagePJ(i) <> "fin"
    contenu = contenu & vbCr & publipostagePJ(i)
    i = i + 1
  Wend

  If contenu = "" Then contenu = "vide"

  modifier = MsgBox(contenu & vbCr & "Voulez vous modifier les fichiers ?", vbYesNo, "Fichiers paramétrés")
    
  If modifier = vbYes Then
    For i = 0 To 9
      If i > 0 Then encore = MsgBox("un autre ?", vbYesNo)
        quest:
      If encore <> vbNo Then
        PJ = InputBox("Emplacement du fichier joint au PUBLIPOSTAGE?", _
          "Paramétrage du PUBLIPOSTAGE pour la session", publipostagePJ(i))
      If "" = Dir(PJ, vbNormal) Then GoTo quest
        publipostagePJ(i) = PJ
      Else: Exit For
      End If
      Next i
  End If
  MsgBox "Votre publipostage doit comporter le terme :" & vbCr & "PUBLIIDEM" & vbCr & "dans le sujet." & vbCr & "Celui-ci sera retiré lors de l'envoi"

End Sub
```
  
### Charger les fichiers dans les courriers

Ensuite, il nous faut insérer le second script qui récupèrera le courrier juste avant qu'il ne parte pour lui ajouter les pièces jointes précédemment définies.

Pour cela, il faut se rendre dans le script `ThisOutlookSession`.

![Image montrant la position du script ThisOutlookSession](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i0salpru9mf052ksjbw1.png)

Puis ajouter le script suivant :

```vba
' Permet d'attacher une ou plusieurs pièces jointes à un courrier (même fichiers pour l'ensemble des destinataires)
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)


    Dim objFolder As Object
    Dim objFile As Object
    Dim DEST As Recipient
    Dim SMTPTO As String

    If Item.Class = olMail Then
        Dim objCurrentMessage As MailItem
        Set objCurrentMessage = Item
        ' Permet de vérifier que le sujet du courrier contient le terme "PUBLIIDEM"
        If UCase(objCurrentMessage.Subject) Like "*PUBLIIDEM*" Then
            On Error Resume Next
            Dim i As Long
            i = 0
            If publipostagePJ <> "" Then
                ' Permet d'ajouter la même pièce jointe à chacun de ses correspondants
                While publipostagePJ(i) <> "fin"
                    objCurrentMessage.Attachments.Add Source:=publipostagePJ(i)
                    i = i + 1
                Wend
            End If

            'On supprime le terme PUBLIIDEM du sujet et le courrier s'envoie avec l'ensemble des pièces jointes
            objCurrentMessage.Subject = Replace(objCurrentMessage.Subject, "PUBLIIDEM ", "")
        End If
        Set objCurrentMessage = Nothing
    End If
End Sub
```

Ce script est appelé juste avant l'envoi du courrier, regarde si l'objet contient le mot `PUBLIIDEM` et ajoute les pièces jointes si c'est le cas puis retire le mot.

## Utilisation

Maintenant qu'on a l'ensemble de nos scripts en place, il s'agit de bien les utiliser ! Pour cela, tu dois ouvrir Outlook (pense à le redémarrer après avoir ajouté un script) puis te rendre dans la section `Développeur`. 

Tu trouveras un bouton `Macros`. En cliquant dessus, tu verras le script permettant d'ajouter les pièces jointes apparaitre.

![Image montrant le bouton pour ajouter les pièces jointes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c00fc2vosdnm2tl4z9vw.png)

En cliquant sur le script, tu auras une boîte de dialogue te demandant les documents à ajouter.

![Image montrant la boite de dialogue pour ajouter les chemins vers les fichiers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7yia4t1esesh1zwz99i9.png)
 
Dans cette boîte de dialogue, tu ne dois pas jouter le document directement mais le chemin vers ce dernier. Pour trouver ce dernier, il te suffit de te rendre à ton fichier via l'explorateur de fichier et de copier le chemin vers document à l'aider d'un clic droit. **N'oublie pas d'enlever les guillemets**

![Image montrant comment copier le chemin d'accès d'un fichier](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7qpe5xzywgzxfovxfj3.png)
 
Si le chemin ressemble à cela, il te faut lui retirer les guillemets !

```diff
- "C:\Users\****\Downloads\Book1.xlsx"
+ C:\Users\****\Downloads\Book1.xlsx
```

Ensuite, tu peux effectuer le publipostage normalement en pensant à inclure **PUBLIIDEM** au début de l'objet de ton message ! Dès lors, l'ensemble des documents ajoutés seront insérés dans le courrier !

Bon publipostage !

### Tips

Afin de vérifier que tout fonctionne bien et pour éviter d'envoyer des courriers, tu peux passer en mode hors-ligne depuis Outlook. Tu trouveras alors l'ensemble de tes courriers dans l'`Outbox` où tu pourras vérifier la présence de la pièce jointe. 

![Image montrant l'emplacement de l'icône pour travailler en hors-ligne](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xq95y7nezt1b462gbbo.png)

À droite de l'image, on a la présence de l'icône permettant de travailler en hors-ligne.

## Code source

[Office Automation](https://github.com/Barbapapazes/office-automation)

## Crédit

Merci à [Patricia D](https://www.youtube.com/user/PatriciaAngellights) pour ses vidéos et ses scripts qui ont permis la création de ce tutoriel