Skip to content
Learni
View all tutorials
Programmation

Comment automatiser Outlook avec VBA avancé en 2026

Introduction

L'automatisation d'Outlook via VBA permet de gagner un temps considérable sur les tâches répétitives. En 2026, les macros avancées intègrent la gestion des erreurs, le late binding et l'interaction avec le calendrier. Ce tutoriel vous guide pas à pas pour créer des solutions robustes et professionnelles.

Prérequis

  • Microsoft Outlook 365 ou 2021+
  • Accès à l'éditeur VBA (Alt+F11)
  • Connaissances de base en programmation objet
  • Permissions administrateur pour les macros

Configuration Late Binding

Module1.bas
Option Explicit

Sub ConfigurerLateBinding()
    Dim olApp As Object
    Dim olNS As Object
    
    On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If olApp Is Nothing Then
        Set olApp = CreateObject("Outlook.Application")
    End If
    Set olNS = olApp.GetNamespace("MAPI")
    MsgBox "Connexion Outlook réussie ! Version : " & olApp.Version
End Sub

Le late binding évite les références statiques et fonctionne sur tous les postes. On utilise GetObject pour réutiliser une instance existante d'Outlook, sinon CreateObject. La gestion d'erreur basique évite les plantages.

Création email avancé

Module2.bas
Sub CreerEmailAvance()
    Dim olApp As Object, olMail As Object
    Set olApp = GetObject(, "Outlook.Application")
    Set olMail = olApp.CreateItem(0)
    With olMail
        .To = "contact@exemple.com"
        .CC = "manager@exemple.com"
        .Subject = "Rapport automatique - " & Format(Date, "dd/mm/yyyy")
        .Body = "Bonjour,

Veuillez trouver ci-joint le rapport du jour."
        .Attachments.Add "C:\Rapports\rapport.pdf"
        .Send
    End With
End Sub

Ce code crée et envoie un email avec pièce jointe. Utilisez .Display au lieu de .Send pendant les tests. Toujours vérifier le chemin du fichier avant ajout.

Parcours dossiers et règles

Module3.bas
Sub ParcourirDossiers()
    Dim olNS As Object, olFolder As Object
    Dim olItem As Object, i As Long
    Set olNS = GetObject(, "Outlook.Application").GetNamespace("MAPI")
    Set olFolder = olNS.GetDefaultFolder(6) ' Inbox
    For i = olFolder.Items.Count To 1 Step -1
        Set olItem = olFolder.Items(i)
        If TypeName(olItem) = "MailItem" Then
            If InStr(olItem.Subject, "Facture") > 0 Then
                olItem.Move olNS.GetDefaultFolder(6).Folders("Factures")
            End If
        End If
    Next i
End Sub

On parcourt la boîte de réception à l'envers pour éviter les problèmes d'index. Le déplacement automatique vers un sous-dossier illustre la création de règles dynamiques.

Intégration calendrier

Module4.bas
Sub CreerRendezVous()
    Dim olApp As Object, olAppt As Object
    Set olApp = GetObject(, "Outlook.Application")
    Set olAppt = olApp.CreateItem(1)
    With olAppt
        .Subject = "Réunion client"
        .Start = Date + 1 + TimeValue("09:00:00")
        .End = .Start + TimeValue("01:00:00")
        .Location = "Salle Visio"
        .Body = "Préparer le contrat mis à jour."
        .ReminderSet = True
        .ReminderMinutesBeforeStart = 15
        .Save
    End With
End Sub

Création d'un rendez-vous avec rappel. Les propriétés Start et End acceptent des dates complètes. Toujours utiliser .Save plutôt que .Send pour les rendez-vous.

Gestion erreurs robuste

Module5.bas
Sub GestionErreursAvancee()
    Dim olApp As Object
    On Error GoTo GestionErreur
    Set olApp = GetObject(, "Outlook.Application")
    ' Code métier ici
    Exit Sub
GestionErreur:
    Select Case Err.Number
        Case 429
            MsgBox "Outlook n'est pas lancé."
        Case Else
            MsgBox "Erreur : " & Err.Description
    End Select
    Resume Next
End Sub

La gestion centralisée des erreurs avec Select Case permet de traiter les cas courants (Outlook fermé, permissions). Resume Next évite l'arrêt brutal du script.

Bonnes pratiques

  • Toujours utiliser le late binding pour la portabilité
  • Activer la gestion d'erreurs sur toutes les macros
  • Éviter les boucles sans limite sur les gros dossiers
  • Tester systématiquement avec .Display avant .Send
  • Documenter les macros avec des commentaires clairs

Erreurs courantes

  • Oublier de libérer les objets (Set = Nothing) provoque des fuites mémoire
  • Parcourir les items sans ordre inverse génère des erreurs d'index
  • Utiliser des références early binding bloque le code sur d'autres machines
  • Ne pas gérer les pièces jointes inexistantes provoque des crashes

Pour aller plus loin

Approfondissez vos compétences VBA avec nos formations complètes : https://learni-group.com/formations. Découvrez également les modules sur l'intégration Power Automate et les API Microsoft Graph.

Comment automatiser Outlook avec VBA avancé en 2026 | Learni