Tutoriel Excel – Envoyer des e-mails depuis Excel
Normalement, nous utilisons des clients de messagerie tels que Outlook, Gmail, etc. pour envoyer des e-mails. Cependant, de nombreuses personnes stockent des données dans des classeurs Excel et doivent transférer certaines de ces données à d'autres lorsqu'elles travaillent dessus. Par conséquent, elles ont besoin d'envoyer des e-mails directement depuis le classeur Excel, ce qui permet de gagner du temps en évitant d'utiliser un client de messagerie. Ce tutoriel étape par étape vous montrera 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 le définir comme votre client de messagerie par défaut.
Table des matières : [ Masquer ]
1. Les bases de l'envoi d'e-mails à partir d'Excel
Cette section présente les bases de l'envoi d'e-mails à partir d'Excel.
1.1 Envoyer des e-mails depuis Excel avec les fonctions intégrées d'Excel
Si vous souhaitez uniquement envoyer des e-mails simples à partir d'Excel, en incluant uniquement les champs À, Objet, Cc et corps du message, les fonctions intégrées d'Excel peuvent vous aider.
1.1.1 Envoyer un e-mail depuis Excel en utilisant une formule
Comme le montre le tableau ci-dessous, pour envoyer différents e-mails depuis Excel en fonction des champs donnés, vous pouvez utiliser les références de cellules des champs donnés pour créer différentes formules de lien hypertexte afin de réaliser cette tâche. Après avoir créé les hyperliens des e-mails, vous pouvez cliquer sur l'hyperlien dont vous avez besoin pour envoyer un e-mail automatiquement.
Remarque : S'il y a plusieurs destinataires dans les champs À ou Cc, veuillez les séparer par des points-virgules.
Cette section est divisée en quatre parties pour vous montrer les étapes afin d'ajouter séparément l'adresse e-mail, le(s) destinataire(s) en copie carbone (Cc), l'objet et le corps du texte à la formule Lien hypertexte. Veuillez procéder comme suit.
La syntaxe et les arguments de la fonction "HYPERLINK" sont les suivants.
Syntaxe
LIEN_HYPERTEXTE(emplacement_lien, [nom_convivial])
Arguments
1.1.1.1 Ajouter une adresse e-mail à la formule Lien hypertexte
Ici, nous utilisons "mailto:" comme partie de la formule pour ajouter un destinataire de courrier électronique. Dans cet exemple, l'adresse e-mail du premier destinataire se trouve dans la cellule B2, donc nous devons ajouter "mailto:" et faire référence à la cellule B2.
« mailto: »&B2
1. Sélectionnez une cellule pour afficher le lien hypertexte. Dans ce cas, je sélectionne la cellule F2.
2. Entrez ensuite la formule suivante dans celle-ci.
=HYPERLINK("mailto:"&B2)
Remarque : Si vous appuyez sur la touche "Entrée", un lien hypertexte sera créé comme le montre la capture d'écran ci-dessous. Lorsque vous cliquez sur le lien, un e-mail Outlook sera créé et l'adresse e-mail du destinataire sera automatiquement renseignée dans le champ À.
L'adresse e-mail du destinataire est maintenant ajoutée à la formule du lien hypertexte. Veuillez continuer avec les étapes suivantes pour ajouter la ligne d'objet, le ou les destinataires en Cc et le texte du corps selon vos besoins.
1.1.1.2 Ajouter des destinataires en copie (Cc) à la formule du lien hypertexte
Pour ajouter le ou les destinataires en copie (Cc) à la fonction Lien hypertexte, veuillez ajouter "?cc=" comme partie de 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 Lien hypertexte
Pour ajouter la ligne d'objet à la fonction Lien hypertexte, veuillez ajouter "&subject=" comme partie de la formule comme suit.
La formule dans la cellule F2 devrait maintenant ressembler à ce qui suit :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2)
1.1.1.4 Ajouter du texte corporel avec des sauts de ligne à la formule Lien hypertexte
La dernière étape consiste à ajouter le corps du texte à la formule Lien hypertexte. Comme vous pouvez le voir dans l'exemple, deux lignes de texte dans E2 sont séparées par un saut de ligne, et vous souhaitez conserver ce saut de ligne dans le corps de l'e-mail. Est-ce qu'Outlook reconnaît le saut de ligne dans cette situation ? Vérifions cela.
Pour ajouter le texte du corps à la formule Lien hypertexte, vous devez inclure « &body=" comme partie de la formule, comme suit.
La formule dans la cellule F2 est maintenant affichée comme suit :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2)
Remarque : Si vous appuyez sur la touche "Entrée" et cliquez sur le lien, vous pouvez voir dans le nouvel e-mail que le contenu du corps de l'e-mail s'affiche sur la même ligne.
Pour afficher le corps de l'e-mail sur des lignes séparées, vous devez modifier le contenu de la cellule en ajoutant le code de caractère de retour chariot "%0A" là où vous souhaitez insérer un saut de ligne. Voir la capture d'écran :
1.1.1.5 Spécifiez le texte à afficher pour le lien hypertexte
Dans les étapes ci-dessus, nous avons terminé l'argument Link_location avec les champs de courrier électronique. Dans cette section, nous allons finaliser l'argument suivant [friendly_name].
Dans ce cas, je souhaite que la cellule du lien hypertexte affiche le texte sous la forme « Envoyer un e-mail à xx », où xx est le nom du destinataire en A2. Par conséquent, la formule en F2 doit être modifiée pour devenir :
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2)
Appuyez sur la touche "Entrée" pour obtenir le résultat.
Sélectionnez cette cellule de formule et faites glisser son "poignée de recopie automatique" vers le bas pour créer d'autres hyperliens de courrier électronique. Voir la capture d'écran :
1.1.2 Envoyer un e-mail depuis Excel avec la fonction Lien hypertexte
Outre l'utilisation de la formule Hyperlien mentionnée ci-dessus, vous pouvez également créer manuellement un hyperlien e-mail avec la fonction "Insérer un lien hypertexte" dans Excel. Cette section va vous montrer les étapes à suivre.
1. Faites un clic droit sur l'email où vous souhaitez insérer un lien hypertexte, puis sélectionnez "Lien" dans le menu contextuel.
2. Dans la boîte de dialogue "Insérer un lien hypertexte" qui apparaît, vous devez configurer comme suit.

Lorsque vous cliquez sur le lien hypertexte, un e-mail Outlook sera créé avec les champs À, Objet et Corps spécifiés, comme le montre la capture d'écran ci-dessous.
Remarques :
1.2 Envoyer un e-mail à plusieurs destinataires dans des cellules avec un script VBA
Dans l'exemple ci-dessus, vous pouvez voir que plusieurs adresses e-mail sont affichées dans une cellule, séparées par des points-virgules. Si vous avez une liste d'adresses e-mail comme illustré dans la capture d'écran ci-dessous et que vous souhaitez envoyer un e-mail ou des e-mails indépendants à toutes ces adresses, le code VBA suivant peut vous aider.
1.2.1 Envoyer un e-mail à plusieurs destinataires dans des cellules avec un script VBA
1. Dans la feuille de calcul qui contient toutes les adresses e-mail auxquelles vous souhaitez envoyer l'e-mail, appuyez sur les touches "Alt" + "F11" pour ouvrir la fenêtre "Microsoft Visual Basic for Applications".
2. Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module", puis collez le code suivant dans la fenêtre "Module (Code)".
Code VBA : Envoyer un e-mail à une liste d'adresses 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, puis une boîte de dialogue "Kutools for Excel" apparaît. Sélectionnez la liste des adresses e-mail et cliquez sur "OK".
Remarques :
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
Après avoir exécuté le code, toutes les adresses e-mail dans la plage sélectionnée sont affichées dans le champ À de la fenêtre de message. Voir la capture d'écran :
1.2.2 Envoyer séparément des emails à chaque destinataire listé dans les cellules avec un script VBA
Le code ci-dessus ajoute toutes les adresses e-mail de la plage sélectionnée dans le champ À de la fenêtre de message. Si vous souhaitez envoyer des e-mails à chaque adresse e-mail listée dans des cellules séparément, sans qu'elles ne voient les adresses e-mail les unes des autres, vous pouvez essayer le script VBA suivant.
1. Dans la feuille de calcul qui contient toutes les adresses e-mail auxquelles vous souhaitez envoyer les e-mails. Appuyez sur les touches "Alt" + "F11" pour ouvrir la "fenêtre Microsoft Visual Basic for Applications".
2. Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module", puis collez le code suivant dans la fenêtre Module (Code).
Code VBA : Envoyer des e-mails à chaque adresse e-mail listée dans les cellules séparément
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", trouvez et cochez la case "Microsoft Outlook 16.0 Object Library", puis cliquez sur le bouton "OK" pour enregistrer les modifications.
4. Appuyez sur la touche "F5" pour exécuter le code, puis une boîte de dialogue "Kutools for Excel" apparaît. Sélectionnez la liste des adresses e-mail et cliquez sur "OK".
Remarques :
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
Dans cet exemple, il y a six adresses e-mail dans la plage sélectionnée, donc six fenêtres de message Outlook seront créées automatiquement avec une adresse e-mail distincte listée dans le champ À, comme le montre la capture d'écran ci-dessous.
5. Enfin, cliquez sur le bouton "Envoyer" pour envoyer les e-mails un par un.
2. Insérer des pièces jointes ou une signature Outlook dans les e-mails envoyés depuis Excel (avec des scripts VBA)
Cette section va vous montrer comment insérer des pièces jointes ou la signature par défaut d'Outlook dans les e-mails envoyés depuis Excel.
2.1 Insérer des pièces jointes dans les e-mails envoyés depuis Excel
Ici, nous décrivons les différents cas d'insertion de pièces jointes, et vous pouvez choisir la méthode en fonction de vos besoins. Dans cette section, vous pouvez apprendre à (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 par e-mail
Vous pouvez appliquer le code VBA suivant pour envoyer un ou plusieurs fichiers dans un dossier en tant que pièces jointes depuis Excel.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre Module (Code).
Code VBA : Envoyer des fichiers dans un dossier en tant que pièces jointes 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 et cochez la case "Microsoft Outlook 16.0 Object Library", puis cliquez sur le bouton "OK" pour enregistrer les modifications.
4. Appuyez sur la touche "F5" pour exécuter le code, puis une fenêtre "Parcourir" apparaît. Veuillez sélectionner les fichiers que vous devez joindre à l'email, puis cliquez sur "OK".
Ensuite, une fenêtre de message apparaît. Vous pouvez voir que les fichiers sélectionnés sont affichés en tant que pièces jointes dans le champ Pièces jointes.
2.1.2 Envoyer la feuille de calcul actuelle en tant que pièce jointe par e-mail
Si vous souhaitez envoyer la feuille de calcul actuelle en tant que pièce jointe depuis Excel, vous pouvez appliquer le script VBA de cette section.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insertion" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre "Module (Code)".
Code VBA : Envoyer la feuille de calcul actuelle en pièce jointe par e-mail
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, puis la feuille de calcul actuelle est enregistrée en tant que classeur Excel et insérée automatiquement dans une fenêtre de message en tant que pièce jointe. Voir la capture d'écran :
Remarque : Le classeur joint, qui ne contient que la feuille de calcul actuelle, porte le même nom que le classeur d'origine. De plus, l'heure à laquelle vous exécutez le code est également ajoutée au nom du classeur.
2.1.3 Envoyer le classeur actuel en tant que pièce jointe par e-mail
Après avoir appris le code VBA pour envoyer la feuille de calcul actuelle en tant que pièce jointe depuis Excel, voici un autre script VBA pour vous aider à envoyer l'intégralité du classeur en tant que pièce jointe. Veuillez procéder comme suit.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre 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, puis le classeur actuel est automatiquement inséré dans la fenêtre de message en tant que pièce jointe. Voir la capture d'écran :
2.1.4 Envoyer l'intégralité du classeur par e-mail en tant que pièce jointe PDF
Pour la plupart des gens, ils ont tendance à enregistrer un classeur Excel sous forme de fichier PDF, puis à l'envoyer en pièce jointe à d'autres personnes. Dans cette section, je vais vous montrer une méthode pour envoyer des e-mails directement depuis Excel avec le classeur ouvert actuel en tant que pièce jointe PDF, sans avoir à enregistrer manuellement le classeur au format PDF.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre 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. Ensuite, le classeur actuel est automatiquement inséré dans une nouvelle fenêtre de message en tant que pièce jointe de fichier PDF. Voir la capture d'écran :
2.1.5 Envoyer la feuille de calcul actuelle par e-mail en tant que pièce jointe PDF
Par exemple, il existe un classeur nommé « Ventes mensuelles », et vous avez terminé un tableau de rapport de ventes dans une feuille de calcul nommée « rapport de ventes » et souhaitez envoyer cette feuille de calcul en tant que fichier PDF à vos collègues. Le code VBA suivant peut vous aider.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insérer" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre du Module (Code).
Code VBA : Envoyer la feuille de calcul actuelle en tant que 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. Ensuite, la feuille de calcul actuelle est automatiquement insérée dans une nouvelle fenêtre de message en tant que pièce jointe de fichier PDF. Voir la capture d'écran :
2.2 Insérer la signature Outlook dans les e-mails envoyés depuis Excel
Prenons l'exemple ci-dessus, vous appliquez le code VBA ci-dessus pour envoyer la feuille de calcul actuelle en tant que pièce jointe PDF depuis Excel, mais la signature Outlook ne peut pas être ajoutée à la fenêtre du message. Pour conserver la signature par défaut d'Outlook dans l'e-mail envoyé depuis Excel, la méthode suivante vous aidera.
Deux codes VBA sont listés ci-dessous.
Code VBA 1 : Ce code permet de conserver la signature Outlook.
Code VBA 2 : Ce code permet d'envoyer la feuille de calcul actuelle en tant que pièce jointe PDF par e-mail.
Code VBA 1 : Conserver la signature Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody
Code VBA 2 : Envoyer la feuille de calcul actuelle en tant que 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 for Applications".
2. Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Insertion" > "Module". Ensuite, collez le code VBA 2 ci-dessus dans la fenêtre Module (Code).
3. Pour conserver la signature par défaut d'Outlook dans l'e-mail envoyé depuis Excel, vous devez modifier 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. Vous obtiendrez ensuite une nouvelle fenêtre de message avec la feuille de calcul actuelle jointe en tant que fichier PDF, tandis que la signature par défaut d'Outlook sera insérée automatiquement à la fin du corps de l'e-mail.
3. Envoyer automatiquement des emails depuis Excel lorsque qu'une condition est remplie (avec des scripts VBA)
Dans les exemples ci-dessus, vous devez exécuter le code manuellement pour réaliser l'envoi des e-mails. Si vous souhaitez déclencher le code automatiquement lorsque certaines conditions sont remplies, par exemple, lorsqu'une cellule atteint une certaine valeur, lorsque la valeur d'une cellule change, ou lorsqu'une date est atteinte, etc., l'e-mail sera envoyé automatiquement. Cette section répertorie les conditions que les utilisateurs d'Excel recherchent souvent sur Google pour vous aider à envoyer automatiquement des e-mails depuis Excel lorsque certaines conditions sont remplies.
3.1 Envoyer automatiquement un e-mail lorsque la valeur d'une cellule atteint une certaine valeur
Comme le montre la capture d'écran ci-dessous, supposons que vous ayez un tableau de ventes avec la cellule D6 contenant le total des ventes. Vous souhaitez envoyer automatiquement un e-mail à votre responsable en fonction du total des ventes. Par exemple, créer ou envoyer un e-mail automatiquement lorsque le total des ventes dépasse 10 000, mais si le total des ventes est égal ou inférieur à 10 000, aucune action ne doit être prise.
1. Dans la feuille de calcul contenant le tableau des ventes, faites un clic droit sur l'onglet de la feuille et cliquez sur "Afficher le code" dans le menu contextuel.
2. Dans la fenêtre "Microsoft Visual Basic for Applications" qui s'ouvre, collez le code VBA suivant dans la fenêtre "Sheet (Code)".
Code VBA : Envoyer automatiquement un e-mail lorsque une cellule atteint une certaine valeur 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, lorsque la valeur dans la cellule D6 dépasse 10000, un e-mail sera créé comme illustré dans la capture d'écran ci-dessous.
3.2 Envoyer automatiquement un e-mail lorsque la valeur d'une cellule change
Comme le montre la capture d'écran ci-dessous, supposons que vous receviez un classeur contenant les ventes mensuelles dans différentes feuilles de calcul et le total des ventes dans une feuille de calcul. Vous devez vérifier le total des ventes et, si le total des ventes est modifié, renvoyer le classeur à l'expéditeur et informer l'expéditeur que la cellule a été modifiée.
1. Dans la feuille de calcul contenant le tableau des ventes, faites un clic droit sur l'onglet de la feuille et cliquez sur "Afficher le code" dans le menu contextuel.
2. Dans la fenêtre "Microsoft Visual Basic for 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 de cellule spécifiée 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
Remarque : Dans le code,
Désormais, lorsque la valeur dans la cellule B14 change, un message Outlook sera automatiquement créé comme le montre la capture d'écran ci-dessous.
3.3 Envoyer automatiquement un e-mail lorsqu'un classeur est enregistré
Si vous avez un classeur qui doit être partagé avec d'autres après modification, normalement vous devez enregistrer le classeur, lancer le client de messagerie, créer un nouvel e-mail avec ce classeur en pièce jointe, remplir les champs correspondants puis envoyer l'e-mail. Cette section va vous montrer une méthode pour créer automatiquement un e-mail chaque fois que vous enregistrez le classeur. Veuillez procéder comme suit.
1. Appuyez sur les touches "Alt" + "F11" pour ouvrir la fenêtre "Microsoft Visual Basic for Applications".
2. Dans cette fenêtre, double-cliquez sur "ThisWorkbook" dans le volet "Projet", puis collez le code VBA suivant dans la fenêtre "ThisWorkbook (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
Remarque : Dans le code,
3. Désormais, lorsque vous enregistrez le classeur en appuyant sur les touches "Ctrl" + "S" ou en cliquant sur le bouton "Enregistrer", un e-mail Outlook sera créé automatiquement. Vous pouvez constater que le classeur actuel est joint en tant que pièce jointe et que les champs sont remplis avec le contenu spécifié. Voir la capture d'écran :
Conseils : Si vous utilisez fréquemment ce classeur, nous vous recommandons de l'enregistrer en tant que "Classeur Excel avec macros activées" pour conserver le script VBA pour une utilisation future. Les étapes sont les suivantes.
3.4 Envoyer automatiquement un e-mail à un moment précis
Disons que vous devez envoyer un email avec un classeur d'affectation de tâches à quelqu'un "tous les vendredis matin à 9h", et que vous souhaitez automatiser cette tâche dans Excel sans avoir à manipuler manuellement le client de messagerie. Cette section vous montrera la méthode pour y parvenir.
1. Appuyez sur les touches "Alt" + "F11" pour ouvrir la fenêtre "Microsoft Visual Basic for Applications".
2. Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module." Ensuite, collez le code VBA suivant dans la fenêtre 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 "ThisWorkbook" dans le volet "Projet", puis collez le code VBA suivant dans la fenêtre "ThisWorkbook (Code)".
Code VBA 2 : Envoyer automatiquement un e-mail à un moment précis
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub
Remarques :
4. Enregistrez les codes, puis enregistrez le classeur en tant que classeur Excel avec macros activées comme suit.
5. Ouvrez votre classeur avec macros enregistré, puis un e-mail sera créé ou envoyé automatiquement lorsque le jour et l'heure arriveront.
4. Sujets supplé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'il y ait un tableau des ventes mensuelles dans une feuille de calcul Excel comme le montre la capture d'écran ci-dessous, et que vous deviez envoyer ce tableau des ventes mensuelles à d'autres en tant que contenu du corps d'un e-mail ou en tant que pièce jointe directement. Nous vous proposons ici deux méthodes pour y parvenir.
4.1.1 Envoyer une plage en tant que partie du contenu du corps depuis Excel
Vous pouvez exécuter le code VBA suivant pour envoyer une plage de cellules en tant que partie du contenu du corps de l'e-mail depuis Excel.
1. Appuyez sur les touches "Alt" + "F11" pour ouvrir la fenêtre "Microsoft Visual Basic for Applications".
2. Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Outils" > "Références". Ensuite, cochez la case "Microsoft Outlook 16.0 Object Library" et cliquez sur "OK" dans la boîte de dialogue "Références – VBAProject".
3. Cliquez sur "Insérer" > "Module", puis collez le code VBA suivant dans la fenêtre "Module (Code)".
Code VBA : Envoyer une plage de cellules en tant que partie du contenu du corps de l'email 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
Remarque : 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'affiche, sélectionnez la plage de cellules que vous devez envoyer en tant que contenu du corps d'un e-mail, puis cliquez sur "OK". Voir capture d'écran :
Ensuite, un e-mail Outlook sera créé automatiquement. Vous pouvez constater que la plage que vous avez sélectionnée dans la feuille de calcul est insérée dans le corps de l'e-mail. Voir capture d'écran :
4.1.2 Envoyer une plage en tant que pièce jointe depuis Excel
Si vous avez besoin d'envoyer une plage de cellules dans une feuille de calcul en tant que pièce jointe depuis Excel, vous pouvez essayer le code VBA suivant.
1. Appuyez sur les touches "Alt" + "F11".
2. Dans la fenêtre ouverte "Microsoft Visual Basic for Applications", cliquez sur "Insert" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre "Module (Code)".
Code VBA : Envoyer une plage en tant que 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 for Excel" qui s'affiche, sélectionnez la plage de cellules que vous devez envoyer en tant que pièce jointe dans un e-mail, puis cliquez sur "OK". Voir capture d'écran :
Ensuite, un e-mail Outlook sera créé automatiquement. Et la plage de cellules que vous avez sélectionnée dans la feuille de calcul est enregistrée sous forme de classeur Excel et jointe dans la fenêtre Message. Voir capture d'écran :
4.2 Envoyer des e-mails lorsqu'un bouton est cliqué dans Excel
Si vous devez cliquer sur un bouton de commande pour déclencher une macro afin d'envoyer un e-mail depuis Excel, par exemple, envoyer le classeur actuel en tant que pièce jointe à d'autres en cliquant sur un bouton de commande dans la feuille de calcul. Vous pouvez suivre les étapes ci-dessous pour accomplir cette tâche.
1. Cliquez sur "Développeur" > "Insérer" > "Bouton de commande (Contrôle ActiveX)". Ensuite, dessinez un bouton de commande dans la feuille de calcul.
Conseils : Si vous avez déjà un bouton de commande, passez cette étape.
2. Appuyez sur les touches "Alt" + "F11" pour ouvrir la fenêtre "Microsoft Visual Basic for Applications". Dans la fenêtre, cliquez sur "Insertion" > "Module", puis collez le code VBA (le code utilisé pour envoyer le classeur actuel en tant que pièce jointe depuis Excel) dans la fenêtre Module (Code).
Cliquez ici pour obtenir le code.
Remarque : Ici, le nom de la macro que vous avez créée à l'étape 2 est "SendWorkbook".
3. Appuyez sur les touches "Alt" + "Q" pour fermer la fenêtre "Microsoft Visual Basic for Applications".
4. Maintenant, vous devez attribuer la macro au bouton de commande. Faites un clic droit sur le bouton de commande, puis sélectionnez "Affichage du code" dans le menu contextuel.
5. Ensuite, la fenêtre "Microsoft Visual Basic for Applications" apparaît, vous pouvez voir que les deux lignes suivantes sont listées dans la fenêtre "Sheet (Code)".
Private Sub CommandButton1_Click()
End Sub
6. Entrez le nom de la macro existante à l'intérieur de la sous-procédure pour le bouton de commande.
7. Appuyez sur les touches "Alt" + "Q" pour fermer l'"Éditeur Visual Basic", puis cliquez sur "Développeur" > "Mode Création" pour désactiver le mode création.
Vous pouvez maintenant cliquer sur le bouton de commande pour envoyer un email avec le classeur actuel en tant que pièce jointe dans l'email.
4.3 Envoyer des emails à partir d'un compte email spécifié
Normalement, lors du lancement d'un email depuis Excel avec un code VBA, le compte email de l'expéditeur est le compte par défaut dans Outlook. Supposons que vous ayez configuré plusieurs comptes email dans votre Outlook et que vous souhaitiez utiliser un compte spécifique pour envoyer les emails depuis Excel au lieu d'utiliser le compte par défaut. Le code VBA suivant peut vous aider.
Les codes suivants sont nécessaires 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 spécifier un compte e-mail particulier pour envoyer le classeur actuel en tant que pièce jointe depuis Excel. Veuillez procéder comme suit.
1. Appuyez sur les touches "Alt" + "F11". Dans la fenêtre "Microsoft Visual Basic for Applications", cliquez sur "Outils" > "Références". Ensuite, cochez la case "Microsoft Outlook 16.0 Object Library" et cliquez sur "OK" dans la boîte de dialogue "Références – VBAProject".
2. Cliquez sur "Insertion" > "Module". Ensuite, collez le code VBA suivant dans la fenêtre "Module (Code)".
Code VBA : Envoyer le classeur actuel en tant que pièce jointe d'un e-mail depuis Excel via un compte Outlook spécifié
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. Ensuite, un message électronique Outlook s'affiche, vous pouvez constater que le champ "De" est rempli avec le compte de messagerie que vous avez spécifié dans le code.
4.4 Envoyer un email lorsqu'une date est atteinte
Si vous devez envoyer un e-mail en fonction d'une date d'échéance spécifique, par exemple, comme illustré dans la capture d'écran ci-dessous, il y a une table de projet : « lorsque la date d'échéance dans la plage E2:E7 est égale ou inférieure à 7 jours à partir d'aujourd'hui (en supposant que la date actuelle est le 04/08/2022) », un e-mail sera automatiquement envoyé aux chefs de projet correspondants pour les informer que le projet arrive à expiration.
1. Dans la feuille de calcul contenant le tableau des projets, faites un clic droit sur l'onglet de la feuille et cliquez sur "Afficher le code" dans le menu contextuel.
2. Dans la fenêtre ouverte « Microsoft Visual Basic for Applications », collez le code VBA suivant dans la fenêtre « Sheet (Code) ».
Code VBA : Envoyer automatiquement un e-mail lorsque la date d'échéance est atteinte
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
Remarque : Dans le code,
3. Appuyez sur la touche "F5" pour exécuter le code. Ensuite, si la date d'expiration correspond aux conditions, l'e-mail correspondant sera créé. Dans ce cas, deux e-mails seront créés comme le montre la capture d'écran ci-dessous.
5. Un outil pratique pour vous aider à envoyer facilement des e-mails depuis Excel
Si vous êtes novice en VBA, les méthodes ci-dessus peuvent être difficiles à gérer pour vous. Nous vous recommandons ici la fonctionnalité "Envoyer des e-mails" de "Kutools pour Excel". Avec cette fonctionnalité, vous pouvez facilement envoyer des e-mails depuis Excel en quelques clics seulement. Veuillez procéder comme suit.
5.1 Créez facilement une liste de diffusion qui inclut les champs email dont vous avez besoin
Avant d'utiliser la fonctionnalité Envoyer des e-mails, vous devez créer une liste de diffusion contenant les champs e-mail dont vous avez besoin. Ici, la fonctionnalité Créer une liste de diffusion peut 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, vous devez configurer comme suit.
Ensuite, un exemple de tableau de liste de diffusion est créé, comme le montre la capture d'écran ci-dessous.
3. Maintenant, vous devez remplacer les données d'origine dans l'exemple par vos propres données de champ.
Vous avez maintenant créé un tableau de liste de diffusion. Veuillez ensuite appliquer la fonctionnalité "Envoyer des e-mails" pour envoyer des e-mails depuis Excel en vous basant sur les champs que vous avez créés.
Kutools pour Excel - Boostez Excel avec plus de 300 outils essentiels. Profitez de fonctionnalités IA gratuites en permanence ! Obtenez-le maintenant
5.2 Envoyez facilement des emails incluant les champs que vous avez créés dans la liste de diffusion.
Après avoir créé la liste de diffusion (cliquez pour savoir comment) qui contient les champs dont vous pourriez avoir besoin dans vos emails, vous pouvez maintenant envoyer des emails depuis Excel avec ces champs.
1. Sélectionnez toute la liste de diffusion, puis cliquez sur "Kutools Plus" > "Envoyer un e-mail".
2. Dans la boîte de dialogue "Envoyer des e-mails", veuillez effectuer la configuration suivante.
3. Ensuite, une boîte de dialogue "Kutools for Excel" apparaît pour vous indiquer combien d'e-mails ont été envoyés, cliquez sur le bouton "OK" pour fermer cette boîte de dialogue.
Astuce : Vous pouvez accéder au dossier "Éléments envoyés" dans votre Outlook pour vérifier les e-mails que vous avez envoyés.
5.3 Envoyez facilement des emails avec un corps en HTML (y compris des hyperliens, des images, etc.)
Cette fonctionnalité d'envoi d'e-mails vous permet de créer un e-mail en HTML, qui inclut des hyperliens, des images, différentes tailles de police et couleurs de police, etc.
Après avoir créé une liste de diffusion qui inclut les champs e-mail dont vous avez besoin, lorsque vous configurez la boîte de dialogue Envoyer des e-mails, vous pouvez enrichir le contenu du corps en utilisant les options de la barre d'outils.
Voir la capture d'écran ci-dessous :
5.4 Insérer facilement la signature par défaut d'Outlook lors de l'envoi de courriels
Dans la méthode ci-dessus, nous avons présenté un code VBA pour vous aider à envoyer des e-mails avec la signature par défaut d'Outlook. Ici, avec la fonctionnalité Envoyer des e-mails, il vous suffit de cocher une option, puis la signature par défaut d'Outlook sera insérée dans les e-mails que vous envoyez depuis Excel.
Après avoir créé une liste de diffusion qui inclut les champs e-mail dont vous avez besoin, lorsque vous configurez la boîte de dialogue Envoyer des e-mails, vous devez cliquer sur "Options" > "Utiliser les paramètres de signature d'Outlook".
Remarque : Assurez-vous qu'une coche s'affiche avant l'option Utiliser les paramètres de signature d'Outlook.
Lorsque les destinataires reçoivent l'e-mail, ils peuvent voir la signature par défaut d'Outlook affichée à la fin du corps du message.
5.5 Envoyez facilement des emails depuis un compte email spécifié
Pour utiliser un compte e-mail spécifique afin d'envoyer des e-mails depuis Excel au lieu d'utiliser le compte par défaut, la fonctionnalité Envoyer des e-mails peut également vous aider à le faire facilement.
Après avoir créé une liste de diffusion qui inclut les champs e-mail dont vous avez besoin, lorsque vous configurez la boîte de dialogue Envoyer un e-mail, vous devez cliquer sur "Options" > "Envoyé depuis", puis cliquer sur le compte e-mail à partir duquel vous souhaitez envoyer les e-mails.
Remarque : Après avoir sélectionné le compte de messagerie, une coche sera affichée devant celui-ci.
Cliquez ici pour en savoir plus sur la fonctionnalité Envoyer des e-mails.
Kutools pour Excel - Boostez Excel avec plus de 300 outils essentiels. Profitez de fonctionnalités IA gratuites en permanence ! Obtenez-le maintenant
En conclusion, l'envoi d'e-mails depuis Excel est assez utile dans notre travail quotidien. Cet article couvre des sujets plus complets concernant l'envoi d'e-mails à partir d'Excel. S'il existe d'autres sujets ou des solutions plus simples, veuillez laisser un commentaire pour me le faire savoir.
Meilleurs outils de productivité pour Office
Boostez vos compétences Excel avec Kutools pour Excel, et découvrez une efficacité sans précédent. Kutools pour Excel propose plus de300 fonctionnalités avancées pour augmenter la 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 facilite grandement votre travail
- Activez la modification 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é de50 %, et réduit des centaines de clics de souris pour vous chaque jour !