Bonjour,

J'ai recupere une fonction de trie d'un tableau avec comme parametre le tableau , la colonne a triée et le sens du trie.

Mais qd j'ai un tableau dont le nombre de colonnes est supérieur à 2 ->
ca marche pas, il dit qu'il ya un probleme "indice en dehors de la plage" ou "type incompatible".

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
35
36
37
38
'-----Trie d'un tableau en fonction de la colonne et du sens de trie
' TableauApresTrie = TriTableau(tp, 2, "DESC") OU TableauApresTrie = TriTableau(tp, 2, "ASC")
function TriTableau (LeTableau, k, asc)
    ' Permet renvoyer un tableau Trié issu du tableau transmis en
    ' paramêtre (N lignes, x colonnes) et avec le N° de la colonne à trier k
    Dim Ligne_Tampon(3)
    Dim Tableau_Tampon
    Max = Ubound(LeTableau)
    NbColonnes = Ubound(LeTableau, 2)
    If k <= nbColonnes Then
        ReDim Tableau_Tampon(Max, 3)
        i = 1
        Do until i = Max
            ' Chaque élément est comparé à celui qui lui est supérieur dans le classement
            j= 1
            Do until j = Max
                Dim test
                If asc = "ASC" Then
                    test = LeTableau(j, k) > LeTableau((j + 1), k)
                Else
                    test = LeTableau(j, k) < LeTableau((j + 1), k)  'LIGNE 2
                End if
            If (test) Then
            ' l'élément J est plus important que l'élément J + 1 alors on les intervertit
                For indexColonne = 1 To nbColonnes
                    Ligne_Tampon(indexColonne) = LeTableau(j,indexColonne)  'LIGNE 1
                    LeTableau(j,indexColonne) = LeTableau((j + 1),indexColonne)
                    LeTableau((j + 1),indexColonne) = Ligne_Tampon(indexColonne)
                Next
            End If
            j=j+1
            loop
            i=i+1
        loop
    End if
    TriTableau = LeTableau
End Function
j'ai par exemple :
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
dim tp(5,2),tab(4,11)
tp(1,1) = "cas 1"
tp(1,2) = 10
tp(2,1) = "cas 2"
tp(2,2) = 15
tp(3,1) = "cas 3"
tp(3,2) = 12

tab(1,1) = "cas 1"
tab(1,...) = ....
tab(1,10) = 10
tab(2,1) = "cas 2"
tab(2,...) = ...
tab(2,10) = 15
tab(3,1) = "cas 3"
tab(3,...) = ...
 tab(3,10) = 12


trie1 = TriTableau (tp,2,"DESC") 'ca passe ca

trie2 = TriTableau (tab,10,"DESC")' erreur ici = "Indice en dehors de la plage: 'indexColonne' " LIGNE 1
'si je mets 9 -> "Type incompatible: LIGNE 2"
Par contre si je mets la colonne 11 à sélectionner, pas d'erreur mais me le trie pas
Je ne comprends pas pourquoi??

Merci pour votre aide,

Notes: je commence mes tableaux à 1 et non à 0.