XL 2016 Erreur '9' l'indice n'appartient pas à la sélection

solgti

XLDnaute Junior
Bonjour, dans une condition spécifique j'ai le message : Erreur '9' l'indice n'appartient pas à la sélection

J'ai une fonction sur un UserForm Initialize qui monte une liste triée:

Private Sub UserForm_Initialize()
Dim temp()
Set f = Sheets("Table de Données")
Set mondico = CreateObject("Scripting.Dictionary")
a = f.Range("A2:a" & f.[a1048576].End(xlUp).Row).Value
For i = LBound(a) To UBound(a)
mondico(a(i, 1)) = ""
Next i
temp = mondico.keys ' dans un tableau pour tri
Call Tri(temp, LBound(temp), UBound(temp))
Me.LstPF.List = Application.Transpose(temp)
Set mondico = Nothing ' libère mondico
End Sub

J'appelle la procédure TRI:

Sub Tri(a(), gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

Lorsque je suis sur la feuille "Table de Données", que je lance l'interface ça fonctionne correctement et la liste se monte triée.

Par contre si je suis sur une autre feuille j'ai le message: Erreur '9' l'indice n'appartient pas à la sélection

Est-ce que quelqu'un peut m'éclairer SVP et m'indiquer où peut se trouver le problème.

Merci

solgti
 

Robert

XLDnaute Barbatruc
Bonjour Solgti, bonjour le forum,

Quelle ligne du code est surlignée de jaune quand le message apparaît ?
Souvent cette erreur indique soit un onglet qui n'existe pas, soit une orthographe différente entre le nom réel de l'onglet et le nom de l'onglet dans le code (Table des Données / Sheets("Table de Données").

Mais tu aurais le bug dans tous les cas ?...
Au pire, envoie le fichier pour qu'on puisse mieux comprendre où se situe l'erreur.

Pense aussi à déclarer les autres variables : f (As Worksheet), mondico (As Object), a (As Variant) et i (As Integer ou Long). Ce n'est pas obligatoire mais ça évite souvent les mauvaises surprises...
 

solgti

XLDnaute Junior
Bonjour Robert, la ligne en jaune est dans la fonction TRI, je l'ai mise ici en rouge gras soulignée:
Sub Tri(a(), gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub

Si vous avez besoin du fichier, je vais en préparer une version sans mes données personnelles.

Merci
solgti
 

Robert

XLDnaute Barbatruc
Re,

Oui, j'ai déjà eu ce genre de problème avec le code du grand Jacques (que je salue au passage) et une Option Explicit... Mais ce n'est pas ton cas car avec Option Explicit en haut de module, ton code t'aurait demandé aussi de déclarer les variables.

Que vaut Ubound(temp) ?
Comme tu vois, on risque de perdre un temps fou en questions/réponses ! Alors oui, j'ai besoin d'un fichier pour éviter ça...
 

solgti

XLDnaute Junior
Bonjour Robert, en me demandant de vous préparer un exemple, j'ai trouvé mon problème, en fait ce n'était pas sur la fonction Initialize, mais plutôt lorsque je choisis dans le combobox pour générer une liste vers un listbox.
En fait
Private Sub ComboBox1_Change()
Dim temp()
Dim s As String
s = ComboBox1.Value
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("a2", [a1048576].End(xlUp))
If c = s Then
mondico(c.Offset(0, 1).Value) = ""
End If
Next c
temp = mondico.keys ' dans un tableau pour tri
Call Tri(temp, LBound(temp), UBound(temp))
ListBox1.List = Application.Transpose(temp)
End Sub
La ligne en rouge indique le problème, comme je ne suis pas sur la même feuille la sélection n'est plus la même.

J'ai ajouté une variable:
Set f = Sheets("Table de Données")
et modifié la ligne en rouge pour:
f.Range("a2", f.[a1048576].End(xlUp))
et ça fonctionne.

pour éviter ce genre problème je vais définir ces variables PUBLIC.

Merci pour votre aide.

solgti
 

Discussions similaires