Easy-Micro

ESPACEMEMBRE VBA
Outlook et VBA

Envoyer un message Outlook depuis Excel

Pour avoir accès aux objets d'une autre application, donc pour manipuler les informations du serveur, on doit référencer sa bibliothèque d'objets (un fichier .olb) via le menu Outils / Références de l'éditeur VBA. Ce menu est la liste des serveurs OLE enregistrés dans la base de registre de Windows.

VBA La technologie Automation

Automation, appelée également OLE (Object Linking and Embedding) ou OLE Automation, est une technologie qui permet de manipuler les objets d'une autre application directement à partir d'Excel. Pour utiliser la technologie Automation, on doit définir dans le code VBA une variable objet associée aux objets de type application.

Pour réaliser notre exemple (Envoyer un message Outlook depuis une liste d'adresse Excel), il faut d'abord sélectionner une référence au module externe Access via le menu Outils / Références de l'éditeur VBA. On coche l'option Microsoft Outlook 12.0 Object Library (11.0 correspond à 2003, 12.0 pour 2007 et 14.0 pour 2010).

Sub proc_Envoyer_Un_Message()

' Déclaration
Dim monoutlook As Outlook.Application
Dim MonMail As MailItem

'Affectation
Set monoutlook = New Outlook.Application
Set MonMail = monoutlook.CreateItem(olMailItem)

'Traitement
MonMail.To = "titi@toto.fr"
MonMail.Subject = "Pour le test"
MonMail.Body = "Comment vas tu?"
'MonMail.Display 'Affiche le message (mode test)
MonMail.Send ' Envoie le message

monoutlook.Quit ' Quite l'instance d'Outlook

End Sub


VBA Liste de diffusion (Groupe)
Envoyer un message Outlook à plusieurs destinataires depuis une liste Excel
Une liste de 5 adresses mail est saisie dans la plage A1:A5 d'Excel

Sub proc_Envoyer_Message_a_plusieurs_destinataires()

' Déclaration
Dim monoutlook As Outlook.Application
Dim MonMail As MailItem

'Affectation
Set monoutlook = New Outlook.Application
Set MonMail = monoutlook.CreateItem(olMailItem)

Dim i As Integer
Dim mesadresses(4) As String
Dim mesautresadresses As String

' je récupère les adresses dans une variable tableau
For i = 0 To 4
mesadresses(i) = Range("A" & i + 1).Value
Next i

' Je concatène la variable tableau avec des ";"
mesautresadresses = Join(mesadresses, ";")

' j'envoie le tout
MonMail.To = mesautresadresses
MonMail.Subject = "Pour le test"
MonMail.Body = "Comment vas tu?"
MonMail.Display 'Affiche le message (mode test)
MonMail.Send ' Envoie le message

monoutlook.Quit ' Quite l'instance d'Outlook

' Vide les variables (facultatif)
Set MonMail = Nothing
Set monoutlook = Nothing

End Sub

VBA Autre technique quasi-identique : la boucle FOR NEXT englobe l'envoie

Sub proc_Envoyer_Plusieurs_Message_Avec_Outlook()

Dim monoutlook As Outlook.Application
Dim MonMail As MailItem

Set monoutlook = New Outlook.Application

Dim i As Integer
Dim mesadresses(3) As String

' je rajoute un fichier joint
MonMail.Attachments.Add ("C:\Documents and Settings\Administrateur\Mes documents\test_fj.xls")

' je récupère les adresses dans une variable tableau
For i = 1 To 3
' Un Message par adresse :
Set MonMail = monoutlook.CreateItem(olMailItem)
mesadresses(i) = Range("A" & i).Value
MonMail.To = mesadresses(i)
MonMail.Subject = "Pour le test"
MonMail.Body = "Coucou"
MonMail.Display
Next i

'MonMail.Send ' Envoie le message

monoutlook.Quit ' Quite l'instance d'Outlook

End Sub

VBA Chargement dynamique de librairie (menu Outils / Références)

Pour récupérer dynamiquement une bibliothèque d'objets (un fichier .olb), on utilise la méthode AddFromFile de l'objet ThisWorkbook. L'utilisation de cet objet nécessite d'avoir coché l'option "Faire confiance au projet Visual Basic" du menu Excel "Outils / Macro / Sécurité" (onglet Dévellopeur sous Excel 2007). De plus, il est conseillé d'utiliser cet objet dans une procédure dédiée.

Sub proc_charge_references_librairie()
' Récupère la librairie Outlook (menu Outils / Références...)

ThisWorkbook.VBProject.References.AddFromFile _
Filename:="C:\Program Files\Microsoft Office\OFFICE11\MSOUTL.OLB"
End Sub



< Page précédente VBA Page suivante >