Vous avez apprécié ?
Cliquez ;-)

Astuce VBA : trier un Array

Voici une solution prête à l'emploi pour trier une variable tableau (Array) en VBA sans toucher aux cellules.

Cette solution est prévue pour un tableau à 1 dimension et un tri croissant (ordre alphabétique).

Une seconde solution pour trier un tableau à 1 dimension par ordre décroissant (ordre alphabétique inverse) est disponible un peu plus bas.


Tri croissant

Si votre tableau se nomme "mon_tableau", ajoutez simplement le code suivant pour trier ce tableau :

'#################################################################
'# Début du tri du tableau (à 1 dimension) nommé "mon_tableau"   #
'# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
'#################################################################
nb = UBound(mon_tableau)
tab_temp = mon_tableau
Erase mon_tableau
For i = 0 To nb
    pos = 0
    For l = 0 To nb
        If tab_temp(i) > tab_temp(l) And i <> l Then
            pos = pos + 1
        End If
    Next
    For ii = 1 To 1
        If mon_tableau(pos) = "" Then
            mon_tableau(pos) = tab_temp(i)
        Else
            pos = pos + 1
            ii = ii - 1
        End If
    Next
Next
'#################################################################
'# Fin du tri du tableau (à 1 dimension) nommé "mon_tableau"     #
'# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
'#################################################################

Voici un exemple simple d'utilisation de ce code de tri ("mon_tableau" reçoit ici 30 valeurs, "mon_tableau" est trié puis les données de "mon_tableau" sont entrées dans la colonne B) :

Sub tri_croissant()
   
    Dim mon_tableau(29)
   
    'Pour exemple : copie de A1 à A30 dans un tableau
    For l = 1 To 30
        mon_tableau(l - 1) = Range("A" & l)
    Next

    '#################################################################
    '# Début du tri du tableau (à 1 dimension) nommé "mon_tableau"   #
    '# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
    '#################################################################
    nb = UBound(mon_tableau)
    tab_temp = mon_tableau
    Erase mon_tableau
    For i = 0 To nb
        pos = 0
        For l = 0 To nb
            If tab_temp(i) > tab_temp(l) And i <> l Then
                pos = pos + 1
            End If
        Next
        For ii = 1 To 1
            If mon_tableau(pos) = "" Then
                mon_tableau(pos) = tab_temp(i)
            Else
                pos = pos + 1
                ii = ii - 1
            End If
        Next
    Next
    '#################################################################
    '# Fin du tri du tableau (à 1 dimension) nommé "mon_tableau"     #
    '# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
    '#################################################################

    'Pour exemple : copie du tableau trié dans la colonne B
    For l = 1 To 30
        Range("B" & l) = mon_tableau(l - 1)
    Next

End Sub

Tri décroissant

Si votre tableau se nomme "mon_tableau", ajoutez simplement le code suivant pour trier ce tableau :

'#################################################################
'# Début du tri du tableau (à 1 dimension) nommé "mon_tableau"   #
'# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
'#################################################################
nb = UBound(mon_tableau)
tab_temp = mon_tableau
Erase mon_tableau
For i = 0 To nb
    pos = 0
    For l = 0 To nb
        If tab_temp(i) > tab_temp(l) And i <> l Then
            pos = pos + 1
        End If
    Next
    For ii = 1 To 1
        If mon_tableau(nb - pos) = "" Then
            mon_tableau(nb - pos) = tab_temp(i)
        Else
            pos = pos + 1
            ii = ii - 1
        End If
    Next
Next
'#################################################################
'# Fin du tri du tableau (à 1 dimension) nommé "mon_tableau"     #
'# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
'#################################################################

Voici un exemple simple d'utilisation de ce code de tri ("mon_tableau" reçoit ici 30 valeurs, "mon_tableau" est trié puis les données de "mon_tableau" sont entrées dans la colonne B) :

Sub tri_decroissant()
   
    Dim mon_tableau(29)
   
    'Pour exemple : copie de A1 à A30 dans un tableau
    For l = 1 To 30
        mon_tableau(l - 1) = Range("A" & l)
    Next

    '#################################################################
    '# Début du tri du tableau (à 1 dimension) nommé "mon_tableau"   #
    '# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
    '#################################################################
    nb = UBound(mon_tableau)
    tab_temp = mon_tableau
    Erase mon_tableau
    For i = 0 To nb
        pos = 0
        For l = 0 To nb
            If tab_temp(i) > tab_temp(l) And i <> l Then
                pos = pos + 1
            End If
        Next
        For ii = 1 To 1
            If mon_tableau(nb - pos) = "" Then
                mon_tableau(nb - pos) = tab_temp(i)
            Else
                pos = pos + 1
                ii = ii - 1
            End If
        Next
    Next
    '#################################################################
    '# Fin du tri du tableau (à 1 dimension) nommé "mon_tableau"     #
    '# www.excel-pratique.com/fr/astuces_vba/trier-tableau-array.php #
    '#################################################################

    'Pour exemple : copie du tableau trié dans la colonne B
    For l = 1 To 30
        Range("B" & l) = mon_tableau(l - 1)
    Next

End Sub