La boîte à Tutoriels de Christopher PECAUD

Créer et Envoyer un mail dans Excel avec un script VBA

Laisser un commentaire

SOMMAIRE

I Introduction
II Préparation de la feuille de calcul
III Création de la macro IV Code de la macro
IV Conclusion

I Introduction

Dans ce tutoriel, je vais vous montrer comment importer des données de contact issues d’une feuille de calcul Excel dans Outlook en utilisant une macro VBA.

Nous verrons comment créer un nouveau dossier de contact et comment y intégrer les nouveaux contacts.

II Préparation de la feuille de calcul

Nous devons dans un premier temps remplir notre feuille de calcul avec quelques informations de contact.

Pour cet exemple nous allons nous appuyer sur ces types d’informations :

  • Le nom du contact ;
  • Le prénom du contact ;
  • Le numéro de téléphone du contact ;
  • L’adresse email du contact ;
  • Le nom de la société du contact.

Pour l’exemple j’ai rempli la feuille de calcul avec ces informations.

description image

La tâche suivante consiste à créer une nouvelle macro qui va nous permettre d’exploiter ces données.

III Création de la macro

Pour créer la macro il suffit de de se rendre dans l’onglet « Développeur » et de cliquer sur le bouton « Macros ».

Dans la nouvelle page qui s’affiche à l’écran, il faut appuyer sur le bouton « Créer ».

description image

La page d’édition de texte s’affiche alors à l’écran.

Avant de pouvoir commencer il faut installer la référence qui va nous permettre d’utiliser l’Objet Outlook au sein de notre macro Excel.

Pour ce faire il suffit de cliquer sur le menu « Outils » et choisir la commande « Références ».

Dans la fenêtre qui s’ouvre il faut chercher la référence « Microsoft Outlook 16.0 Object Library » et valider en cliquant sur le bouton « OK ».

description image

Nous sommes maintenant prêts pour analyser le code de la macro.

IV Code de la macro

Tout d’abord nous allons définir quelques variables utiles pour notre macro.

Outre les variables permettant d’initialiser les traditionnels objets Classeur et Feuille de calcul Excel. Nous avons besoin :

  • D’une variable permettant d’initialiser l’objet Outlook ;
  • D’une variable permettant de créer un objet espace de nom Outlook ;
  • D’une variable permettant de créer une instance d’objet Dossier afin de créer un nouveau dossier « Excel Contacts » ;
  • D’une variable permettant de créer un contact Outlook ;
  • Et une variable DerLig permettant de désigner la dernière ligne non vide du tableau.

Voici la partie de code correspondante

‘Déclaration Variable représentant l'objet Classeur
 Dim oWB As Workbook
 'Déclaration variable représentant l'objet feuille de calcul
 Dim oWS As Worksheet
 
'Déclaration Variable représentant un objet espace de nom Outlook
Dim oNamespace As Outlook.Namespace
'Déclaration variable représentant un nouvel objet Dossier de contacts Outlook
Dim oExcelFolder As Folder
‘Déclaration variable représentant notre nouveau dossier de contacts     
Dim myContacts As Folder
'Déclaration Variables nous permettant de gérer les lignes non vides du tableau
Dim i, DerLig As Integer
'Variable représentant un nouveau contact Outlook
Dim contact As ContactItem

La tâche suivante consiste à définir le Classeur actif et la feuille de calcul active voici la portion de code permettant de réaliser cette opération :

'Assignation de la feuille de calcul active à la variable oWS
Set oWS = oWB.ActiveSheet 

L’opération suivante permet d’initialiser notre objet Outlook :

'Initialisation de l'objet Outlook
Set myOutlookApp = CreateObject("Outlook.Application")

Il nous faut ensuite créer l’objet espace de nom Outlook :

'Initialisation de l'espace de nom Outlook
Set oNamespace = myOutlookApp.GetNamespace("MAPI")

Ensuite on se place dans le dossier courant qui se nomme normalement « Mes Contacts » :

''Assignation du dossier Mes Contacts comme dossier courant en utilisant la propriété CurrentFolder de l’objet ActiveExplorer.
Set myContacts = myOutlookApp.ActiveExplorer.CurrentFolder

Ensuite crée notre nouveau dossier de contacts en utilisant la méthode Add de l’objet Folders

'Création d'un nouveau dossier appelé Excel Contacts
myContacts.Folders.Add ("Excel Contacts")

Puis on donne le focus à ce dossier nouvellement créé en utilisant le tableau de dossiers et en sélectionnant celui que nous venons de créer.

'Focus donné au dossier nouvellement créé
Set oExcelFolder = myContacts.Folders("Excel Contacts")

Nous allons maintenant créer un objet contact pour chaque ligne du tableau Excel non vide.

Donc on crée une boucle permettant de balayer les lignes du tableau :

For LineNumber = 2 To Rows.Count
…
Next

Le problème est que cette boucle va prendre en compte aussi les lignes vides, ce que nous ne voulons pas bien sûr.

Il faut donc trouver un moyen de résoudre ce problème. Pour ce faire on utilise une propriété d’Excel qui va nous permettre d’effectuer ce travail qui est End et qui fonction sur un objet Range :

'La variable Derlig permet de savoir quelle est la dernière ligne non vide. Ensuite on utilise un test if Then Else pour la création des contacts. Lorsque la première ligne vide est rencontrée on stoppe la boucle :

DerLig = oWS.Range("A1").End(xlDown).Row 
If LineNumber <= DerLig Then
	‘Création des contacts
Else: Exit For
	‘Ne rien faire
End If

Nous parcourons donc le tableau jusqu’à la dernière ligne non vide. Comme cela nous sommes sûr que des contacts vides ne seront pas créés.

A l’intérieur de la boucle il nous suffit de créer un objet Contact qui sera utilisé pour sauvegarder les différentes informations de contact issues de chaque ligne de notre tableau.

Nous utilisons la méthode Add de l’objet Items. Nous ajoutons un élément de type contact Outlook donc il nous faut utiliser la propriété olContactItem.

'création d'un objet contact
Set contact = oExcelFolder.Items.Add(olContactItem)

Nous devons sauvegarder les différentes informations proposées dans le tableau en utilisant les propriétés suivantes de l’objet Contact :

  • FirstName pour le prénom ;
  • LastName pour le nom ;
  • BusinessTelephoneNumber pour le numéro de téléphone ;
  • Emailaddress pour l’adresse email du contact ;
  • CompanyName pour le nom de la société du contact.

Pour enregistrer le contact dans le dossier « Excel Contact » il suffit d’utiliser la méthode Save.

Voici le code correspondant :


contact.FirstName = Cells(LineNumber, 1)
contact.LastName = Cells(LineNumber, 2)
contact.BusinessTelephoneNumber = Cells(LineNumber, 3)
contact.Email1Address = Cells(LineNumber, 4)
contact.Email1DisplayName = FirstName & " " & LastName
contact.CompanyName = Cells(LineNumber, 5)
contact.Save

On oublie pas de supprimer l’objet contact après chaque création pour libérer la mémoire :

Set contact = Nothing

On fera de même en fin de macro pour les autres objets initialisés dans la macro :


Set oExcelFolder = Nothing
Set myContacts = Nothing
Set myOutlookApp = Nothing

Voici le code complet de la macro :


Sub ExportOutlook()
	Dim myOutlookApp As Outlook.Application

	'Déclaration Variable représentant l'objet Classeur
	Dim oWB As Workbook

	'Déclaration Variable représentant l'objet feuille de calcul
	Dim oWS As Worksheet

	'Déclaration Variable représentant un objet espace de nom Outlook
	Dim oNamespace As Outlook.Namespace

	'Déclaration variable représenatant un nouvel objet Dossier de contacts Outlook
	Dim oExcelFolder As Folder

	Dim myContacts As Folder

	'Déclaration Variables nous permettant de gérer les lignes non vides du tableau
	Dim i, DerLig As Integer

	'Déclaration Variable représentant un nouveau contact Outlook
	Dim contact As ContactItem

	'Assignation du classeur ouvert à la variable oWb
	Set oWB = ActiveWorkbook

	'Asignation de la feuille de calcul active à la variable oWS
 	Set oWS = oWB.ActiveSheet

	'Initialisation de l'objet Outlook
	Set myOutlookApp = CreateObject("Outlook.Application")

	'Initialisation de l'espace de nom Outlook
	Set oNamespace = myOutlookApp.GetNamespace("MAPI")

	'Assignation du dossier Mes Contacts comme dossier courant
	Set myContacts = myOutlookApp.ActiveExplorer.CurrentFolder

	'Création d'un nouveau dossier appelé Excel Contacts
	myContacts.Folders.Add ("Excel Contacts")

	'Focus donné au dossier nouvellement créé
	Set oExcelFolder = myContacts.Folders("Excel Contacts")

	'on travaille avec l'objet Classeur
	With oWB
	   For LineNumber = 2 To Rows.Count
	
           'La variable Derlig permet de savoir quelle est la dernière ligne non vide

            DerLig = oWS.Range("A1").End(xlDown).Row
            
	   If LineNumber <= DerLig Then

                'création d'un objet contact
                Set contact = oExcelFolder.Items.Add(olContactItem)
                'Récupération des données d'une ligne et assignation des valeurs aux propriétés correspondantes de l'objet Contact

                contact.FirstName = Cells(LineNumber, 1)
                contact.LastName = Cells(LineNumber, 2)

                contact.BusinessTelephoneNumber = Cells(LineNumber, 3)
                contact.Email1Address = Cells(LineNumber, 4)

                contact.Email1DisplayName = FirstName & " " & LastName

                contact.CompanyName = Cells(LineNumber, 5)
                'Sauvegarde du nouveau contact dans le dossier nouvellement créé
                contact.Save
            Else: Exit For

            End If
            'Suppression de l'objet contact

            Set contact = Nothing
        Next
    End With

    'Suppression des autres objets créés

    Set oExcelFolder = Nothing
    Set myContacts = Nothing
    Set myOutlookApp = Nothing

End Sub

V Conclusion

Nous avons vu à travers ce tutoriel deux méthodes nous permettant de créer un template d'email à partir de données issues des cellules d’un classeur Excel.

Nous avons vu par l’intermédiaire de ce tutoriel qu’il est finalement assez simple de réaliser des échanges de données de contacts entre Excel et Outlook.

blog comments powered by Disqus