Bonjour ,
J'ai réussi à intégrer un code pour trier par ordre alphabétique un combobox qui affiche les noms en colonne C dans mon Userform. Cela marche et je vous en remercie, mais lorsque j'arrive à l'enregistrement du 13eme Contacts, le code fait une erreur.
Erreur d’exécution '9' L'indice n'appartient pas à la sélection.
L'erreur se situe sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
temp = table(J, c): table(J, c) = table(i, c): table(i, c) = temp
dans le module 1 Sub TriCD,
Avec J=8 et c=10.
Sinon pour les 12 entrées précédentes, aucun problème. Le soucis c'est que j'ai 600 contacts à rentrer derrière qui sont stockées sur une base de données originale à part. Lorsque je fais copier coller des contacts, j'ai cette erreur. Mais juste lorsque j'en ai plus que 12. Comment résoudre cette erreur ?
Ci dessous le code de mon module

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
31
32
33
34
Public nm As String, nminit As String
Public flag As Integer, flg1 As Integer, flg2 As Integer
Public tb(200)
 
Sub Bouton1_Cliquer()
flag = 0
UserForm1.Show
End Sub
Sub TriCD(table(), xn, col, ordre, nbcol)
col = 0
ecart = xn ' tri shell
Do While ecart >= 1
    ecart = ecart \ 2
    inv = True
    Do While inv
        inv = False
        For i = 0 To xn - ecart
            J = i + ecart
            If ordre Then
                X = (table(i, col) < table(J, col))
            Else
                X = (table(i, col) > table(J, col))
            End If
            If X Then
                inv = True
                For c = 0 To nbcol - 1
                    temp = table(J, c): table(J, c) = table(i, c): table(i, c) = temp
                Next
            End If
        Next
    Loop
Loop
' Stop
End Sub
Et le code d'appel dans mon userform de mon module

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
....
With Me.ComboBox1
    .ColumnCount = 2
    Me.Label280.Visible = False
    For J = 3 To WS.Range("C" & Rows.Count).End(xlUp).Row
        .AddItem WS.Range("C" & J)
        .Column(1, .ListCount - 1) = J
    Next J
    'Stop
    If Me.ComboBox1.ListCount < 1 Then Exit Sub
    col = 2
    Dim a()
    a = Me.ComboBox1.List
    nbcol = UBound(a, 1) - LBound(a, 1) + 1
    Call TriCD(a(), UBound(a), col - 1, False, nbcol)
    Me.ComboBox1.List = a
End With
....
Merci pour votre aide