Cours VBA : utilisations des tableaux (partie 2)
Le tableau à 2 dimensions
Pour enregistrer plusieurs colonnes de données, une dimension supplémentaire est nécessaire.
En voici un exemple :

Enregistrement des données dans un tableau à 2 dimensions :
'Déclarations
Dim tableau(10, 2) 'Tableau de 11 x 3 "cases"
Dim i As Integer
'Enregistrement des valeurs dans le tableau
For i = 0 To 10
tableau(i, 0) = Range("A" & i + 2)
tableau(i, 1) = Range("B" & i + 2)
tableau(i, 2) = Range("C" & i + 2)
Next
Et quelques exemples de valeurs :
MsgBox tableau(0, 0) 'Renvoie : 11.03.2026
MsgBox tableau(0, 1) 'Renvoie : 24
MsgBox tableau(9, 2) 'Renvoie : NON
MsgBox tableau(10, 2) 'Renvoie : OUI
Le tableau dynamique
Imaginons que cette même base de données soit régulièrement mise à jour et que l'on ne puisse donc pas entrer de valeurs fixes à la déclaration ... Dans ce cas, le tableau dynamique sera bien utile.

Pour connaître le numéro de la dernière ligne de notre base de données, utilisez la formule suivante (que nous avions vu lors du précédent exercice) :
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
Si vous entrez une variable lors de la déclaration, Excel ne l'acceptera pas.
Déclarez un tableau dynamique (parenthèses vides), puis définissez ses dimensions avec Redim :
Dim tableau()
ReDim tableau(derniereLigne - 2, 2)
De cette manière vous enregistrerez automatiquement toutes les lignes de la base de données dans le tableau :
Sub exemple()
'Déclarations
Dim tableau(), derniereLigne As Integer, i As Integer
'Dernière ligne de la base de données
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
'Redimensionnement
ReDim tableau(derniereLigne - 2, 2)
'Enregistrement des valeurs dans le tableau
For i = 0 To derniereLigne - 2
tableau(i, 0) = Range("A" & i + 2)
tableau(i, 1) = Range("B" & i + 2)
tableau(i, 2) = Range("C" & i + 2)
Next
End Sub
Ubound
Dans l'exemple ci-dessus, le dernier numéro de notre tableau était égal à derniereLigne - 2 :
For i = 0 To derniereLigne - 2
Une solution pour connaître ce numéro (si cette information n'est pas déjà disponible) consiste à utiliser la fonction Ubound :
For i = 0 To UBound(tableau)
Cette fonction renvoie le plus grand numéro pour une dimension choisie (par défaut la première).
Quelques exemples pour mieux comprendre :
Sub exemple()
Dim tableau(10, 2)
MsgBox UBound(tableau) 'Renvoie : 10
MsgBox UBound(tableau, 1) 'Renvoie : 10
MsgBox UBound(tableau, 2) 'Renvoie : 2
End Sub
Enregistrer une plage de cellules
Il est possible d'enregistrer une plage de cellules dans un tableau sans passer par une boucle.
'Déclarations
Dim tableau(10, 2) 'Tableau de 11 x 3 "cases"
Dim i As Integer
'Enregistrement des valeurs dans le tableau
For i = 0 To 10
tableau(i, 0) = Range("A" & i + 2)
tableau(i, 1) = Range("B" & i + 2)
tableau(i, 2) = Range("C" & i + 2)
Next
Le code ci-dessus peut être remplacé par :
'Déclaration
Dim tableau()
'Enregistrement des valeurs dans le tableau
tableau = Range("A2:C12")
Même si au premier abord cette seconde méthode semble séduisante, elle peut dans bien des cas vous faire perdre plus de temps que la première méthode ...
En enregistrant vos données dans le tableau de cette manière, le premier numéro n'est pas 0 mais 1, cela peut être source de confusion. De plus, si au cours du développement vous choisissez de n'enregistrer dans le tableau que les données répondant à certains critères (ou effectuer toute autre opération), vous devrez de toute façon passer par une boucle.
Array
Vous aurez peut-être parfois besoin de créer un tableau contenant une liste fixe de valeurs.
Une solution consiste à déclarer le tableau et à entrer les valeurs l'une après l'autre :
Dim tableau(5)
tableau(0) = "SI"
tableau(1) = "RECHERCHEV"
tableau(2) = "SOMME"
tableau(3) = "NB"
tableau(4) = "ESTNUM"
tableau(5) = "STXT"
Une solution bien plus pratique consiste à utiliser la fonction Array qui retourne un tableau de valeurs :
tableau = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT")
Split
La fonction Split permet de diviser une chaîne de caractères en un tableau en fonction d'un délimiteur défini.
Par exemple, voici une chaîne de caractères :
chaine = "SI, RECHERCHEV, SOMME, NB, ESTNUM, STXT"
Pour convertir cette chaîne de caractères en tableau, utilisez la fonction Split et définissez le séparateur :
tableau = Split(chaine, ", ")
Le tableau renverra les valeurs suivantes :
MsgBox tableau(0) 'Renvoie : SI
MsgBox tableau(1) 'Renvoie : RECHERCHEV
MsgBox tableau(2) 'Renvoie : SOMME
MsgBox tableau(3) 'Renvoie : NB
MsgBox tableau(4) 'Renvoie : ESTNUM
MsgBox tableau(5) 'Renvoie : STXT
Les 3 tableaux suivants renvoient également les mêmes valeurs :
tableau = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT")
tableau = Split("SI/RECHERCHEV/SOMME/NB/ESTNUM/STXT", "/")
tableau = Split("SI RECHERCHEV SOMME NB ESTNUM STXT", " ")
Join
La fonction à l'opposé de Split est Join.
Cette fonction permet d'assembler les valeurs d'un tableau en une chaîne de caractères :
tableau = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT")
MsgBox Join(tableau, " - ") 'Renvoie : SI - RECHERCHEV - SOMME - NB - ESTNUM - STXT