Erreur d'exécution '9' : l'indice n'appartient pas à la sélection [Résolu]

ptitemeuh 83 Messages postés jeudi 4 février 2010Date d'inscription 8 juillet 2010 Dernière intervention - 26 mai 2010 à 14:04 - Dernière réponse : ptitemeuh 83 Messages postés jeudi 4 février 2010Date d'inscription 8 juillet 2010 Dernière intervention
- 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
UserForm2.ListBox2.AddItem (Consult(0) & " " & objContact.FullName & " - " & objContact.CompanyName)
Plus précisément avec
Consult(0)


    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



Pourquoi me donne-t-il cette erreur ?!
Afficher la suite 

4 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 26 mai 2010 à 19:47
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 27 mai 2010 à 09:55
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
ptitemeuh 83 Messages postés jeudi 4 février 2010Date d'inscription 8 juillet 2010 Dernière intervention - 27 mai 2010 à 08:44
0
Utile
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
Commenter la réponse de ptitemeuh
ptitemeuh 83 Messages postés jeudi 4 février 2010Date d'inscription 8 juillet 2010 Dernière intervention - 27 mai 2010 à 10:09
0
Utile
Re !

Merci beaucoup pour toutes tes indications, c'est SUPER !!!

Bonne journée
Commenter la réponse de ptitemeuh

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.