Ce didacticiel vous montrera comment envoyer des e-mails depuis Excel via Outlook en utilisant VBA.
Envoi du classeur actif
1234567891011121314151617181920 | Fonction SendActiveWorkbook (strTo As String, strSubject As String, optionnel strCC As String, optionnel strBody As String) As BooleanEn cas d'erreur Reprendre ensuiteDim appOutlook en tant qu'objetDim mItem comme objet'créer une nouvelle instance d'OutlookDéfinir appOutlook = CreateObject("Outlook.Application")Définir mItem = appOutlook .CreateItem(0)Avec mItem.To = strTo.CC = "".Sujet = strSujet.Body = strBody.Attachments.Add ActiveWorkbook.FullName'utiliser envoyer pour envoyer immédiatement ou afficher pour afficher à l'écran.Afficher 'ou .EnvoyerTerminer par'nettoyer les objetsDéfinir mItem = RienDéfinir appOutlook = RienFonction de fin |
La fonction ci-dessus peut être appelée en utilisant la procédure ci-dessous
123456789101112131415 | Sous SendMail()Dim strTo As StringDim strSubject As StringDim strBody en tant que chaîne'remplir les variablesstrTo = "[email protected]"strSubject = "Veuillez trouver le dossier financier en pièce jointe"strBody = "du texte va ici pour le corps de l'e-mail"'Appelez la fonction pour envoyer l'e-mailSi SendActiveWorkbook(strTo, strSubject, , strBody) = true alorsMsgbox "Création d'email réussie"AutreMsgbox "La création de l'e-mail a échoué !"Fin siFin du sous-marin |
Utilisation de la liaison anticipée pour faire référence à la bibliothèque d'objets Outlook
Le code ci-dessus utilise la liaison tardive pour faire référence à l'objet Outlook. Vous pouvez ajouter une référence à Excel et déclarer l'application Outlook et l'élément de messagerie Outlook à l'aide de la liaison anticipée si vous le souhaitez. Early Binding accélère l'exécution du code, mais vous limite car l'utilisateur devrait avoir la même version de Microsoft Office sur son PC.
Cliquez sur le menu Outils et Références pour afficher la boîte de dialogue de référence.
Ajoutez une référence à la bibliothèque d'objets Microsoft Outlook pour la version d'Office que vous utilisez.
Vous pouvez ensuite modifier votre code pour utiliser directement ces références.
Un grand avantage de la liaison anticipée est la liste déroulante qui vous montre les objets disponibles à utiliser !
Envoi d'une seule feuille à partir du classeur actif
Pour envoyer une seule feuille, vous devez d'abord créer un nouveau classeur à partir du classeur existant contenant uniquement cette feuille, puis envoyer cette feuille.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | Fonction SendActiveWorksheet(strTo As String, strSubject As String, Optionnel strCC As String, Optionnel strBody As String) As BooleanEn cas d'erreur GoTo hein'déclarer les variables pour contenir les objets requisDim wbDestination comme classeurDim strDestName en tant que chaîneDim wbSource en tant que classeurDim wsSource en tant que feuille de calculDim OutApp en tant qu'objetEstomper OutMail en tant qu'objetDim strTempName en tant que chaîneDim strTempPath en tant que chaîne'créer d'abord le classeur de destinationDéfinir wbDestination = Workbooks.AddstrDestName = wbDestination.Nom'définir le classeur et la feuille sourceDéfinir wbSource = ActiveWorkbookDéfinir wsSource = wbSource.ActiveSheet'copier la feuille active dans le nouveau classeurwsSource.Copy After :=Workbooks(strDestName).Sheets(1)'enregistrer avec un nom temporairestrTempPath = Environ$("temp") & "\"strTempName = "Liste obtenue à partir de " & wbSource.Name & ".xlsx"Avec wbDestination.SaveAs strTempPath & strTempName'maintenant envoyer le classeur de destination par e-mailDéfinir OutApp = CreateObject("Outlook.Application")Définir OutMail = OutApp.CreateItem(0)Avec OutMail.To = strTo.Sujet = strSujet.Body = strBody.Attachments.Add wbDestination.FullName'utiliser envoyer pour envoyer immédiatement ou afficher pour afficher à l'écran.Afficher 'ou .AfficherTerminer par.Fermer FauxTerminer par'supprimer le classeur temporaire que vous avez joint à votre courrierTuer strTempPath & strTempName'nettoyer les objets pour libérer la mémoireDéfinir wbDestination = RienDéfinir wbSource = RienDéfinir wsSource = RienDéfinir OutMail = RienDéfinir OutApp = RienFonction de sortieeuh :MsgBox Err.DescriptionFonction de fin |
et pour exécuter cette fonction, nous pouvons créer la procédure suivante
12345678910111213 | Sous SendSheetMail()Dim strTo As StringDim strSubject As StringDim strBody en tant que chaînestrTo = "[email protected]"strSubject = "Veuillez trouver le dossier financier en pièce jointe"strBody = "du texte va ici pour le corps de l'e-mail"Si SendActiveWorksheet(strTo, strSubject, , strBody) = True ThenMsgBox "Réussite de la création de l'e-mail"AutreMsgBox "La création de l'e-mail a échoué !"Fin siFin du sous-marin |