[VBA] Existe-t'il une fonction capable de trier un tableau?

Existe-t'il une fonction capable de trier un tableau? [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 27-06-2008 à 16:56:21    

Salut,
 
Je cherche à trier un tableau (sans passer par son déchargement sur la feuille Excel puis par un tri et un rechargement)...
 
Par exemple voici mon tableau à sa définition :
 
Dim Tableau(5)
 
Tableau(1)=10
Tableau(2)=35
Tableau(3)=20
Tableau(4)=2
Tableau(5)=12

 
Après la fonction (si elle existe bien sur), mon tableau devrait ressembler à ça :
 
Tableau(1)=2
Tableau(2)=10
Tableau(3)=12
Tableau(4)=20
Tableau(5)=35

 
Merci par avance pour vos lumières.

Reply

Marsh Posté le 27-06-2008 à 16:56:21   

Reply

Marsh Posté le 27-06-2008 à 17:20:54    

Reply

Marsh Posté le 27-06-2008 à 17:32:24    

Merci Kiki29, mais c'est plus une fonction qu'une méthode que je cherche (à la rigueur, le plus simple, c'est encore de décharger le tableau, de le trier et de le recharger, mais ce n'est probablement pas le plus rapide, pas le plus pratique et surtout pas le plus satisfaisant d'un point de vue programmation).
 
J'ai effectué des recherches avant de poster la question, et en fait, pour ceux qui connaissent, c'est plus quelque chose proche du ARRAY.SORT de VB ( http://msdn.microsoft.com/fr-fr/li [...] S.80).aspx ).
Seulement, apparement, VBA ne reconnais pas la fonction ARRAY.SORT de VB (ou alors, je me suis mal débrouillé, ou j'ai oublié des éléments).

Reply

Marsh Posté le 27-06-2008 à 17:45:04    

Tu le dis toi même tu es sous VBA, donc oublie NET, d'autant plus que si tu avais regardé le lien donné , tu aurais vu que l'implémentation en VBA est quasiment directe quelque soit l'algo choisi


Message édité par kiki29 le 27-06-2008 à 17:52:01
Reply

Marsh Posté le 27-06-2008 à 18:13:48    

A titre d'exemple


Option Explicit
 
Sub Tst()
Dim Tableau(5) As Long
Dim i As Long
 
    Tableau(1) = 10
    Tableau(2) = 35
    Tableau(3) = 20
    Tableau(4) = 2
    Tableau(5) = 12
 
    BubbleSort Tableau
 
    For i = 1 To 5
        Debug.Print i, Tableau(i)
    Next i
End Sub
 
Private Sub BubbleSort(t() As Long, _
                       Optional ByVal loBound As Long = -1, _
                       Optional ByVal upBound As Long = -1)
 
Dim i As Long, tmp As Long
Dim k As Long, test As Long
 
    If loBound = -1 Then
        loBound = LBound(t())
    End If
    If upBound = -1 Then
        upBound = UBound(t())
    End If
 
    k = upBound
    Do
        test = 0
        For i = loBound To k - 1
            If t(i) > t(i + 1) Then
                test = i
                tmp = t(i)
                t(i) = t(i + 1)
                t(i + 1) = tmp
            End If
        Next i
        k = test
    Loop While test
End Sub


Message édité par kiki29 le 27-06-2008 à 18:30:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed