IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

Utilisation de la boîte de dialogue "Vérification de noms" [OL-2007]


Sujet :

VBA Outlook

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 21
    Points
    21
    Par défaut Utilisation de la boîte de dialogue "Vérification de noms"
    Bonjour,

    Je ne savais pas trop où poster ce message car je souhaiterai utiliser une fonctionnalité Outlook dans une macro Excel.

    J'ai créé un outil Excel où je souhaite à un moment donné pouvoir rapprocher des données saisies d'une adresse présente dans la liste globale d'adresse Exchange.

    J'ai donc créé une fonction permettant de "résoudre" la chaîne saisie et récupérer le nom et le prénom présent dans Exchange. Cela marche très bien quand une seule adresse est retournée avec la chaine envoyé cependant, lorsque la fonction Resolve ne fonctionne pas, je souhaiterai pouvoir afficher la fenêtre vérification des noms afin que l'utilisateur puisse choisir le meilleur nom.

    J'ai recherché sur ce forum et d'autres et je ne trouve pas la solution.

    Voici le code de la fonction :
    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
    Public Function ResolutionOutlook(ByVal pName As String) As String
        Dim vOutlook As Outlook.Application             ' Attention la référence à Outlook doit être faite
        Dim vNs As Outlook.Namespace                    ' Namespace
        Dim r As Outlook.Recipient
        Dim vContact As Outlook.ExchangeUser
     
        ResolutionOutlook = pName
     
        Set vOutlook = CreateObject("Outlook.Application")
        Set vNs = vOutlook.GetNamespace("MAPI")
        Set r = vNs.CreateRecipient(pName)
     
        r.Resolve
     
        If r.Resolved Then
            If r.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
                Set vContact = r.AddressEntry.GetExchangeUser
                ResolutionOutlook = vContact.FirstName & " " & vContact.LastName
            End If
        Else
            'afficher la fenetre "Vérification des noms"
            'Dim snd As Outlook.SelectNamesDialog <== Pas la bonne solution 
        End If
    End Function
    Et la fenetre que j'aimerai afficher !
    Nom : Vérificaion des noms.png
Affichages : 449
Taille : 30,6 Ko

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    esssaye avec cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    oMsg.Display
    oMsg.GetInspector.CommandBars.ExecuteMso ("CheckNames")

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 21
    Points
    21
    Par défaut
    Malheureusement, j'exécute le code à partir d'Excel et aucun eMail n'est créé. Je ne peux donc pas "cliquer" sur le bouton d'un MailItem.

    De plus, j'aimerai pouvoir récupérer le résultat de la fenêtre !

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Tu ne pourras pas récupérer le résultat (ormis la mise à jour de ton recipient)
    Il faut à mon avis que tu gères cela dans un userform PERSO

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 21
    Points
    21
    Par défaut
    Pour ceux que ça intéresse, j'ai finalement trouvé la solution. Il existe une fonction Application.GetAddress intégrée dans Word qui permet de faire ça (http://msdn.microsoft.com/en-us/libr...ice.14%29.aspx).

    Le code à ajouter est le suivant (on doit malheureusement créer un objet word uniquement pour utiliser cette fonction):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'ajouter la référence à Microsoft Word xx.x library au projet (Outils >> Références...). 
    'afficher la fenetre "Vérification des noms" (possible uniquement à partir de Word ...)
            Set objWord = CreateObject("Word.Application")
     
            strAddress = objWord.GetAddress(Name:=pName, CheckNamesDialog:=True, AddressProperties:="<PR_GIVEN_NAME> <PR_SURNAME>")
     
            objWord.Quit

    Ci-dessous une fonction qui mixe Outlook et Word (Outlook étant + souvent déjà ouvert sur le poste, c'est la méthode la plus rapide)

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Public Function ResolutionOutlook(ByVal pName As String) As String
        Dim vOutlook As Outlook.Application             ' Attention la référence à Outlook doit être faite
        Dim vNs As Outlook.Namespace                    ' Namespace
        Dim r As Outlook.Recipient
        Dim vContact As Outlook.ExchangeUser
        Dim objWord As Word.Application
        Dim strAddress As String
     
     
        On Error GoTo ResolutionOutlook_Error
     
        ResolutionOutlook = pName
     
        Set vOutlook = CreateObject("Outlook.Application")
        Set vNs = vOutlook.GetNamespace("MAPI")
        'Création d'un "recipient" Outlook avec le nom passé en paramètre
        Set r = vNs.CreateRecipient(pName)
        'Résolution du nom par rapport aux carnets d'adresses Outlook
        r.Resolve
     
        If r.Resolved Then
            'Si le contact a été trouvé et qu'il est dans la Liste d'Adresses Globale, récupération du prénom et du nom
            If r.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
                Set vContact = r.AddressEntry.GetExchangeUser
                ResolutionOutlook = vContact.FirstName & " " & vContact.LastName
            End If
        Else
            'afficher la fenetre "Vérification des noms" (possible uniquement à partir de Word ...)
            Set objWord = CreateObject("Word.Application")
     
            strAddress = objWord.GetAddress(Name:=pName, CheckNamesDialog:=True, AddressProperties:="<PR_GIVEN_NAME> <PR_SURNAME>")
     
            objWord.Quit
     
            If strAddress <> "" Then ResolutionOutlook = strAddress
     
        End If
     
        Set objWord = Nothing
        Set vOutlook = Nothing
        Set vNs = Nothing
        Set r = Nothing
        Set vContact = Nothing
     
        On Error GoTo 0
        Exit Function
     
    ResolutionOutlook_Error:
     
        If Not (objWord Is Nothing) Then objWord.Quit
     
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/05/2014, 09h58
  2. Réponses: 0
    Dernier message: 07/03/2012, 16h28
  3. Réponses: 1
    Dernier message: 20/06/2011, 17h22
  4. Réponses: 14
    Dernier message: 12/06/2011, 20h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo