Obtenir une instance d'Outlook et s'y connecter

Cette rubrique montre comment obtenir un objet Application qui représente une instance active d’Outlook, s’il y en a une qui s’exécute sur l’ordinateur local, ou créer une nouvelle instance d’Outlook, se connecter au profil par défaut et retourner cette instance d’Outlook.

Helmut Obertanner a fourni les exemples de code suivants. Helmut Obertanner, élu MVP Microsoft Professionel, possède une expertise des outils de développement Microsoft Visual Studio et Microsoft Office Outlook.

Les exemples de code managé suivants sont écrits dans C# et Visual Basic. Pour exécuter un exemple de code managé .NET Framework qui doit appeler un modèle COM (Component Object Model), vous devez utiliser un assembly d’interopérabilité qui définit et mappe des interfaces managées avec des objets COM dans la bibliothèque de types de modèle objet.

Pour Outlook, vous pouvez utiliser Visual Studio et l’assembly d’interopérabilité de base (PIA) d’Outlook. Avant d’exécuter des exemples de code managé pour Outlook 2013, assurez-vous que vous avez installé le PIA d’Outlook 2013 et que vous avez ajouté une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 dans Visual Studio.

Vous devez utiliser les exemples de code suivants dans la ThisAddIn classe d’un complément Outlook (à l’aide des outils de développement Office pour Visual Studio). L'objet Application dans le code doit être un objet Application Outlook approuvé fourni par ThisAddIn.Globals. Pour plus d’informations sur l’utilisation de l’assembly PIA Outlook pour développer des solutions Outlook managées, consultez bienvenue dans la référence de l’assembly d’interopérabilité principal Outlook sur MSDN.

Les exemples de code suivants contiennent la GetApplicationObject méthode de la Sample classe, implémentée dans le cadre d’un projet de complément Outlook. Chaque projet ajoute une référence à l'assembly PIA d'Outlook en fonction de l'espace de noms Microsoft.Office.Interop.Outlook.

La GetApplicationObject méthode utilise des classes dans la bibliothèque de classes .NET Framework pour vérifier et obtenir tout processus Outlook en cours d’exécution sur l’ordinateur local. Il utilise d’abord la méthode GetProcessesByName de la classe Process dans l’espace de noms System.Diagnostics pour obtenir un tableau de composants de processus sur l’ordinateur local qui partagent le nom de processus « OUTLOOK ».

Pour vérifier si le tableau contient au moins un processus Outlook, GetApplicationObject utilise une requête LINQ (Microsoft Language Integrated Query). La classe Enumerable dans l’espace de noms System.Linq fournit un ensemble de méthodes, y compris la méthode Count, qui implémentent l’interface générique IEnumerable(T).

Étant donné que la classe Array implémente l’interface IEnumerable(T),GetApplicationObject peut appliquer la méthode Count au tableau retourné par GetProcessesByName pour voir si un processus Outlook est en cours d’exécution. Si tel est le cas, GetApplicationObject utilise la méthode GetActiveObject de la classe Marshal dans l’espace de noms System.Runtime.InteropServices pour obtenir cette instance d’Outlook, et convertit cet objet en objet Application Outlook.

Si Outlook n'est pas en cours d'exécution sur l'ordinateur local, GetApplicationObject crée une instance d'Outlook, utilise la méthode Logon de l'objet NameSpace pour se connecter au profil par défaut, puis renvoie cette nouvelle instance d'Outlook.

L'exemple de code suivant est écrit en C#.

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Reflection; 
using System.Runtime.InteropServices; 
using Outlook = Microsoft.Office.Interop.Outlook; 
 
namespace OutlookAddIn1 
{ 
    class Sample 
    { 
        Outlook.Application GetApplicationObject() 
        { 
 
            Outlook.Application application = null; 
 
            // Check if there is an Outlook process running. 
            if (Process.GetProcessesByName("OUTLOOK").Count() > 0) 
            { 
 
                // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. 
                application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 
            } 
            else 
            { 
 
                // If not, create a new instance of Outlook and log on to the default profile. 
                application = new Outlook.Application(); 
                Outlook.NameSpace nameSpace = application.GetNamespace("MAPI"); 
                nameSpace.Logon("", "", Missing.Value, Missing.Value); 
                nameSpace = null; 
            } 
 
            // Return the Outlook Application object. 
            return application; 
        } 
 
    } 
}

L'exemple de code suivant est écrit en Visual Basic.

Imports System.Diagnostics 
Imports System.Linq 
Imports System.Reflection 
Imports System.Runtime.InteropServices 
Imports Outlook = Microsoft.Office.Interop.Outlook 
 
Namespace OutlookAddIn2 
    Class Sample 
 
        Function GetApplicationObject() As Outlook.Application 
 
            Dim application As Outlook.Application 
 
            Check if there is an Outlook process running. 
            If Process.GetProcessesByName("OUTLOOK").Count() > 0 Then 
 
                ' If so, use the GetActiveObject method to obtain the process and cast it to an Application object. 
                application = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application) 
            Else 
 
                ' If not, create a new instance of Outlook and log on to the default profile. 
                application = New Outlook.Application() 
                Dim ns As Outlook.NameSpace = application.GetNamespace("MAPI") 
                ns.Logon("", "", Missing.Value, Missing.Value) 
                ns = Nothing 
            End If 
 
            ' Return the Outlook Application object. 
            Return application 
        End Function 
 
    End Class 
End Namespace

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.