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’éditeurVisual Basic
. -
Dans la barre d’outils
Tools
, cliquez surReferences
. -
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