ptitemeuh
Messages postés83Date d'inscriptionjeudi 4 février 2010StatutMembreDernière intervention 8 juillet 2010
-
26 mai 2010 à 14:04
ptitemeuh
Messages postés83Date d'inscriptionjeudi 4 février 2010StatutMembreDernière intervention 8 juillet 2010
-
27 mai 2010 à 10:09
Bonjour à tous,
Voici un bout de mon code qui permet de rechercher dans la partie catégorie de chaque contacts (carnet d'adresses outlook). Si un contact est trouvé, alors j'extrais les chiffres de la première ligne des notes du contact et je le colle dans la listbox avec le nom du contact avec le nom de la société.
Lorsque je lance mon programme, une erreur apparaît: "Erreur d'exécution '9' : l'indice n'appartient pas à la sélection" sur la ligne
For Each W In objContacts.Items 'Rechercher dans mes contacts
If TypeName(W) = "ContactItem" Then
Set objContact = W
If (InStr(1, objContact.Categories, UserForm2.TextBox2, vbTextCompare) <> 0) Then
If UBound(Split(objContact.Body, "Objet")) <> 0 Then 'S'il existe un ou plusieurs numéro(s) de consultations
Dim Consult As Variant
Consult = Split(objContact.Body, ". ", , vbTextCompare) 'On extrait le dernier mot de consultation
UserForm2.ListBox2.AddItem (Consult(0) & " " & objContact.FullName & " - " & objContact.CompanyName) 'Ajouter le nom des personnes contactés
End If
End If
End If
Next W
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 mai 2010 à 09:55
Oui, cela arrive lorsque la comparaison est faite sur une chaine (String) au lieu de la valeur numérique qu'elle représente.
Si les valeurs à trier sont bien toutes des chiffres, alors il te suffit de modifier ta comparaison :
If Val(UserForm2.ListBox2.List(i)) < Val(UserForm2.ListBox2.List(j)) Then
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 26 mai 2010 à 19:47
Salut
Bonne analyse du problème.
Que donne UBound(Consult) après le Split ?
Lorsque tu fais un Split sur une chaine vide, le tableau ne contiendra aucune données, d'où cette erreur.
Un UBound sur un tableau sans donnée renvoie -1
Il faudrait, je pense, ajouter cette condition :
Consult = Split(objContact.Body, ". ", , vbTextCompare)
If UBound(Consult) >= 0 Then
UserForm2.ListBox2.AddItem (Consult(0) & " " & ...
End If
ou encore faire ce même If en testant en amont si objContact.Body est une chaine vide = gain de temps si beaucoup de données à traiter.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
ptitemeuh
Messages postés83Date d'inscriptionjeudi 4 février 2010StatutMembreDernière intervention 8 juillet 2010 27 mai 2010 à 08:44
Salut,
Je viens de tester le programme avec la condition ajoutée et............ cela marche parfaitement
Il me reste plus qu'à trouver une solution à mon problème de tri par ordre décroissant car celui-ci prend en compte le premier du chiffre du nombre et nom pas le nombre total. Par exemple, une fois ma recherche effectuée, j'obtiens :
39
132
1
Pourtant mon code semble correct non ?
Dim i As Integer 'Tri par ordre décroissant
Dim j As Integer
For i = 0 To UserForm2.ListBox2.ListCount - 1
For j = i To UserForm2.ListBox2.ListCount - 1
If UserForm2.ListBox2.List(i) < UserForm2.ListBox2.List(j) Then
Variable = UserForm2.ListBox2.List(i)
UserForm2.ListBox2.List(i) = UserForm2.ListBox2.List(j)
UserForm2.ListBox2.List(j) = Variable
End If
Next
Next