OVH Cloud OVH Cloud

VBA Sort sur un champ des contacts

6 réponses
Avatar
Ludovic
Bonjour,

Je souhaite obtenir une liste classée alphabétiquement de tous mes contacts
Outlook 2003 qui ont un numéro de téléphone pour leur mobile.

Ci-dessous une partie du code VBA employé :

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objContacts = objNS.GetDefaultFolder(olFolderContacts)
' Filtrage sur n° mobile
strCondition = "[MobileTelephoneNumber] <> vbNullString"
Set colItems = objContacts.Items.Restrict(strCondition)
colItems.Sort "[FullName]"
For Each objItem In colItems
Debug.Print objItem.FullName & " <" & objItem.MobileTelephoneNumber
& ">"
Next
.....

Mais gros problème : avec un filtre <> vbNullstring ce sont TOUS mes
contacts qui me sont envoyés et ce quelque soit le contenu du champ
MobilePhoneNumber.
Avec une condition = vbNullString, aucun contact n'est renvoyé
Par dépit et bien que ce champ semble être du type string, un essai avec > 0
me renvoie 30 contacts (ceux commençant par 06 ... mais pas les 33, ni les
+33, ni les autres non vides).

Au secours ... je patauge lamentablement.

Autre question annexe : je ne peux pas mettre une ligne du type :
colItems.SetColumns ("Fullname, MobileTelephoneNumber")
Elle me donne une erreur systématiquement.

Merci pour vos coups de main (ou de pied d'ailleurs).

--
Ludovic



--
Ludovic Rolland, ludovic.rolland@free.fr, Lyon, France

6 réponses

Avatar
JièL Goubert
Bonjoir© Ludovic

essayez ceci
strCondition = "[MobileTelephoneNumber] <> ''"
a la place de
strCondition = "[MobileTelephoneNumber] <> vbNullString"

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 01:26 vous avez écrit... :
Bonjour,

Je souhaite obtenir une liste classée alphabétiquement de tous mes contacts
Outlook 2003 qui ont un numéro de téléphone pour leur mobile.

Ci-dessous une partie du code VBA employé :

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objContacts = objNS.GetDefaultFolder(olFolderContacts)
' Filtrage sur n° mobile
strCondition = "[MobileTelephoneNumber] <> vbNullString"
Set colItems = objContacts.Items.Restrict(strCondition)
colItems.Sort "[FullName]"
For Each objItem In colItems
Debug.Print objItem.FullName & " <" & objItem.MobileTelephoneNumber
& ">"
Next
.....

Mais gros problème : avec un filtre <> vbNullstring ce sont TOUS mes
contacts qui me sont envoyés et ce quelque soit le contenu du champ
MobilePhoneNumber.
Avec une condition = vbNullString, aucun contact n'est renvoyé
Par dépit et bien que ce champ semble être du type string, un essai avec > 0
me renvoie 30 contacts (ceux commençant par 06 ... mais pas les 33, ni les
+33, ni les autres non vides).

Au secours ... je patauge lamentablement.

Autre question annexe : je ne peux pas mettre une ligne du type :
colItems.SetColumns ("Fullname, MobileTelephoneNumber")
Elle me donne une erreur systématiquement.

Merci pour vos coups de main (ou de pied d'ailleurs).



Avatar
Ludovic
Merci pour l'aide mais <> "" (donc 2 quottes) est impossible à écrire sous
VBA puisqu'il ajoute lui-même une 3° quotte (ce qui est logique).
On se retrouve donc avec 3 quottes : erreur d'exécution (impossible
d'analyser la condition. Erreur à <<">>) dans le restrict, mais logique
puisque la condition est en fait <> ".
On est donc obliger (basic oblige) d'écrire <> """"" ou <> """" " (donc 5
quottes) et là même résultat qu'avec vbnullstring, la totalité du carnet est
renvoyé.

Fais-je une erreur ?

"JièL Goubert" a écrit dans le
message de news: %
Bonjoir© Ludovic

essayez ceci
strCondition = "[MobileTelephoneNumber] <> ''"
a la place de
strCondition = "[MobileTelephoneNumber] <> vbNullString"

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 01:26 vous avez écrit... :
Bonjour,

Je souhaite obtenir une liste classée alphabétiquement de tous mes
contacts
Outlook 2003 qui ont un numéro de téléphone pour leur mobile.

Ci-dessous une partie du code VBA employé :

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objContacts = objNS.GetDefaultFolder(olFolderContacts)
' Filtrage sur n° mobile
strCondition = "[MobileTelephoneNumber] <> vbNullString"
Set colItems = objContacts.Items.Restrict(strCondition)
colItems.Sort "[FullName]"
For Each objItem In colItems
Debug.Print objItem.FullName & " <" &
objItem.MobileTelephoneNumber
& ">"
Next
.....

Mais gros problème : avec un filtre <> vbNullstring ce sont TOUS mes
contacts qui me sont envoyés et ce quelque soit le contenu du champ
MobilePhoneNumber.
Avec une condition = vbNullString, aucun contact n'est renvoyé
Par dépit et bien que ce champ semble être du type string, un essai avec
0
me renvoie 30 contacts (ceux commençant par 06 ... mais pas les 33, ni

les
+33, ni les autres non vides).

Au secours ... je patauge lamentablement.

Autre question annexe : je ne peux pas mettre une ligne du type :
colItems.SetColumns ("Fullname, MobileTelephoneNumber")
Elle me donne une erreur systématiquement.

Merci pour vos coups de main (ou de pied d'ailleurs).







Avatar
JièL Goubert
Bonjoir© Ludovic

alors essayez ceci (inspiré de l'aide)
Dim myOlApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myOlApp = CreateObject("Outlook.Application")
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts.Restrict("[MobileTelephoneNumber] <> ''")
For Each myItem In myItems
If (myItem.Class = olContact) Then
Debug.Print myItem.FullName & ": " & myItem.MobileTelephoneNumber
End If
Next

c'est mieux comme ça ? ;-)
Chez moi ça fonctionne en tout cas

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 12:23 vous avez écrit... :
Merci pour l'aide mais <> "" (donc 2 quottes) est impossible à écrire sous
VBA puisqu'il ajoute lui-même une 3° quotte (ce qui est logique).
On se retrouve donc avec 3 quottes : erreur d'exécution (impossible
d'analyser la condition. Erreur à <<">>) dans le restrict, mais logique
puisque la condition est en fait <> ".
On est donc obliger (basic oblige) d'écrire <> """"" ou <> """" " (donc 5
quottes) et là même résultat qu'avec vbnullstring, la totalité du carnet est
renvoyé.

Fais-je une erreur ?

"JièL Goubert" a écrit dans le
message de news: %
Bonjoir© Ludovic

essayez ceci
strCondition = "[MobileTelephoneNumber] <> ''"
a la place de
strCondition = "[MobileTelephoneNumber] <> vbNullString"

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 01:26 vous avez écrit... :
Bonjour,

Je souhaite obtenir une liste classée alphabétiquement de tous mes
contacts
Outlook 2003 qui ont un numéro de téléphone pour leur mobile.

Ci-dessous une partie du code VBA employé :

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objContacts = objNS.GetDefaultFolder(olFolderContacts)
' Filtrage sur n° mobile
strCondition = "[MobileTelephoneNumber] <> vbNullString"
Set colItems = objContacts.Items.Restrict(strCondition)
colItems.Sort "[FullName]"
For Each objItem In colItems
Debug.Print objItem.FullName & " <" &
objItem.MobileTelephoneNumber
& ">"
Next
.....

Mais gros problème : avec un filtre <> vbNullstring ce sont TOUS mes
contacts qui me sont envoyés et ce quelque soit le contenu du champ
MobilePhoneNumber.
Avec une condition = vbNullString, aucun contact n'est renvoyé
Par dépit et bien que ce champ semble être du type string, un essai avec
0
me renvoie 30 contacts (ceux commençant par 06 ... mais pas les 33, ni

les
+33, ni les autres non vides).

Au secours ... je patauge lamentablement.

Autre question annexe : je ne peux pas mettre une ligne du type :
colItems.SetColumns ("Fullname, MobileTelephoneNumber")
Elle me donne une erreur systématiquement.

Merci pour vos coups de main (ou de pied d'ailleurs).







--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr




Avatar
Ludovic
Et bien avec un copié/collé ... celà ne marche pas chez moi !!!!
J'ai toujours la totalité du carnet qui est renvoyé, et pour les 3/4, un
debug.print len(myItem.MobileTelephoneNumber) donne bien 0.

Comprend pas ... mais par acquit de conscience, la chaîne derrière <> est
bien simple quotte simple quotte double quotte ?

"JièL Goubert" a écrit dans le
message de news:
Bonjoir© Ludovic

alors essayez ceci (inspiré de l'aide)
Dim myOlApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myOlApp = CreateObject("Outlook.Application")
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts.Restrict("[MobileTelephoneNumber] <> ''")
For Each myItem In myItems
If (myItem.Class = olContact) Then
Debug.Print myItem.FullName & ": " & myItem.MobileTelephoneNumber
End If
Next

c'est mieux comme ça ? ;-)
Chez moi ça fonctionne en tout cas

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 12:23 vous avez écrit... :
Merci pour l'aide mais <> "" (donc 2 quottes) est impossible à écrire
sous VBA puisqu'il ajoute lui-même une 3° quotte (ce qui est logique).
On se retrouve donc avec 3 quottes : erreur d'exécution (impossible
d'analyser la condition. Erreur à <<">>) dans le restrict, mais logique
puisque la condition est en fait <> ".
On est donc obliger (basic oblige) d'écrire <> """"" ou <> """" " (donc 5
quottes) et là même résultat qu'avec vbnullstring, la totalité du carnet
est renvoyé.

Fais-je une erreur ?

"JièL Goubert" a écrit dans le
message de news: %
Bonjoir© Ludovic

essayez ceci
strCondition = "[MobileTelephoneNumber] <> ''"
a la place de
strCondition = "[MobileTelephoneNumber] <> vbNullString"

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 27/04/2006 01:26 vous avez écrit... :
Bonjour,

Je souhaite obtenir une liste classée alphabétiquement de tous mes
contacts
Outlook 2003 qui ont un numéro de téléphone pour leur mobile.

Ci-dessous une partie du code VBA employé :

Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objContacts = objNS.GetDefaultFolder(olFolderContacts)
' Filtrage sur n° mobile
strCondition = "[MobileTelephoneNumber] <> vbNullString"
Set colItems = objContacts.Items.Restrict(strCondition)
colItems.Sort "[FullName]"
For Each objItem In colItems
Debug.Print objItem.FullName & " <" &
objItem.MobileTelephoneNumber
& ">"
Next
.....

Mais gros problème : avec un filtre <> vbNullstring ce sont TOUS mes
contacts qui me sont envoyés et ce quelque soit le contenu du champ
MobilePhoneNumber.
Avec une condition = vbNullString, aucun contact n'est renvoyé
Par dépit et bien que ce champ semble être du type string, un essai
avec > 0
me renvoie 30 contacts (ceux commençant par 06 ... mais pas les 33, ni
les
+33, ni les autres non vides).

Au secours ... je patauge lamentablement.

Autre question annexe : je ne peux pas mettre une ligne du type :
colItems.SetColumns ("Fullname, MobileTelephoneNumber")
Elle me donne une erreur systématiquement.

Merci pour vos coups de main (ou de pied d'ailleurs).







--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr





Avatar
JièL Goubert
Bonjoir© Ludovic

Le 27/04/2006 13:37 vous avez écrit... :
Et bien avec un copié/collé ... celà ne marche pas chez moi !!!!


Zarbi...

J'ai toujours la totalité du carnet qui est renvoyé, et pour les 3/4, un
debug.print len(myItem.MobileTelephoneNumber) donne bien 0.

Comprend pas ... mais par acquit de conscience, la chaîne derrière <> est
bien simple quotte simple quotte double quotte ?


Oui, c'est bien ça... je ne comprend pas non plus.

A la rigueur, essayez de tricher comme ceci, même si c'est pas très
propre ça fonctionne

Dim myOlApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myOlApp = CreateObject("Outlook.Application")
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts
For Each myItem In myItems
If (myItem.Class = olContact) Then
If Len(myItem.MobileTelephoneNumber) > 0 Then
Debug.Print myItem.FullName & ": " &
myItem.MobileTelephoneNumber
End If
End If
Next

je ne pense pas que ça alourdisse démesurément le temps de traitement, a
moins que vous n'ayez des milliers de contacts...

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Avatar
Ludovic
"JièL Goubert" a écrit dans le
message de news:
Bonjoir© Ludovic

Le 27/04/2006 13:37 vous avez écrit... :
Et bien avec un copié/collé ... celà ne marche pas chez moi !!!!


Zarbi...

J'ai toujours la totalité du carnet qui est renvoyé, et pour les 3/4, un
debug.print len(myItem.MobileTelephoneNumber) donne bien 0.

Comprend pas ... mais par acquit de conscience, la chaîne derrière <> est
bien simple quotte simple quotte double quotte ?


Oui, c'est bien ça... je ne comprend pas non plus.

A la rigueur, essayez de tricher comme ceci, même si c'est pas très propre
ça fonctionne

Dim myOlApp As Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim myContacts As Outlook.Items
Dim myItems As Outlook.Items
Dim myItem As Object
Set myOlApp = CreateObject("Outlook.Application")
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items
Set myItems = myContacts
For Each myItem In myItems
If (myItem.Class = olContact) Then
If Len(myItem.MobileTelephoneNumber) > 0 Then
Debug.Print myItem.FullName & ": " &
myItem.MobileTelephoneNumber
End If
End If
Next

je ne pense pas que ça alourdisse démesurément le temps de traitement, a
moins que vous n'ayez des milliers de contacts...


C'est bien la solution que j'ai adoptée : le restrict 100% manuel, comme ça
on sait où on met les pieds.
Mais j'aurais bien aimé comprendre le fin mot de l'histoire ...

Encore une fois merci.

--
Ludovic