Bonjour,
Après plusieurs heures de recherche, je me décide a poser mon problème ici !
Dans le principe rien de très complexe, mais de la doc très dure à trouver car le sujet est précis
J'utilise un code VBA dans excel pour gérer l'envoie de mail grâce au carnet d'adresse Outlook. Plus exactement, je créé un MailItem, et j'ajoute un destinataire via son login (il existe 3 différents types d'identification : login, Display Name, ou adresse mail). Mon but est de récupérer l'adresse mail. Pour ce fait, j'ai implémenté le code suivant qui se lance en appuyant sur un bouton :
Ce code fonctionne très bien mais mon soucis est au niveau du "oEmail.Recipients.ResolveAll" dans le premier IF.
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 ' ' REMPLACE LE DISPLAY NAME PAR L'ADRESSE MAIL EN UTILISANT LE LOGIN ' (BOUTON) ' Sub Replace_displayName() 'Declarations Dim FL As Worksheet, NoCol As Integer, FirstLign As Integer, DerLign As Long, WriteCol As Integer Dim NoLign As Long Dim Loggin As String 'Link Outlook Dim oEmail, olMailItem Dim appOutLook As Object Set appOutLook = CreateObject("Outlook.Application") Set oEmail = appOutLook.CreateItem(olMailItem) ' --------------------------------- PARAMETRES ------------------------------------ Set FL = Worksheets("ACCESS") 'Feuille à traiter NoCol = 2 'Numéro de la colonne à lire FirstLign = 3 'Première ligne de data DerLign = Split(FL.UsedRange.Address, "$")(4) 'N° de la dernière ligne remplie WriteCol = 19 'N° de la colonne ou écrire ' ---------------------------------------------------------------------------------------- ' CODE : inscrit dans la colone ciblé le mail de la personne. For NoLign = FirstLign To DerLign Loggin = FL.Cells(NoLign, NoCol) oEmail.To = Loggin If (oEmail.Recipients.ResolveAll) Then FL.Cells(NoLign, WriteCol) = oEmail.Recipients(1).AddressEntry.GetExchangeUser.PrimarySmtpAddress End If Next End Sub
Après analyse du problème et recherche dans la BD, j'ai remarqué que certain logins sont prefixe d'autre logins.
Je m'explique par un exemple : un login 1 sera "abc00001" et un autre sera "abc000010". Le premier est une sous chaine du 2e.
Quand ce cas se présente, le ResolveAll ne se résous pas et renvoie False. Pour vous donner une idée, sur 4500 lignes, ça en représente 1400 qui ne se résolvent pas.
J'ai pensé passer par le display name mais impossible car il existe malheureusement des personnes ayant le même display name mais une adresse mail différente (je travaille dans une grosse boite ... y a des homonymes), et ça ne dépend pas de moi.
Pour moi il faudrait forcer le ResolveAll a faire une recherche stricte, mais je n'ai pas trouvé comment faire ça.
Voilà, un problème a première vue tout simple mais assez précis et pointu, et surtout mal documenté (ou alors je ne sais pas chercher, c'est pas impossible ) surtout que c'est en lien avec la gestion de mails... Bref !
Merci par avance du temps que vous consacrerez à répondre si vous avez une idée !
Kathary
Partager