Tutoriel Excel – Envoyer des e-mails depuis Excel
Généralement, nous utilisons des clients de messagerie comme Outlook ou Gmail pour envoyer des e-mails. Toutefois, de nombreuses personnes conservent leurs données dans un classeur Excel et doivent partager certaines de ces informations avec d’autres collaborateurs pendant qu’elles y travaillent. Envoyer des e-mails directement depuis Excel leur permet ainsi de gagner du temps en évitant de basculer vers un client de messagerie. Ce tutoriel pas à pas vous explique comment envoyer des e-mails depuis Excel dans différentes situations.
Remarque : avant d’appliquer les méthodes suivantes, vous devez configurer un client de messagerie Outlook sur votre ordinateur et en faire votre client de messagerie par défaut.
Table des matières :[ Masquer ]
1. Les bases de l’envoi d’e-mails depuis Excel
Cette section présente les fondamentaux de l’envoi d’e-mails depuis Excel.
1,1 Envoyer des e-mails depuis Excel avec les fonctions intégrées d’Excel
Si vous souhaitez envoyer depuis Excel des e-mails simples comprenant uniquement les champs « À », « Objet », « Cc » et le corps du message, les fonctions intégrées d’Excel vous seront d’une grande aide.
1,1.1 Envoyer un e-mail depuis Excel à l’aide d’une formule
Comme le montre le tableau ci-dessous, vous pouvez envoyer différents e-mails depuis Excel en fonction des champs fournis en utilisant les références de cellules correspondantes pour créer des liens hypertexte adaptés. Une fois ces liens créés, il vous suffit de cliquer sur celui de votre choix pour déclencher automatiquement l’envoi de l’e-mail.
Remarque : si plusieurs destinataires figurent dans les champs « À » ou « Cc », veuillez les séparer par des points-virgules.

Cette section est divisée en quatre parties pour vous guider pas à pas dans l’ajout séparé de l’adresse e-mail, du ou des destinataires en copie (Cc), de la ligne d’objet et du corps du message à la formule du lien hypertexte. Procédez comme suit.
La syntaxe et les arguments de la fonction « LIEN_HYPERTEXTE » sont les suivants :
Syntaxe
HYPERLINK(link_location, [friendly_name])
Arguments
1,1.1,1 Ajouter Adresse e-mail à la formule de lien hypertexte
Ici, nous utilisons « mailto: » dans la formule pour indiquer le destinataire. Dans cet exemple, l’adresse e-mail du premier destinataire se trouve dans la cellule B2 ; nous devons donc préfixer cette référence par « mailto: ».
“mailto:”&B2
1. Sélectionnez une cellule dans laquelle afficher le lien hypertexte — ici, j’ai choisi la cellule F2.
2. Saisissez ensuite la formule suivante dans cette cellule.
=HYPERLINK("mailto:"&B2) 
Remarque : en appuyant sur la touche « Entrée », un lien hypertexte est créé, comme illustré dans la capture d’écran ci-dessous. Un clic sur ce lien ouvre automatiquement un e-mail Outlook, avec l’adresse e-mail du destinataire préremplie dans le champ « À ».

L’adresse e-mail du destinataire est désormais intégrée à la formule du lien hypertexte. Poursuivez avec les étapes suivantes pour ajouter, selon vos besoins, la ligne d’objet, les destinataires en copie (Cc) et le texte du corps du message.
1,1.1,2 Ajouter le ou les destinataires en copie (Cc) à la formule de lien hypertexte
Pour ajouter un ou plusieurs destinataires en copie (Cc) à la fonction LIEN_HYPERTEXTE, ajoutez « ?cc= » dans la formule, comme suit.
La formule dans la cellule F2 doit être la suivante :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2) 
1,1.1,3 Ajouter la ligne d’objet à la formule de lien hypertexte
Pour inclure une ligne d’objet dans la fonction LIEN_HYPERTEXTE, ajoutez « &subject= » à votre formule, comme suit.
La formule dans la cellule F2 doit désormais ressembler à ceci :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2) 
1,1.1,4 Ajouter le texte du corps du message avec des sauts de ligne à la formule de lien hypertexte
La dernière étape consiste à intégrer le texte du corps du message dans la formule du lien hypertexte. Comme le montre l’exemple, les deux lignes de texte situées en E2 sont séparées par un saut de ligne, et vous souhaitez préserver ce saut dans le corps de l’e-mail. Outlook reconnaît-il ce saut de ligne dans ce cas ? Vérifions-le.
Pour inclure le texte du corps du message dans la formule du lien hypertexte, ajoutez « &body= » comme élément de celle-ci, comme suit.
La formule dans la cellule F2 s’affiche désormais ainsi :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2) 
Remarque : si vous appuyez sur la touche « Entrée », puis cliquez sur le lien, vous constaterez dans Nouveau courriel que le corps du message s’affiche sur une seule ligne.

Pour afficher le corps de l’e-mail sur plusieurs lignes, insérez le code « %0A » à l’endroit où vous souhaitez créer un saut de ligne dans le contenu de la cellule. Voir la capture d’écran :

1,1.1,5 Spécifier le texte à afficher pour le lien hypertexte
Dans les étapes précédentes, nous avons renseigné l’argument Emplacement_du_lien à l’aide des champs de l’e-mail. Nous allons maintenant finaliser l’argument suivant : [nom_affiché].
Dans cet exemple, je souhaite que la cellule contenant le lien affiche le texte « Envoyer un e-mail à xx », où « xx » correspond au nom du destinataire figurant en A2. La formule en F2 doit donc être adaptée comme suit :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2) Appuyez sur la touche « Entrée » pour obtenir instantanément votre résultat.

Sélectionnez la cellule contenant la formule, puis faites glisser sa « poignée de recopie » vers le bas pour générer davantage de liens hypertexte d’e-mails. Voir la capture d’écran :

1,1.2 Envoyer un e-mail depuis Excel à l’aide de la fonction LIEN_HYPERTEXTE
Outre l’utilisation de la formule de lien hypertexte mentionnée ci-dessus, vous pouvez également créer manuellement un lien hypertexte vers une adresse e-mail à l’aide de la fonction « Créer un lien hypertexte » dans Excel. Cette section vous explique pas à pas comment procéder.
1. Cliquez avec le bouton droit sur la cellule où vous souhaitez insérer un lien hypertexte, puis choisissez « Lien » dans le menu contextuel.

2. Dans la boîte de dialogue « Créer un lien hypertexte » qui s’ouvre, configurez les paramètres comme suit :

En cliquant sur le lien hypertexte, un e-mail Outlook s’ouvre automatiquement avec les champs « À », « Objet » et « Corps du message » déjà préremplis, comme le montre la capture d’écran ci-dessous.

Remarques :
1,2 Envoyer un e-mail à plusieurs destinataires figurant dans des cellules à l’aide d’un script VBA
Dans l’exemple ci-dessus, vous pouvez constater que plusieurs adresses e-mail figurent dans une même cellule, séparées par des points-virgules. Si vous disposez d’une liste d’adresses e-mail, comme illustré dans la capture d’écran ci-dessous, et que vous souhaitez envoyer un e-mail unique ou plusieurs e-mails distincts à tous ces destinataires, le code VBA suivant vous sera particulièrement utile.

1,2.1 Envoyer un e-mail à plusieurs destinataires figurant dans des cellules à l’aide d’un script VBA
1. Dans la feuille de calcul contenant toutes les adresses e-mail auxquelles vous souhaitez envoyer un message, appuyez simultanément sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Insertion » > « Module », puis collez le code ci-dessous dans la fenêtre « Module (Code) ».

Code VBA : Envoyer un e-mail à une liste de Adresse e-mail
Sub sendmultiple()
'updateby Extendoffice 20220802
Dim xOTApp As Object
Dim xMItem As Object
Dim xCell As Range
Dim xRg As Range
Dim xEmailAddr As String
Dim xTxt As String
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xOTApp = CreateObject("Outlook.Application")
For Each xCell In xRg
If xCell.Value Like "*@*" Then
If xEmailAddr = "" Then
xEmailAddr = xCell.Value
Else
xEmailAddr = xEmailAddr & ";" & xCell.Value
End If
End If
Next
Set xMItem = xOTApp.CreateItem(0)
With xMItem
.To = xEmailAddr
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
End With
End Sub 3. Appuyez sur la touche « F5 » pour exécuter le code. La boîte de dialogue « Kutools pour Excel » s’ouvre alors : sélectionnez la liste des adresses e-mail, puis cliquez sur « OK ».

Remarques :
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Après exécution du code, toutes les adresses e-mail contenues dans la plage sélectionnée apparaissent automatiquement dans le champ « À » de la fenêtre de message. Voir la capture d’écran :

1,2.2 Envoyer séparément des e-mails à chaque destinataire figurant dans des cellules à l’aide d’un script VBA
Le code ci-dessus ajoute toutes les adresses e-mail contenues dans la plage sélectionnée au champ « À » de la fenêtre de message. Si vous souhaitez envoyer des e-mails individuels à chaque destinataire figurant dans les cellules, sans que ceux-ci puissent voir les adresses e-mail des autres, vous pouvez utiliser le script VBA suivant.
1. Dans la feuille de calcul contenant toutes les adresses e-mail auxquelles vous souhaitez envoyer des messages, appuyez simultanément sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Insertion » > « Module », puis collez le code suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer des e-mails séparément à chaque Liste d'adresses figurant dans les cellules
Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
Dim xRg As Range
Dim xRgEach As Range
Dim xRgVal As String
Dim xAddress As String
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
For Each xRgEach In xRg
xRgVal = xRgEach.Value
If xRgVal Like "?*@?*.?*" Then
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.To = xRgVal
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
'.Send
End With
End If
Next
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub 3. Cliquez ensuite sur « Outils » > « Références ». Dans la boîte de dialogue « Références – VBAProject », repérez et cochez l’option « Microsoft Outlook 16,0 Object Library », puis validez par « OK » pour enregistrer vos modifications.

4. Appuyez sur la touche « F5 » pour exécuter le code. La boîte de dialogue « Kutools pour Excel » s’ouvre alors : sélectionnez la liste des adresses e-mail, puis cliquez sur « OK ».

Remarques :
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Dans cet exemple, six adresses e-mail figurent dans la plage sélectionnée ; six fenêtres de message Outlook seront donc créées automatiquement, chacune contenant une liste d’adresses distincte dans le champ « À », comme illustré dans la capture d’écran ci-dessous.

5. Enfin, cliquez sur le bouton « Envoyer » pour transmettre les e-mails un par un.
2. Insérez une pièce jointe ou une signature Outlook dans les e-mails envoyés depuis Excel (à l’aide de scripts VBA).
Cette section vous explique comment insérer une pièce jointe ou inclure automatiquement votre signature Outlook par défaut dans les e-mails envoyés depuis Excel.
2,1 Insérer une pièce jointe dans les e-mails envoyés depuis Excel
Nous décrivons ici les différents cas de Insérer une pièce jointe ; vous pouvez choisir la méthode adaptée à vos besoins. Dans cette section, vous apprendrez à (cliquez sur l’un des liens suivants pour accéder à la méthode correspondante) :
2,1.1 Envoyer un fichier spécifique en pièce jointe
Vous pouvez utiliser le code VBA suivant pour envoyer par e-mail un ou plusieurs fichiers d’un dossier en tant que pièces jointes directement depuis Excel.
1. Appuyez sur les touches « Alt » + « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer des fichiers d’un dossier en pièce jointe depuis Excel
Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
Dim xStrFile As String
Dim xFilePath As String
Dim xFileDlg As FileDialog
Dim xFileDlgItem As Variant
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
If xFileDlg.Show = -1 Then
With xMailOut
.BodyFormat = olFormatRichText
.To = "xxx@aaa.com"
.Subject = "test"
.HTMLBody = "test"
For Each xFileDlgItem In xFileDlg.SelectedItems
.Attachments.Add xFileDlgItem
Next xFileDlgItem
.Display
End With
End If
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Remarques :
3. Cliquez ensuite sur « Outils » > « Références ». Dans la boîte de dialogue « Références – VBAProject », recherchez « Microsoft Outlook 16,0 Object Library », cochez la case correspondante, puis cliquez sur « OK » pour enregistrer vos modifications.

4. Appuyez sur la touche « F5 » pour exécuter le code. La fenêtre « Parcourir » s’ouvre alors : sélectionnez les fichiers que vous souhaitez joindre à l’e-mail, puis cliquez sur « OK ».

Une fenêtre de message s’ouvre alors, affichant clairement les fichiers sélectionnés en tant que pièces jointes dans le champ « Pièces jointes ».

2,1.2 Envoyer le Feuille de calcul actuelle en pièce jointe
Si vous souhaitez envoyer la feuille de calcul actuelle en pièce jointe depuis Excel, utilisez le script VBA présenté dans cette section.
1. Appuyez sur les touches « Alt » + « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer le Feuille de calcul actuelle en pièce jointe
Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte features"
.Body = "Please check and read this document."
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub Remarques :
3. Appuyez sur la touche « F5 » pour exécuter le code. La feuille de calcul actuelle est alors enregistrée sous forme de classeur Excel et insérée automatiquement en pièce jointe dans une fenêtre de message. Voir la capture d’écran :

Remarque : Le classeur joint, qui contient uniquement la feuille de calcul actuelle, porte le même nom que le classeur d’origine, auquel s’ajoute l’heure à laquelle vous exécutez le code.
2,1.3 Envoyer le Classeur actuel en pièce jointe
Après avoir découvert le code VBA permettant d’envoyer la feuille de calcul active en pièce jointe depuis Excel, nous vous proposons ici un autre script VBA pour envoyer l’intégralité du classeur en pièce jointe. Suivez ces étapes :
1. Appuyez simultanément sur les touches « Alt » et « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre du module (Code).
Code VBA : Envoyer le Classeur actuel en pièce jointe depuis Excel
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Remarques :
3. Appuyez sur la touche « F5 » pour exécuter le code : le classeur actuel est automatiquement inséré en pièce jointe dans la fenêtre de message. Voir la capture d’écran :

2,1.4 Envoyer l’intégralité du classeur en pièce jointe PDF
La plupart des utilisateurs enregistrent habituellement leur classeur Excel au format PDF avant de l’envoyer en pièce jointe à d’autres personnes. Dans cette section, nous vous montrons comment envoyer directement un e-mail depuis Excel, avec le classeur actif automatiquement joint en tant que fichier PDF — sans avoir à l’enregistrer manuellement au préalable.
1. Appuyez sur les touches « Alt » + « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre du module (Code).
Code VBA : Envoyer l’intégralité du classeur en pièce jointe PDF
Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "\" & FileName
Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FilePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FilePath
.Display 'or use .Send
End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Remarques :
3. Appuyez sur la touche « F5 » pour exécuter le code. Le classeur actuel est alors automatiquement inséré en pièce jointe dans une nouvelle fenêtre de message sous forme de fichiers PDF. Voir la capture d’écran :

2,1.5 Envoyer le Feuille de calcul actuelle en pièce jointe PDF
Par exemple, vous disposez d’un classeur intitulé « Ventes mensuelles » et vous venez de finaliser un tableau de rapport de ventes dans une feuille nommée « Rapport des ventes ». Vous souhaitez partager cette feuille sous forme de fichier PDF avec vos collègues. Le code VBA suivant vous sera particulièrement utile.
1. Appuyez sur les touches « Alt » + « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer le Feuille de calcul actuelle en pièce jointe PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Remarques :
3. Appuyez sur la touche « F5 » pour exécuter le code. La feuille de calcul active est alors automatiquement insérée en pièce jointe dans une nouvelle fenêtre de message sous forme de fichiers PDF. Voir la capture d’écran :

2,2 Insérer la signature Outlook dans les e-mails envoyés depuis Excel
En reprenant l’exemple ci-dessus, vous appliquez le code VBA indiqué pour envoyer la feuille de calcul active en pièce jointe au format PDF depuis Excel, mais la signature Outlook ne s’ajoute pas automatiquement dans la fenêtre du message. Pour conserver la signature Outlook par défaut dans l’e-mail envoyé depuis Excel, la méthode suivante vous sera utile.
Deux codes VBA sont présentés ci-dessous.
Code VBA 1 : Ce code permet de préserver votre signature Outlook.
Code VBA 2 : Ce code vous permet d’envoyer la feuille de calcul active en pièce jointe au format PDF.
Code VBA 1 : Conserver la signature Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody Code VBA 2 : Envoyer le Feuille de calcul actuelle en pièce jointe PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 1. Normalement, vous devez appuyer sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Insertion » > « Module », puis collez le code VBA indiqué ci-dessus dans la fenêtre « Module (Code) ».
3. Pour conserver la signature Outlook par défaut dans l’e-mail envoyé depuis Excel, modifiez le code VBA 2 comme suit :

Voici le code complet après modification.
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Display
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.HTMLBody = "Email body" & "
" & .HTMLBody
.Attachments.Add FileName
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 4. Appuyez sur la touche « F5 » pour exécuter le code. Une nouvelle fenêtre de message s’ouvre alors, avec la feuille de calcul actuelle jointe en tant que fichier PDF, tandis que la signature Outlook par défaut est automatiquement insérée à la fin du corps de l’e-mail.

3. Envoyez automatiquement des e-mails depuis Excel dès qu’une condition est remplie (à l’aide de scripts VBA)
Dans les exemples précédents, vous devez exécuter manuellement le code pour envoyer l’e-mail. Si vous souhaitez déclencher automatiquement ce code dès qu’une condition spécifique est remplie — par exemple, lorsqu’une cellule atteint une valeur donnée, lorsqu’une valeur de cellule change ou lorsqu’une date est atteinte — l’e-mail sera envoyé automatiquement. Cette section présente les conditions les plus couramment recherchées par les utilisateurs d’Excel sur Google, afin de vous aider à automatiser l’envoi d’e-mails depuis Excel dès qu’une condition précise est satisfaite.
3,1 Envoyer automatiquement un e-mail lorsqu’une cellule atteint une valeur donnée
Comme le montre la capture d’écran ci-dessous, imaginez que vous disposiez d’un tableau de ventes dont la cellule D6 indique le total des ventes. Vous souhaitez envoyer automatiquement un e-mail à votre supérieur hiérarchique dès que ce total dépasse 10 000 — sans aucune action si le montant est inférieur ou égal à ce seuil.

1. Dans la feuille contenant le tableau de ventes, cliquez avec le bouton droit sur l’onglet de la feuille, puis choisissez « Afficher le code » dans le menu contextuel.

2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, collez le code VBA suivant dans la fenêtre « Feuille (Code) ».

Code VBA : Envoyer automatiquement un e-mail lorsqu’une cellule atteint une valeur donnée dans Excel
Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub Remarques :
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6") Désormais, chaque fois que la valeur de la cellule D6 dépassera 10 000, un e-mail sera automatiquement généré, comme illustré dans la capture d’écran ci-dessous.

3,2 Envoyer automatiquement un e-mail lorsqu’une valeur de cellule change
Comme le montre la capture d’écran ci-dessous, imaginez que vous receviez un classeur comprenant les ventes mensuelles réparties dans plusieurs feuilles, ainsi qu’un total des ventes figurant dans une feuille dédiée. Votre mission : vérifier ce total et, s’il a été modifié, renvoyer le classeur à l’expéditeur en l’informant que la cellule concernée a été altérée.

1. Dans la feuille de calcul contenant le tableau des ventes, cliquez avec le bouton droit sur l’onglet de la feuille, puis sélectionnez « Afficher le code » dans le menu contextuel.

2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, collez le code VBA suivant dans la fenêtre « Feuille (Code) ».
Code VBA : Envoyer automatiquement un e-mail lorsqu’une valeur spécifique de cellule change
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")
Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If
ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Remarques : Dans le code,
Désormais, chaque modification de la valeur de la cellule B14 déclenche automatiquement la création d’un message Outlook, comme le montre la capture d’écran ci-dessous.

3,3 Envoyer automatiquement un e-mail lorsqu’un classeur est enregistré
Si vous disposez d’un classeur devant être partagé avec d’autres personnes après modification, vous devez normalement l’enregistrer, lancer votre client de messagerie, créer un Nouveau email avec ce classeur en pièce jointe, remplir les champs correspondants, puis envoyer l’e-mail. Cette section vous montre une méthode permettant de créer automatiquement un e-mail à chaque enregistrement du classeur. Procédez comme suit.
1. Appuyez sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans cette fenêtre, double-cliquez sur « Ce classeur » dans le volet « Projet », puis collez le code VBA suivant dans la fenêtre « Ce classeur (Code) ».

Code VBA : Envoyer automatiquement un e-mail lorsqu’un classeur est enregistré
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
Dim xOutApp As Object
Dim xMailItem As Object
Dim xName As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "The workbook has been updated"
.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
.Attachments.Add xName
.Display
'.send
End With
Set xMailItem = Nothing
Set xOutApp = Nothing
End Sub Remarques : Dans le code,
3. Désormais, à chaque enregistrement du classeur (en appuyant sur « Ctrl » + « S » ou en cliquant sur le bouton « Enregistrer »), un e-mail Outlook est automatiquement généré, avec le classeur actuel joint en pièce jointe et les champs préremplis selon vos spécifications. Voir la capture d’écran :

Conseil : Si vous utilisez fréquemment ce classeur, nous vous recommandons de l’enregistrer au format « Classeur Excel prenant en charge les macros » afin de conserver le script VBA pour vos utilisations futures. Voici la procédure à suivre.

3,4 Envoyer automatiquement un e-mail à une heure précise
Imaginez devoir envoyer chaque vendredi matin à 9 heures un classeur contenant une affectation de tâches à une personne, et souhaiter automatiser cette opération directement depuis Excel, sans manipuler manuellement votre client de messagerie. Cette section vous explique précisément comment procéder.
1. Appuyez sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre du module.

Code VBA 1 : Envoyer le Classeur actuel en pièce jointe depuis Excel
Sub Timer()
If Weekday(Date) = vbFriday Then
SendWorkBook
Application.OnTime TimeValue("09:00:00"), "Timer"
Else
Application.OnTime TimeValue("09:00:00"), "Timer"
End If
End Sub
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Dans cette fenêtre, double-cliquez sur « Ce classeur » dans le volet « Projet », puis collez le code VBA suivant dans la fenêtre « Ce classeur (Code) ».

Code VBA 2 : Envoyer automatiquement un e-mail à une heure précise
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub Remarques :
4. Enregistrez les codes, puis sauvegardez le classeur au format Classeur Excel prenant en charge les macros, comme suit.

5. Ouvrez votre classeur compatible avec les macros que vous avez enregistré ; un e-mail sera alors automatiquement créé ou envoyé dès que la date et l’heure prévues seront atteintes.
4. Rubriques complémentaires
Cette section regroupe d’autres sujets que vous pourriez rencontrer lors de l’envoi d’e-mails depuis Excel.
4,1 Envoyer une plage de cellules depuis Excel (avec un script VBA)
Supposons qu’un tableau des ventes mensuelles figure dans une feuille Excel, comme illustré dans la capture d’écran ci-dessous, et que vous deviez l’envoyer à des destinataires soit directement dans le corps d’un e-mail, soit en pièce jointe. Nous vous proposons ici deux méthodes pour y parvenir.

4,1.1 Envoyer une plage de cellules dans le corps de l’e-mail depuis Excel
Vous pouvez exécuter le code VBA suivant pour insérer une plage de cellules directement dans le corps d’un e-mail depuis Excel.
1. Appuyez sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Outils » > « Références », cochez la case « Microsoft Outlook 16,0 Object Library », puis validez par « OK » dans la boîte de dialogue « Références – VBAProject ».

3. Cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer une plage de cellules dans le corps de l’e-mail depuis Excel
Sub SendARangeofCells()
'Updated by Extendoffice 20220809
Dim xRg As Range
Dim I, J As Long
Dim xAddress As String
Dim xMailOut As Object
Dim xOutApp As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.Subject = "test"
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = RangetoHTML(xRg)
.Display
'.Send
End With
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
' The following VBA script is cited from this page:
' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function Remarques : Dans le code,
4. Appuyez sur la touche « F5 » pour exécuter le code. Dans la boîte de dialogue « Kutools pour Excel » qui s’ouvre, sélectionnez la plage de cellules que vous souhaitez insérer dans le corps d’un e-mail, puis cliquez sur « OK ». Voir la capture d’écran :

Un e-mail Outlook est alors automatiquement généré. Vous remarquerez que la plage sélectionnée dans la feuille de calcul apparaît directement dans le corps du message. Voir la capture d’écran :

4,1.2 Envoyer une plage de cellules en pièce jointe depuis Excel
Si vous souhaitez envoyer une plage de cellules d’une feuille de calcul en pièce jointe directement depuis Excel, essayez le code VBA suivant.
1. Appuyez simultanément sur les touches « Alt » et « F11 ».
2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer une plage de cellules en pièce jointe depuis Excel
Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Monthly sales for 2021"
.Body = "Hello, please check and read this document. "
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Remarques :
3. Appuyez sur la touche « F5 » pour exécuter le code. Dans la boîte de dialogue « Kutools pour Excel » qui s’ouvre, sélectionnez la plage de cellules que vous souhaitez joindre à un e-mail, puis cliquez sur « OK ». Voir la capture d’écran :

Un e-mail Outlook est alors automatiquement créé. La plage de cellules sélectionnée dans la feuille de calcul est enregistrée en tant que fichier classeur Excel et jointe à la fenêtre du message. Voir la capture d’écran :

4,2 Envoyer des e-mails en cliquant sur un bouton dans Excel
Si vous souhaitez déclencher une macro d’envoi d’e-mail depuis Excel en cliquant sur un bouton de commande — par exemple, envoyer le classeur actuel en pièce jointe à des destinataires en un seul clic sur un bouton placé dans la feuille de calcul — suivez les étapes ci-dessous pour y parvenir.
1. Cliquez sur « Développeur » > « Insérer » > « Bouton de commande (contrôle ActiveX) », puis dessinez un bouton de commande directement dans la feuille de calcul.
Conseil : si vous disposez déjà d’un bouton de commande, ignorez cette étape.

2. Appuyez sur les touches « Alt » + « F11 » pour ouvrir la fenêtre « Microsoft Visual Basic pour Applications ». Cliquez ensuite sur « Insertion » > « Module », puis collez le code VBA (utilisé pour envoyer le classeur actuel en pièce jointe depuis Excel) dans la fenêtre « Module (Code) ».
Cliquez ici pour obtenir votre code.

Remarque : dans cet exemple, la macro créée à l’étape 2 s’appelle « SendWorkbook ».
3. Appuyez sur les touches « Alt » + « Q » pour fermer la fenêtre « Microsoft Visual Basic pour Applications ».
4. Vous devez maintenant affecter la macro au bouton de commande. Cliquez droit sur le bouton, puis choisissez « Afficher le code » dans le menu contextuel.

5. La fenêtre « Microsoft Visual Basic pour Applications » s’ouvre alors, affichant les deux lignes suivantes dans la fenêtre « Feuille (Code) ».
Private Sub CommandButton1_Click()
End Sub 
6. Saisissez le nom de la macro existante dans la sous-procédure liée au bouton de commande.

7. Appuyez sur les touches « Alt » + « Q » pour fermer l’« Éditeur Visual Basic », puis cliquez sur « Développeur » > « Mode Création » afin de désactiver ce mode.

Vous pouvez désormais cliquer sur le bouton de commande pour envoyer un e-mail avec le classeur actuel en pièce jointe.
4,3 Envoyer des e-mails depuis un compte e-mail spécifique
Par défaut, lorsqu’un e-mail est envoyé depuis Excel via un code VBA, l’expéditeur correspond au compte par défaut configuré dans Outlook. Si vous avez plusieurs comptes e-mail définis dans Outlook et que vous souhaitez utiliser un compte spécifique — plutôt que le compte par défaut — pour envoyer des messages depuis Excel, le code VBA suivant vous permet de le faire.
Les codes suivants sont requis dans ce cas.
Code VBA 1 :
Dim OutlookMail As Outlook.MailItem Code VBA 2 :
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next Comment utiliser les codes VBA ci-dessus ?
Dans cet exemple, nous allons configurer un compte e-mail spécifique pour envoyer le classeur actuel en pièce jointe depuis Excel. Suivez ces étapes :
1. Appuyez sur les touches « Alt » + « F11 ». Dans la fenêtre « Microsoft Visual Basic pour Applications », cliquez sur « Outils » > « Références », cochez la case « Microsoft Outlook 16,0 Object Library », puis validez par « OK » dans la boîte de dialogue « Références – VBAProject ».

2. Cliquez sur « Insertion » > « Module », puis collez le code VBA suivant dans la fenêtre « Module (Code) ».
Code VBA : Envoyer le Classeur actuel en pièce jointe d’un e-mail depuis Excel via un compte Outlook spécifique
Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Appuyez sur la touche « F5 » pour exécuter le code. Une fenêtre de message Outlook s’ouvre alors, avec le champ « De » automatiquement renseigné par le compte e-mail que vous avez spécifié dans le code.
4,4 Envoyer un e-mail lorsqu’une date est atteinte
Si vous devez envoyer un e-mail en fonction d’une date d’échéance spécifique — comme illustré dans la capture d’écran ci-dessous, où figure un tableau de projets — un message est automatiquement adressé aux responsables concernés dès que la date d’échéance (dans la plage E2:E7) tombe à 7 jours ou moins de la date du jour (ici le 4/8/2022), pour les avertir que leur projet arrive à expiration.

1. Dans la feuille contenant le tableau de projets, cliquez avec le bouton droit sur l’onglet de la feuille, puis choisissez « Afficher le code » dans le menu contextuel.

2. Dans la fenêtre « Microsoft Visual Basic pour Applications » qui s’ouvre, collez le code VBA suivant dans la fenêtre « Feuille (Code) ».
Code VBA : Envoyer automatiquement un e-mail lorsqu’une Date d'échéance est remplie
Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "
"
xMailBody = ""
xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf
xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf
xMailBody = xMailBody & ""
Set xMailItem = xOutApp.CreateItem(0)
With xMailItem
.Subject = xMailSubject
.To = xRgSendVal
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = xMailBody
.Display
'.Send
End With
Set xMailItem = Nothing
End If
End If
Next
Set xOutApp = Nothing
End Sub Remarques : Dans le code,
3. Appuyez sur la touche « F5 » pour exécuter le code. Si la Date d'échéance correspond aux conditions définies, l’e-mail correspondant est créé. Dans ce cas, deux e-mails sont créés, comme illustré dans la capture d’écran ci-dessous.

5. Un outil pratique pour vous permettre d’envoyer facilement des e-mails depuis Excel
Si vous débutez avec VBA, les méthodes décrites ci-dessus peuvent sembler complexes à mettre en œuvre. Nous vous recommandons donc notre fonctionnalité Envoyer des e-mails de « Kutools pour Excel », qui vous permet d’envoyer facilement des e-mails depuis Excel en quelques clics seulement. Voici comment procéder.
5,1 Créez facilement un Liste des emails comprenant les champs e-mail nécessaires
Avant d’utiliser la fonctionnalité « Envoyer des e-mails », vous devez créer une liste d’e-mails contenant les champs requis. La fonctionnalité « Créer une liste de diffusion » est là pour vous aider.
1. Cliquez sur « KUTOOLS PLUS » > « Créer une liste de diffusion ».

2. Dans la fenêtre « Créer une liste de diffusion » qui s’ouvre, configurez les éléments suivants.

Un tableau de type « Liste des e-mails » est alors créé, comme le montre la capture d’écran ci-dessous.

3. Vous devez maintenant remplacer les données d’origine de l’exemple par vos propres informations.

Vous avez maintenant créé un tableau « Liste des e-mails ». Passez à l’étape suivante pour appliquer la fonctionnalité « Envoyer des e-mails » et envoyer vos messages directement depuis Excel, en utilisant les champs que vous avez définis.
Kutools pour Excel– Boostez Excel avec plus de 300 outils essentiels, pour gagner en rapidité et en simplicité, et profitez des fonctionnalités d’intelligence artificielle pour un traitement de données plus intelligent et une productivité accrue.Obtenez-le dès maintenant
5,2 Envoyez facilement des e-mails incluant les champs que vous avez créés dans le Liste des emails
Après avoir créé la liste d’e-mails ()cliquez pour savoir comment) contenant les champs dont vous pourriez avoir besoin dans vos e-mails, vous pouvez désormais envoyer des messages depuis Excel à l’aide de ces champs.
1. Sélectionnez l’intégralité de la liste d’e-mails, puis cliquez sur « KUTOOLS PLUS » > « Envoyer des e-mails ».

2. Dans la boîte de dialogue « Envoyer des e-mails », suivez les étapes ci-dessous.

3. Une boîte de dialogue « Kutools pour Excel » s’affiche alors, indiquant le nombre d’e-mails envoyés ; cliquez sur « OK » pour la fermer.
Conseil : consultez le dossier « Éléments envoyés » dans Outlook pour retrouver facilement les e-mails que vous avez envoyés.

5,3 Envoyez facilement des e-mails avec un corps en HTML (incluant des liens hypertexte, des images, etc.)
La fonctionnalité « Envoyer des e-mails » vous permet de rédiger un message en HTML, enrichi de liens hypertexte, d’images, de différentes tailles et couleurs de police, et bien plus encore.
Après avoir créé une liste d’e-mails incluant les champs d’e-mail nécessaires, lorsque vous configurez la boîte de dialogue « Envoyer des e-mails », vous pouvez enrichir le contenu du corps du message à l’aide des options disponibles dans la barre d’outils.
Voir la capture d’écran ci-dessous :

5,4 Insérez facilement la signature par défaut d’Outlook lors de l’envoi d’e-mails
Dans la méthode présentée ci-dessus, nous avons illustré l’utilisation d’un code VBA pour vous permettre d’envoyer des e-mails intégrant automatiquement la signature par défaut d’Outlook. Grâce à la fonctionnalité « Envoyer des e-mails », il vous suffit désormais de cocher une case pour que cette signature soit ajoutée automatiquement aux messages envoyés depuis Excel.
Après avoir créé une liste d’e-mails incluant les champs d’adresse e-mail requis, cliquez sur « Options » > « Utiliser les paramètres de signature d’Outlook » lors de la configuration de la boîte de dialogue « Envoyer des e-mails ».
Remarque : veillez à ce qu’une coche apparaisse bien devant l’option « Utiliser les paramètres de signature d’Outlook ».

Lorsque les destinataires reçoivent l’e-mail, la signature par défaut d’Outlook s’affiche automatiquement à la fin du message.
5,5 Envoyez facilement des e-mails depuis un compte e-mail spécifique
Pour envoyer des e-mails depuis Excel à l’aide d’un compte e-mail spécifique plutôt que du compte par défaut, la fonctionnalité « Envoyer des e-mails » vous le permet facilement.
Après avoir créé une liste d’e-mails comprenant les champs d’adresse e-mail requis, lors de la configuration de la boîte de dialogue « Envoyer des e-mails », cliquez sur « Options » > « Envoyé depuis », puis sélectionnez le compte e-mail à partir duquel vous souhaitez envoyer vos messages.
Remarque : une coche apparaît devant le compte e-mail une fois celui-ci sélectionné.

Cliquez ici pour en savoir plus sur la fonctionnalité « Envoyer des e-mails ».
Kutools pour Excel– Boostez Excel avec plus de 300 outils essentiels, pour gagner en rapidité et en simplicité, et profitez des fonctionnalités d’intelligence artificielle pour un traitement de données plus intelligent et une productivité accrue.Obtenez-le dès maintenant
En conclusion, l’envoi d’e-mails depuis Excel s’avère extrêmement utile dans notre travail quotidien. Cet article aborde des sujets plus complets liés à cette fonctionnalité. Si vous connaissez d’autres approches ou des solutions encore plus simples, n’hésitez pas à partager vos idées en laissant un commentaire !
Meilleurs outils de productivité Office
Boostez vos compétences Excel avec Kutools pour Excel et découvrez une efficacité inégalée.Kutools pour Excel propose plus de 300 fonctionnalités avancées pour améliorer votre productivité et Gagner du temps.Cliquez ici pour obtenir la fonctionnalité dont vous avez le plus besoin...
Office Tab apporte une interface à onglets à Office et rend votre travail bien plus facile
- Activez l’édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
- Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
- Augmente votre productivité de 50 % et vous fait économiser des centaines de clics de souris chaque jour !
Tous les compléments Kutools. Un seul installateur
Kutools for Office regroupe les compléments pour Excel, Word, Outlook et PowerPoint, ainsi que Office Tab Pro, ce qui en fait le choix idéal pour les équipes travaillant à travers les applications Office.
- Suite tout-en-un— Compléments Excel, Word, Outlook et PowerPoint + Office Tab Pro
- Un seul installateur, une seule licence— installation en quelques minutes (compatible MSI)
- Fonctionne mieux ensemble— productivité optimisée dans toutes les applications Office
- Essai gratuit de 30 jours avec toutes les fonctionnalités— aucune inscription, aucune carte bancaire
- Meilleur rapport qualité-prix— économisez par rapport à l’achat de compléments individuels