Trier les éléments d'un tableau et d'une liste de tableaux dans VBA

Glen Alfaro 26 décembre 2022
  1. Trier Array() en VBA
  2. Trier Arraylist() en VBA
Trier les éléments d'un tableau et d'une liste de tableaux dans VBA

En VBA ou dans n’importe quel langage de programmation, le besoin de l’ordinateur de stocker des valeurs vitales à l’exécution du code. Une excellente façon de le faire est d’utiliser des tableaux.

Les tableaux sont des objets qui ont la capacité de stocker des informations. Ils sont essentiels dans la programmation informatique car ils donnent au programmeur la possibilité de sauvegarder les données nécessaires à la dernière partie de l’exécution du code.

En VBA, nous pouvons utiliser Array() et Arraylist() pour nos besoins en matière de tableaux. Le premier est plus rapide en temps d’exécution et le second promet de la flexibilité. Le premier est de longueur fixe tandis que le second est de longueur variable.

Le bloc de code ci-dessous vous montrera comment créer et utiliser un Array() et un Arraylist().

Créez et utilisez un Array() statique :

Sub StatArrayDemo()

Dim namesArr (1 to 4) as String

namesArr(1) = "Glen"
namesArr(2) = "Jose"
namesArr(3) = "Katrina"
namesArr(4) = "Myla"

Debug.print namesArr(3)
End Sub

Sortie StatArrayDemo :

Katrina

Créer et utiliser un Array() dynamique :

Sub DynaArrayDemo()

Dim namesArr as Variant

namesArr = Array("Glen", "Jose", "Katrina", "Myla")

Debug.print namesArr(0)
End Sub

Sortie DynaArrayDemo :

Glen

Créer et utiliser Arraylist()

Pour utiliser Arraylist() dans VBA, nous devons activer la bibliothèque dans laquelle Arraylist() se trouve.

Pour faire ça:

  • Ouvrir le fichier Excel.
  • Depuis l’onglet Développeur, ouvrez l’éditeur Visual Basic.
  • Dans la barre d’outils Tools, cliquez sur References.
  • Cochez la case mscorlib.dll.

Vous êtes maintenant prêt.

Sur l’exemple ci-dessous, l’objet Arraylist nommé ArrayValues a été déclaré et initialisé puis des valeurs ont été ajoutées.

Sub ArrayListDemo()

Dim ArrayValues As ArrayList
'Create a new Arraylist Object

'Adding Values to ArrayValues Arraylist
ArrayValues. Add("Glen")
ArrayValues. Add("Jose")
ArrayValues. Add("Kartina")
ArrayValues. Add("Myla")

Debug.Print (ArrayValues(1))

End Sub

Sortie ArrayListDemo :

Jose

Trier Array() en VBA

Le bloc de code ci-dessous triera les valeurs saisies dans le sous-programme, que ce soit par ordre numérique ou par ordre alphabétique.

Le sous-programme ArraySort accepte trois paramètres. vArray où les valeurs non triées tandis que inLow sera la limite inférieure de vArray et inHi est la limite supérieure de vArray. Le ArraySort a été testé par deux sous-programmes de test NumberTest et LetterTest.

Public Sub ArraySort(vArray As Variant, inLow As Long, inHi As Long)

Dim arr1   As Variant
Dim tempO As Variant
Dim tempL  As Long
Dim tempH   As Long

tempL = inLow
tempH = inHi

arr1 = vArray((inLow + inHi) \ 2)

While (tempL <= tempH)
    While (vArray(tempL) < arr1 And tempL < inHi)
        tempL = tempL + 1
    Wend

    While  (arr1 < vArray(tempH) And tempH > inLow)
        tempH = tempH - 1
    Wend

    If (tempL <= tempH) Then
        tempO = vArray(tempL)
        vArray(tempL) = vArray(tempH)
        vArray(tempH) = tempO
        tempL = tempL + 1
        tempH = tempH - 1
    End If
Wend

If (inLow < tempH) Then ArraySort vArray, inLow, tempH
If (tempL < inHi) Then ArraySort vArray, tempL, inHi

End Sub

Sub NumberTest()

Dim myArr As Variant

myArr = Array(5, 7, 3, 8, 5, 3, 4, 1)

Call ArraySort(myArr, 0, UBound(myArr))

Dim i As Integer

For i = LBound(myArr) To UBound(myArr)

Debug.Print (myArr(i))
Next i

End Sub

Sub LetterTest()

Dim myArr As Variant


myArr = Array("A", "T", "O", "D", "B", "Q", "M", "L")
Call ArraySort(myArr, 0, UBound(myArr))

Dim i As Integer

For i = LBound(myArr) To UBound(myArr)

Debug.Print (myArr(i))
Next i

End Sub

Sortie NumberTest :

1 
3 
3 
4 
5 
5 
7 
8 

Sortie LetterTest :

A
B
D
L
M
O
Q
T

Trier Arraylist() en VBA

Pour Arraylist, c’est plus facile puisque l’objet Arraylist est livré avec la méthode Sort. Ainsi, si vous avez besoin de trier des choses dans un tableau, il est préférable d’utiliser Arraylist.

Le bloc de code ci-dessous montrera comment trier les valeurs dans Arraylist. La fonction Sort de Arraylist peut trier les valeurs et les lettres.

Public Sub ArraylistSortLetters()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add ("A")
myArr.Add ("T")
myArr.Add ("O")
myArr.Add ("D")
myArr.Add ("B")
myArr.Add ("Q")
myArr.Add ("M")
myArr.Add ("L")

myArr.Sort

Dim i As Integer

For i = 0 To myArr.Count - 1
   Debug.Print (myArr(i))
Next i

End Sub

Sortie de ArraylistSortLetters :

A
B
D
L
M
O
Q
T
Public Sub ArraylistSortNumbers()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)

myArr.Sort

Dim i As Integer

For i = 0 To myArr.Count - 1
    Debug.Print (myArr(i))
Next i

End Sub

Sortie de ArraylistSortNumbers :

1 
2 
4 
5 
7 
7 
8 
8 

Les deux blocs de code au-dessus de ArraylistSortLetters et ArraylistSortNumbers trie les éléments du plus bas au plus élevé.

Si nous voulons trier le tableau du plus haut au plus bas, nous pouvons trier le tableau du plus bas au plus haut puis utiliser la méthode Reverse pour basculer.

Le bloc de code ci-dessous illustre le tri du plus haut au plus bas en utilisant la méthode Reverse.

Public Sub SortInHighestToLowest()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)

myArr.Sort
myArr.Reverse

Dim i As Integer

For i = 0 To myArr.Count - 1
   Debug.Print (myArr(i))
Next i

End Sub

Sortie SortInHighestToLowest :

8 
8 
7 
7 
5 
4 
2 
1 

Article connexe - VBA Array