Envoyer un mail Outlook avec excel VBA

68
150888

Il nous arrive que nous voulions envoyer un mail depuis une de nos bases de données sur Excel. Comme par exemple créer une mailing liste, envoyez des rappels de payement ou transmettre un dossier à une autre division de l’entreprise si une certaine tache est terminée.

C’est pourquoi nous allons voir dans ce court comment envoyer 1 mail depuis une adresse qui se situe dans une cellule, ajouter un sujet et un message.

Par la suite nous allons voir comment envoyer un mail à multiple personne et pour finir nous allons voire commet envoyer un mail aux personnes correspondant un certain critère.

Vous pouvez récupérer le fichier de l’exercices ici FIchier : envoyer un mail Outlook

La base de données

Alors nous avons une petite base de données qui comporte un nom, une adresse mail et un pays.

envoyer un mail outlook

Et nous allons utiliser au cours de ce cours ces informations afin d’envoyer un mail Outlook au destinataire.

Activer la librairie Outlook

Avant de commencer nous allons devoir activer la librairie Outlook afin de permettre de l’intégrer dans notre code et d’utiliser les propriétés d’Outlook.

Pour cela il faut aller dans visual Basic (ALT + F11) puis dans outils il faut aller sur Références…

envoyer un mail outlook

Ici il faudra trouver Microsoft Outlook xx.0 Object Library, les xx sont la version il se peut que votre version soit différente que la mienne donc vous devez prendre votre version.

envoyer un mail outlook

Cocher la case et cliquer sur OK

Envoyer un mail Outlook à une personne

Nous allons commence par envoyer un simple mail à 1 seule personne pour cela nous allons place le code suivant

envoyer un mail outlook

Ici nous avons créer une variable que nous avons nommé LeMail qui contient un objet Outlook, puis nous avons di au code créer un mail avec la commande CreateItem(OlMailItem).

Puis dans notre mail nous avons indiquer les informations telle que le subject, ou trouver l’adresse de réception qui se trouve dans la cellule C6. Nous avons aussi indiquer quelle information placer dans le contenue du mail. Pour finir nous avons demander au code de ne pas envoyer le mail mais de l’afficher avec Display.

Si nous changeons Display en Send alors le mail serra envoyer sans que nous voyions d’abord.

Envoyer un Mail Outlook personnaliser.

Désormais nous allons voir comment personnaliser un peut notre mail en placent des informations supplémentaires de notre base de données comme le nom et le pays. Avec le code suivant

envoyer un mail outlook

Se qui donne le résultat suivant

envoyer un mail outlook

Une autre solution consiste à créer un champs Sujet et Message dans une cellule

envoyer un mail outlook

et de faire référence à ces cellules comme suite

envoyer un mail outlook

Qui donne le résultat suivant

envoyer un mail outlook

Envoyer un mail Outlook à plusieurs personne

Désormais nous allons voir comment envoyer un mail toutes les personnes dans la liste et d’ajouter dans le sujet leurs nom à la fin.

Pour cela nous allons devoir travailler avec une loop For qui va exécuter le code un nombre de fois nécessaire. Pour garder cette exercice simple nous allons dire que notre base de donnée ne serra pas prolonge et s’arrête à la ligne 9.

Et donc nous allons placer le code suivant

envoyer un mail outlook

Qui donne le résultat suivant si on lance le code

envoyer un mail outlook

4 mails sont créés est prêt à être envoyer et nous pouvons voir dans chaque sujet il y a leurs noms d’indiquer.

Envoyer un mail Outlook avec une condition

Désormais nous allons envoyer uniquement un mail aux personnes qui corresponde à une condition et notre exemple la condition est le pays Belgique. C’est-à-dire que nous voulons uniquement envoyer aux personnes qui vivent en Belgique.

Cela nous allons le faire avec le code suivant.

envoyer un mail outlook

Quand on lance le code nous avons le résultat suivant.

envoyer un mail outlook

Uniquement 2 mails seront envoyés.

Désormais vous savez comment envoyer un mail Outlook avec Excel VBA. Bien sûr il y a plusieurs possibilités comme ajouter une pièce jointe, ajouter une date de rappelle et la prolonger après avoir envoyer un mail à une personne qui n’as pas encore payer ça facture. Faite moi savoir dans les commentaires dans quelle situation vous aimerez voir un exemple d’utilisation de mail. D’ici la je vous retrouve dans un prochain cours salut tous le monde

68 Commentaires

  1. Bonjour ! J’espère que vous allez bien.j’appreci vraiment votre travail, ça fait longtemps que même je vous suis
    Enfaite j’ai un souci avec le code VBA, je ne sais pas si vous pouvez m’aider

  2. Bonjour, merci pour ce code très utile pour ma fonction d’acheteur 3 questions :
    *je souhaite mettre plusieurs personne en copie ou indiquer le CC ? ex mettre en copie c6;c7;c8

    *dans le corp de mail je souhaite le personnaliser mettre :

    Bonjour « &B6& » ,
    Merci de me faire votre meilleure proposition selon le schéma en pj et les besoins ci-dessous :

    *je souhaite joindre 1 ou plusieurs pièces jointes comment faire ?

    merci d’avance pour votre aide.
    Avez vous une chaine youtube, tiktok pour des astuces ?

  3. Bonsoir
    Je souhaite envoyer un e mail via un état Excel mais ça va être une réponse sur un mail initial
    Aulieu de revenir vers Outlook mr assurer une réponse, je souhaite le faire via mon état Excel qui englobe toute la situation
    Merci

  4. Bonjour,

    Dans un cadre professionnel

    1. Comment mettre en forme le corps du message:
    – Surligner en gris,
    – Mettre en gras,
    – Texte en Bleu,
    – Aller à la ligne

    2. Comment garder sa signature Outlook (Respectivement pour chaque utilisateur qui se sert du fichier excel)

    Merci d’avance

    • Bonjour Samuel,
      il faut que le message soit en format HTML : à la place de ‘.Body=…’ mettre ‘.HTMLBody=…’ Ensuite, il suffit par exemple pour mettre en gras, d’encadrer le texte avec le symboles «  » avant le texte et «   » après le texte. Par exemple : «  Voici mon texte en gras « . Idem pour les autres mises en forme : pour souligner, pour italique. Et bien sûr on peut cumuler : «  Voici un texte en gras, souligné et en italique !  »
      Le retour à la ligne c’est le symbole «  ». Deux symboles à la suite = un double retour de ligne,etc…

      Pour garder la signature, le mieux est de créer le mail à partir d’un modèle.

    • …oups, évidemment le site à utilisé les symboles ! Donc les signes à utiliser : gras : ‘‘ au début et ‘‘ à la fin; pour le souligné c’est u à la place du b et pour italique c’est i. Cumul : ‘‘  » ‘
      Pour le saut de ligne :  » avant ou/et après le texte 🙂

  5. Bonjour,

    J’aurai besoin de réaliser une macro afin de relancer des fournisseurs sur le portefeuille des commandes en cours. Ayant beaucoup de fournisseurs, il faudrait que mon fichier filtre sur chacun d’eux avec leurs commandes, ensuite enregistre le fichier dans un dossier et envoi un email au fournisseur en associant ce fichier avec l’adresse mail dédié, un corps de mail général, un titre pour l’objet (ex: « portefeuille de commande »). Et en plus de cela j’aimerai que les personnes gérant les fournisseurs en questions soit en copie.

    J’espère avoir été clair.

    Merci d’avance pour votre aide.

  6. Bonjour,

    J’aurai besoin de réaliser une macro afin de relancer des fournisseurs sur le portefeuille des commandes en cours. Ayant beaucoup de fournisseurs, il faudrait que mon fichier filtre sur chacun d’eux avec leurs commandes, ensuite enregistre le fichier dans un dossier et envoi un email au fournisseur en associant ce fichier avec l’adresse mail dédié, un corps de mail général, un titre pour l’objet (ex: « portefeuille de commande »). Et en plus de cela j’aimerai que les personnes gérant les fournisseurs en questions soit en copie.

    J’espère avoir été clair.

    Merci d’avance pour votre aide.

  7. Bonjour à tous,

    Comment fait-on pour joindre plusieurs adresse mail à cette ligne de code :
    .SendMail « XXX@hotmail.fr », _
    « Demande DE chantier »
    J’ai essayé avec le symbole &, en mettant un point virgule mais rien ne fonctionne.

    Merci pour votre éclairement.

    Baptiste

  8. Merci ça marche très ben.
    Je voudrais savoir si c’est possible denvoyer par whatsapp aussi…
    Et si oui merci de m’aider.
    Et de montrer ou j’aurais juste à prendre whatsapp dans les références.?

  9. Bonjour,

    J’aimerais intégré a mon courriel un tableau qui sera trié en fonction de multiples destinataires et de multilignes.

    J’aimerais que le tableau soit en fonction d’un fournisseur qui revient souvent. (ma base de données a souvent plus de 500 lignes et a chaques lignes, le destinataire est indiqué.Donc on voit maintes et maintes de fois les mêmes destinataires)

    De sorte que le tableau envoyé a la suite du Body soit avec les entêtes et le nombre de lignes rattachés à chaques destinataires.

    Présentement je peux envoyer les courriels pour chaques lignes individuelles(je ne veux pas spammer mes destinataires).Je veux grouper chaques lignes en fonction de chaques destinataires.

  10. Bonjour,
    Tout d’abord merci beaucoup pour le post
    Dans me cas ou mon tableau (contact) ne serait pas sur la même feuille que mon « message » comment puis-je faire la liaison entre les deux feuille ?

    j’ai essayer avec if sheets « feuille1 & « d » & ligne) = « Belgique » Then
    Mais sans succès
    Merci à vous

  11. Bonjour,

    J’ai un petit souci pour l’envoie de mon email. Il ne part pas avec la bonne adresse d’expéditeur.
    Ayant plusieurs compte sur mon Outlook, j’aimerais qu’il parte avec une adresse précise.
    J’ai pourtant mis dans mon code « .SentOnBehalfOfName » :
    With oMailItem
    .SentOnBehalfOfName = « monadresse@mondomaine.fr »
    .To = Destinataire
    .Subject = Sujet
    mais celà ne fonctionne pas.

    Une petite idée ?

    En attendant, bonne journée

    Dominique

  12. Bonjour,
    je suis entrain de développer un code VBA pour un fichier Excel qui contient des références avec des dates de réception et dates de livraison, du coup le macro va calculer le nombre des jours restant (date livraison-aujourd’hui) et doit m’avertir avec un mail le jour de livraison (nombre des jour restant=0) même le fichier est fermé , le mail doit contenir la référence dans l’objet.
    le problème c’est chaque fois que j’ouvre le fichier pour saisir les nouveaux références il m’envoi des email même il n y a pas de dépassement des date (chaque mouvement d’une cellule à l’autre il lance un mail)
    pouvez vous m’aider svp ?

  13. bonjour, merci pour ce tuto, je relance la question de Gora qui m’intéresse également. Est-ce possible de laisser Excel générer un envoi de mail sans l’ouvrir (quand une échéance est atteinte par exemple).

  14. Bonjour,
    Super Tuto, merci beaucoup.
    Je cherche à envoyer le mail à partir d’une autre adresse que celle par défaut d’Outlook.
    En utilisant « De » dans le formulaire du message.
    Y a-t-il moyen?
    Si oui, comment ?
    Merci pour votre aide

  15. Dans tous les tuto que j’ai essayé AUCUN ne fonctionne correctement et ce même en faisant du copier coller et en suivant les directives

    Ne perdez pas votre temps avec lui

  16. Bonjour,

    J’aurais besoin d’envoyer un rapport d’intervention par mail sous forme de tableau. Seulement il faudrait uniquement les interevntions du jour.

    Comment puis-je faire

  17. Bonjour Daniel!
    C’est vrai super votre formule et très simple.
    J’aimerais pourvoir l’adapter en envoyant un Horaire de travail aux employés et mon tableau est de (« A1:H41 »). Es ce que vous pourriez m’aider S.V.P., Merci

    Voici votre formule adapter au cellule de mon fichier
    Private Sub Commande()

    Dim LeMail As Variant
    Dim Ligne As Integer
    Set LeMail = CreateObject(« Outlook.Application »)

    For Ligne = 4 To 41

    If Range(« AB » & Ligne) = « Email » Then
    With LeMail.CreateItem(olMailItem)
    .Subject = « Horaire du  » & Range(« B2 »)
    .To = Range(« AC » & Ligne)
    .Body = Range(« A1:H41 »)’Cette partie ne fonctionne pas
    .Display
    ‘.Send

    End With
    End If
    Next Ligne
    End Sub

    • Bonjour et bravo pour ce tuto.
      J’ai créé une macro qui envoyait bien le mail et la pièce jointe jusqu’à ce que decide de transformer le fichier Excel en modèle contenant des macros nommé « Nom ». Désormais quand je clique sur le modèle du fichier cela génère un nouveau fichier nommé « Nom1 ». Et la macro ne fonctionne plus.
      Voici le contenu de la macro :

      Dim LeMail As Variant

      Set LeMail =CreateObject(« Outlook.application »)

      With LeMail.createItem (olMailItem)
      .Subject = « sujet du mail »
      . To = « Destinataires  »
      . Body = corps du message
      .Attachments.Add ActiveWorkbook.Fullname
      .Display
      End with

      Donc la macro s’arrête a la ligne .Attachements

      Comment résoudre ce problème.?

      Merci par avance

  18. Bonjour,

    La procédure est ok, cependant deux points restent en suspend :
    • je n’arrive pas à émettre le mail sur une adresse mail en particulier ;
    • malgré plusieurs test, j’arrive à insérer une pièce jointe unique mais pas à insérer une pièce jointe en fonction du mail.

    Une idée ?

  19. Bonjour,
    Je viens de suivre ton tuto super mais j’aimerais savoir comment faire si j’ai des listings variables, un nombre variable de destinataire
    Mettre la signature dans le Mail aussi
    Merci d’avance

    • Bonjour, je pense que tu peux utiliser la fonction UsedRange.Rows pour déterminer le nombre de ligne.
      Cette fonction détermine le nombre de ligne utilisées dans une feuille. Donc si tu veux, tu utiliser une feuille annexe comme carnet et avec la ligne ci-dessous, tu détermine le nombre de contact que tu rentre sous forme de variable appelons-la NbLigne.
      NbLigne = Worksheets(« Sheet1 »).UsedRange.Rows.Count

  20. Bonjour,

    Tuto très clair et efficace.
    Dans le corps du mail je souhaiterai en plus de texte y ajouter une sélection assez grande de cellule.
    Voici le code:

    Option Explicit

    Sub Envoi_mail()

    Dim Envoi_mail As Variant

    Set Envoi_mail = CreateObject(« outlook.application ») ‘création d’un objet Outlook

    With Envoi_mail.CreateItem(olMailItem)
    .Subject = « JNC J-1 17h du  » & Range(« AH1 ») ‘
    .To = « vincent.molinaro@sncf.fr »
    .Body = « Bonjour, » & Chr(10) & Chr(13) & « Voici le point sur les JNC à J-1 17h du  » & Range(« AH1 ») & Chr(10) & Chr(13) & Range(« A1:S55 »).Select ‘
    .Display

    End With

    End Sub

    Tout le mail se génère bien sauf la sélection. A la place il est écrit « Vrai »

    Merci

  21. Bonjour, J’ai un souci avec votre procédure: le mail généré est dans une ancienne version d’outlook j’ai 2 versions d’installé sur mon ordi). En général cela ne pose pas de problème les deux se synchronise parfaitement. Les mails générés par la procédure ne s’envoient pas! tout semble OK mais aucun envoi n’est fait, ni enregistré dans les envoyés. J’ai essayé plein de choses, je n’arrive pas à trouver pourquoi. Avez-vous une idée?
    Merci beaucoup

  22. Bonsoir,
    j’ai oublié de vous poser une question.
    Dans votre exemple, il prend les mails dans une plage bien définie et limitée.
    Dans mon cas, la liste est variable. elle peut être de 15 lignes comme 200.
    comment lui dire de descendre les lignes jusqu’à rencontrer une cellule vide.?
    Merciii
    Pierre

  23. Bonsoir,
    Merci pour ce tuto bien utile !!!
    Petite question, j’ai téléchargé votre fichier mais il ne semble pas compatible avec ma version d’excel pourtant mise a jour et récente.
    auriez vous la possibilité de me dire comment faire?
    j’aurais voulu m’entrainer à partir de votre fichier.
    merci beaucoup.
    Pierre

  24. Bonjour,

    existe t’il un moyen de remplacer le bouton par un lien hypertexte dans une cellule
    en effet dans mon fichier il y a plusieurs adresses emails je souhaiterais que suivant sur quelle cellule je clique il m’envoie le mail à l’ adresse dans la cellule correspondante

    Merci d’avance

  25. bonjour et merci pour le tuto
    pouvez vous me dire si pour le corps du texte , il est possible de sélectionner une plage de cellules EX: ( b4 : f35) plutôt qu’une seule cellule comme vous l’avez fait dans la vidéo
    cordialement

  26. Bonsoir,

    tout d’abord je vous remercies pour ce tuto.

    je voudrais savoir s’il y a possibilité d’envoyer un mail automatiquement via excel avec une signature électronique?

    merci d’avance.

    • Il est très facile d’envoyer un mail à l’ouverture du fichier mais le faire à une heure/un jour précis, ou régulièrement c’est plus dur (C’est possible mais dur).
      A l’ouverture il suffit d’appeler la sub Auto_Open().

  27. Bonjour, j’ai plusieurs boites mail dans mon outlook. Je n’arrive pas à faire émettre mes messages via vba depuis la bonne adresse mail. Comment puis-je faire?
    Merci
    Serge

  28. Salut Daniel
    Super ton tuto c’est ce que je recherchais, j’ai réussi à faire l’envoie à plusieurs personnes en Send avec la flèche verte de VBA

    Mais au moment de sauvegarder le VBA j’ai un message d’erreur qui apparait :

    « Les fonctionnalités suivantes ne peuvent pas être enregistrées dans des classeurs sans macro : Projet VB
    Pour enregistrer un fichier avec ces fonctionnalités, cliquer sur non, puis sélectionnez un type de fichier prenant en charge les macros dans la liste de type de fichier.
    Pour continuer a enregistrer en tant que classeur sans macro cliquez sur Oui »

    Merci d’avance pour ton aide

    David

    • bonjour, merci pour ce tuto, je relance la question de Gora qui m’intéresse également. Est-ce possible de laisser Excel générer un envoi de mail sans l’ouvrir (quand une échéance est atteinte par exemple).

  29. Bonsoir,
    Merci pour ce tuto 🙂
    Sur cette base (envoi de plusieurs mails à partir de données dans un fichier Excel), j’ai besoin d’amener dans le corps du mail (Body) plusieurs éléments :
    – du texte (genre « Bonjour, vous trouverez ci-après … »), suivi d’un retour à la ligne
    – puis un premier tableau, suivi d’un retour à la ligne
    – puis un second tableau (qui doit venir se placer sous le 1er) , suivi d’un retour à la ligne
    – et enfin du texte (genre « Merci d’avance pour votre réponse, Cordialement etc »)
    J’ai trouvé une solution pour coller les 2 tableaux en tant qu’images (ci-dessous le code pour le tableau 1):
    Range(« d5:f5 »).CopyPicture
    wDoc.Application.Selection.Paste
    Set rng = wDoc.Content
    mais le problème c’est qu’ils se mettent/collent systématiquement en 1ère position du corps de mail, donc avant les textes …
    Je suppose qu’il doit y avoir moyen de forcer l’endroit où coller ces 2 images de tableaux ?
    Merci d’avance pour votre aide

  30. Bonjour
    Merci beaucoup pour le tuto, c’est genial.
    Petite question, je souhaiterai que les macros se stoppend quand la ligne est vide, quelle formule inserer?
    Encore merci!

  31. Bonjour comment envoyer le mail à tout le monde dans un seul mail. Votre procédure envoie plusieurs séparément et moi je veux un seul mail pour toute ma liste de diffusion.

    merci

  32. Bonjour, est-il possible d’intégrer des lignes du tableau en fonction d’une condition?
    Exemple : Envoyer toutes lignes de l’ensemble des personnes vivants en belgique dans un même email ?
    Merci d’avance

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.