Bonjour,
Voici mon problème : j'ai une fonction qui me permet de automatiquement vérifier si a un identifiant correspond une adresse mail. Cette fonction va ensuite afficher le Display name dans un champs. Cependant, je voudrais afficher l'adresse complète à la place.

Voici la fonction en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
Sub checkEmail()
 
    Dim appOutLook As Object
    Dim olContactItem, olMailItem
    Dim myItem, oEmail
 
    Set appOutLook = CreateObject("Outlook.Application")
    Set oEmail = appOutLook.CreateItem(olMailItem)
 
    oEmail.To = Dlg.Txt_Email.Value
    If (oEmail.Recipients.ResolveAll) Then
        Dlg.Txt_Email = oEmail.To
        Dlg.CheckEmailButton.Caption = "check OK"
        Dlg.CheckEmailButton.ForeColor = &HC000&
    Else
        oEmail.To = Dlg.Liste_login.Value
        If (oEmail.Recipients.ResolveAll) Then
            Dlg.Txt_Email = oEmail.To
            Dlg.CheckEmailButton.Caption = "check OK"
            Dlg.CheckEmailButton.ForeColor = &HC000&
        Else
            oEmail.To = Dlg.Txt_Nom & ", " & Dlg.Txt_Prenom
            If (oEmail.Recipients.ResolveAll) Then
                Dlg.Txt_Email = oEmail.To
                Dlg.CheckEmailButton.Caption = "check OK"
                Dlg.CheckEmailButton.ForeColor = &HC000&
            Else
                Dlg.CheckEmailButton.Caption = "check KO"
                Dlg.CheckEmailButton.ForeColor = &HFF&
            End If
        End If
    End If
 
End Sub
La ligne qui m'intéresse est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Dlg.Txt_Email = oEmail.To
C'est celle la qui va chercher le display name de l'objet Outlook pour remplir le champ Dlg.
J'ai lu pas mal de doc, et j'ai essayé quelque chose dans le style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Dlg.Txt_Email = oEmail.Recipients(1).Address
ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Dlg.Txt_Email = oEmail.Recipients(oEmail.To).Address
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Dlg.Txt_Email = oEmail.Recipients(oEmail.To).AddressEntry
Mais dans le 1e et 2e cas ça me renvoi un truc dans le genre :
/o=HMR/ou=Exchange Administrative Group (XXXXXXXXXXXX)/cn=Recipients/cn=userxxxxxx (j'ai volontairement mis des X a la place des valeurs)
et dans le 3e cas, le display name et non l'adresse mail

Si vous avez la solution, vous m’épargnerai des heures supplémentaires de recherche infructueuses, j'ai déjà passé des heures sur la doc à tester plein de solutions qui pour moi devrais fonctionner mais ....

J'ai cru trouver la solution avec ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Function RetrouveAdress(stAddress As String) As String
    Dim oNSP As Outlook.Namespace
    Dim oRec As Outlook.Recipient
    Dim oExUser As Outlook.ExchangeUser
    Set oNSP = Application.GetNamespace("MAPI")
    Set oRec = oNSP.CreateRecipient(stAddress)
    Set oExUser = oRec.AddressEntry.GetExchangeUser()
    RetrouveAdress = oExUser.PrimarySmtpAddress
    Set oNSP = Nothing
    Set oRec = Nothing
    Set oExUser = Nothing
End Function
que j'ai trouvé sur un autre post en rapport avec le mien, mais les fonctions utilisés sont pour excel 2013 ou + ... je suis sous 2010

Merci d'avance

Kathary

edit : pour apporter plus de précisions sur le contexte : cette fonction est lancé a chaque fois qu'on entre un caractère dans le champ spécifié avant le 1e "if". Le but est de transformer un identifiant en destinataire d'un mail. Un mail peut être envoyé avec le display name cependant a cause de problèmes d'alias et de plusieurs display name identiques pour une adresse différente, je cherche à afficher l'adresse mail à la place.