VBA – Envoyer des Courriels Depuis Excel via Outlook

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on décembre 23, 2021

Ce tutoriel vous montrera comment envoyer des courriels depuis Excel via Outlook en utilisant VBA.

Envoi du Classeur Actif

Function EnvoyerClasseurActif(strÀ As String, strObjet As String, Optional strCC As String, Optional strContenu As String) As Boolean
   On Error GoTo GestionErreur
   Dim appOutlook As Object
   Dim mItem As Object
' Créez une nouvelle instance d'Outlook
   Set appOutlook = CreateObject("Outlook.Application")
   Set mItem = appOutlook.CreateItem(0)
   With mItem
     .To = strÀ
     .CC = ""
     .Subject = strObjet
     .Body = strContenu
     .Attachments.Add ActiveWorkbook.FullName
' Utilisez send pour envoyer immédiatement ou display pour afficher à l'écran
    .Display 'ou .Send
   End With
' Nettoyage des objets
  Set mItem = Nothing
  Set appOutlook = Nothing
  EnvoyerClasseurActif = True
  Exit Function

' Gestion des erreurs
GestionErreur:
  EnvoyerClasseurActif = False
End Function

La fonction ci-dessus peut être appelée à l’aide de la procédure suivante

Sub SendMail()
   Dim strÀ As String
   Dim strObjet As String
   Dim strContenu As String
' Remplissage des variables
   strÀ = "jon.smith@gmail.com"
   strObjet = "Veuillez trouver le fichier financier ci-joint"
   strContenu = "un texte à insérer ici pour le corps du courriel"
' Appelez la fonction pour envoyer l'e-mail
   If EnvoyerClasseurActif(strÀ, strObjet, , strContenu) = True Then
      MsgBox "Création de l'e-mail réussie"
   Else
      MsgBox "La création de l'email a échoué !"
   End If
End Sub

Utilisation de la Liaison Anticipée pour faire Référence à la Bibliothèque d’Objets Outlook

Le code ci-dessus utilise une liaison tardive pour faire référence à l’objet Outlook. Vous pouvez ajouter une référence à Excel, et déclarer l’application Outlook et l’élément de messagerie Outlook en utilisant la liaison anticipée si vous préférez. La liaison anticipée rend le code plus rapide, mais peut vous limiter car l’utilisateur doit avoir la même version de Microsoft Office sur son PC.

Cliquez sur le menu Outils et Références pour afficher la boîte de dialogue de référence.

Ajoutez une référence à la bibliothèque d’objets Microsoft Outlook pour la version d’Office que vous utilisez.

Vous pouvez ensuite modifier votre code pour utiliser directement ces références.

Un grand avantage de la liaison anticipée est la liste déroulante contextuelle qui vous montre les objets disponibles à utiliser!

Envoi d’une Seule Feuille à Partir du Classeur Actif

Pour envoyer une seule feuille, vous devez d’abord créer un nouveau classeur à partir du classeur existant, avec uniquement cette feuille, puis envoyer cette feuille.

Function EnvoyerLaFeuilleActive(strÀ As String, strObjet As String, Optional strCC As String, Optional strContenu As String) As Boolean
   On Error GoTo GestionErreur
   
' Déclarez des variables pour contenir les objets requis
   Dim clDestination As Workbook
   Dim strNomDest As String
   Dim clSource As Workbook
   Dim fcSource As Worksheet
   Dim OutApp As Object
   Dim OutMail As Object
   Dim strNomTemp As String
   Dim strCheminTemp As String
   
' Créez d 'abord le classeur de destination
   Set clDestination = Workbooks.Add
   strNomDest = clDestination.Name
   
' Définissez le classeur et la feuille source
   Set clSource = ActiveWorkbook
   Set fcSource = clSource.ActiveSheet
' Copie de la feuille active dans le nouveau classeur
   fcSource.Copy After:=Workbooks(strNomDest).Sheets(1)
'Sauvegarde avec un nom temporaire
   strCheminTemp = Environ$("temp") & "\"
   strNomTemp = "Liste obtenue à partir de " & clSource.Name & ".xlsx"
   With clDestination
      .SaveAs strCheminTemp & strNomTemp
      
' Envoyez maintenant un courriel au classeur de destination
      Set OutApp = CreateObject("Outlook.Application")
      Set OutMail = OutApp.CreateItem(0)
      With OutMail
         .To = strÀ
         .Subject = strObjet
         .Body = strContenu
         .Attachments.Add clDestination.FullName
' Utilisez send pour envoyer immédiatement ou display pour afficher à l'écran
         .Display 'ou .Display
      End With
      .Close False
  End With
  
' Supprimez le classeur temporaire que vous avez joint à votre message
   Kill strCheminTemp & strNomTemp
   
' Nettoyer les objets pour libérer la mémoire
   Set clDestination = Nothing
   Set clSource = Nothing
   Set fcSource = Nothing
   Set OutMail = Nothing
   Set OutApp = Nothing
   
   EnvoyerLaFeuilleActive = True
   
Exit Function

GestionErreur:
   EnvoyerLaFeuilleActive = False
   MsgBox Err.Description
End Function

et pour exécuter cette fonction, nous pouvons créer la procédure suivante

Sub EnvoyerFeuilleParCourriel()
   Dim strÀ As String
   Dim strObjet As String
   Dim strContenu As String
   
   strÀ = "jon.smith@gmail.com"
   strObjet = "Veuillez trouver le fichier financier ci-joint"
   strContenu = "Un texte est placé ici pour le corps de l'e-mail"
   
   If EnvoyerLaFeuilleActive(strÀ, strObjet, , strContenu) = True Then
      MsgBox "Création d'email réussie"
   Else
      MsgBox "La création de l'email a échoué !"
   End If
   
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro - A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users! vba save as


Learn More!
vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA