Macro VBA : Ajouter automatiquement un fichier en pièce jointe à un message électronique

VBA - Visual Basic for Application

L’ajout d’une pièce jointe à un e-mail peut être accéléré dans Microsoft Outlook en utilisant une macro appropriée. Souvent, on clique sur le menu du ruban via “Insérer” ➜ “Ajouter un fichier” pour atteindre le fichier en question. Ou bien on recherche d’abord le fichier dans l’explorateur Windows et on le glisse ensuite par Drag&Drop dans le nouveau mail. C’est déjà relativement pratique, mais cela peut encore être amélioré avec une macro VBA, surtout si l’on envoie toujours le même fichier ou si la pièce jointe se trouve toujours sous un certain chemin et correspond à une nomenclature concrète. Dans un article précédent, nous avons déjà montré comment enregistrer automatiquement les fichiers joints aux e-mails avec VBA, nous allons maintenant montrer le chemin inverse, c’est-à-dire comment joindre des fichiers à un e-mail à l’aide de VBA.

Code VBA

Avec le code VBA suivant, nous créons tout d’abord un nouvel e-mail Outlook, puis nous insérons automatiquement une pièce jointe dans cet e-mail.

Sub NewMailWithAttachment()
    Dim appOutlook As Outlook.Application
    Dim myEmail As Outlook.MailItem

    Set appOutlook = New Outlook.Application
    Set myEmail = appOutlook.CreateItem(olMailItem)
    Set myAttachments = myEmail.Attachments
    myAttachments.Add "c:\Users\danie\Desktop\Invoice-2023-01-1938.pdf", _
    olByValue, 1, "YourInvoice"
    myEmail.Display
Fin Sub

Si l’on exécute ce code/cette macro, un e-mail nouvellement créé s’ouvre et s’affiche avec la pièce jointe correspondante, comme on peut le voir dans l’image ci-dessous.

Capture d'écran du code VBA avec nouveau courriel avec fichier joint inséré
Le code VBA crée un courriel avec pièce jointe

Explications du code

Avec l’expression Set appOutlook = New Outlook.Application, on crée simplement un objet de l’application Outlook pour une utilisation ultérieure. On l’utilise ensuite pour créer le nouvel e-mail CreateItem(olMailItem). Le nouvel objet e-mail myEmail, possède une propriété/objet qui gère les pièces jointes. Nous l’attribuons à notre objet myAttachments.

La méthode réellement intéressante dans ce cas est myAttachments.Add. On peut lui passer quatre paramètres dans l’ordre suivant :

    1. Source (obligatoire) : c’est le chemin d’accès complet au fichier qui doit être joint au mail
    2. Type (optionnel) : définit le type de fichier joint. Ce paramètre correspond à l’énumération OlAttachmentType dont il existe quatre exemplaires (voir plus loin)
    3. Position (optionnel) : on peut définir ici à quel endroit la pièce jointe sera insérée dans l’e-mail. Il s’agit ici d’une valeur numérique. Si l’on indique la valeur “1”, la pièce jointe sera positionnée au début de l’e-mail. Pour tout autre nombre, la pièce jointe est positionnée à l’endroit qui correspond au nombre de caractères du texte de l’e-mail. Si le nombre est supérieur au nombre de caractères du texte de l’e-mail, la pièce jointe sera placée à la fin
    4. DisplayName (optionnel) : On peut ici donner un autre nom à la pièce jointe. Il s’agit du nom de fichier tel qu’il apparaît ensuite dans l’e-mail. Ce paramètre ne fonctionne toutefois pas dans toutes les constellations. Pour qu’il fonctionne, le type olByValue doit être utilisé et l’e-mail doit être formaté en texte enrichi. Pour les e-mails en texte pur ou HTML, le nom de fichier serait utilisé comme indiqué dans Source.

OlAttachmentType

Comme nous l’avons déjà mentionné, il en existe quatre types avec la signification suivante :

    • olByReference: Il ne faut plus utiliser ce type. Celui-ci n’est plus supporté par les versions actuelles d’Outlook
    • olByValue : Avec ce type, la pièce jointe est insérée dans l’e-mail comme copie du fichier original. Ce type devrait être le plus approprié pour la plupart des cas d’utilisation. Si le fichier original est renommé, édité ou supprimé, cela n’a aucune influence sur le fichier inséré
    • olEmbeddeditem: Ce type est utilisé lorsque l’on insère des pièces jointes au format de message Outlook (fichiers *.msg)
    • olOLE : ce type concerne des objets spéciaux pour lesquels Microsoft a créé l’OLE (Object Linking and Embedding). Cela permet de lier ou d’intégrer des objets/applications dans d’autres applications Microsoft. Le meilleur exemple est lorsque l’on insère par exemple un dessin Visio dans Word. Celui-ci est alors inséré de telle sorte qu’il est possible d’éditer le dessin Visio dans Word.

Leave a Reply

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