Bonjour,

Je suis actuellement en train de créer une macro sous Excel qui me permet de retrouver des informations dans mon carnet d'adresses Exchange (Carnet d'adresses global).
J'ai une liste d'utilisateur (noms et prénoms) pour qui je dois retrouver le champs Company du carnet d'adresses. Pour effectuer cette recherche, j'ai trouvé la référence Microsoft CDO 1.21 Library.
J'arrive donc à parcourir le carnet d'adresses global grâce à cette librairie et aux objets MAPI.Session, MAPI.addressList, MAPI.addressEntries, MAPI.AddressEntry.
(Il m'est d'ailleurs impossible de nommer correctement AddressList et AddressEntries, l'éditeur me remplaçant obligatoirement le a majuscule par une minuscule. Néanmoins, je ne pense pas que cela pose problème.)

Le problème, c'est qu'en parcourant mon annuaire Exchange, j'accède aux champs de l'objet MAPI.AddressEntry CdoPR_SURNAME, CdoPR_GIVEN_NAME et CdoPR_COMPANY_NAME, qui lorsqu'ils sont vides me provoquent cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Collaboration Data Objects - [MAPI_E_NOT_FOUND(8004010F)]]
J'ai beau ajouter un "gestionnaire d'erreur" pour zapper les entrées du carnet d'adresses qui me provoqueraient cette erreur (puisque inutiles), tôt ou tard, le message d'erreur s'affiche et la macro ne peut pas continuer sans mon intervention. Le plus bizarre est que le gestionnaire d'erreur marche la première fois (affichage du msg d'erreur dans ma fenêtre Debug) mais pas tout le temps, comme si le Err.Clear où le On Error GoTo n'avaient aucun effet.

Voici un exemple simplifié qui provoque l'erreur :
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
 
Dim objSession As MAPI.Session
Dim oFolder As MAPI.addressList
Dim addresses As MAPI.addressEntries
Dim oMessage As MAPI.AddressEntry
 
'Création de l'objet Session
Set objSession = CreateObject("MAPI.Session")
 
'Récupération du carnet d'adresses global
With objSession
    .Logon , , False, False
    Set oFolder = .GetAddressList(CdoAddressListGAL)
End With
Set addresses = oFolder.addressEntries
 
For Each oMessage In addresses
    'Gestionnaire d'erreur "jetable" puisque fonctionnant une seule fois...
    On Error GoTo SkipEntry
 
    'L'erreur est provoquée ici lorsque le champs CdoPR_SURNAME est manquant
    Debug.Print oMessage.Fields(CdoPR_SURNAME)
    Debug.Print oMessage.Fields(CdoPR_GIVEN_NAME)
    Debug.Print oMessage.Fields(CdoPR_COMPANY_NAME)
    GoTo SkipError
SkipEntry:
    Debug.Print Err.Description
    Err.Clear
SkipError:
Next
Je voudrais simplement inhiber cette erreur afin qu'elle ne me plante pas la macro. En effet, si un contact du carnet d'adresse n'a pas le champs CdoPR_SURNAME, il ne sera forcément pas dans ma liste. Ces contacts correspondent à des entités style "Accueil", "Secrétariat" et n'ont donc pas de prénom en général.

Merci d'avance pour votre aide.
Cdlmt