Cours VBA : utilisations des tableaux

Les tableaux

Les tableaux permettent de stocker un grand nombre de valeurs contrairement aux variables qui ne peuvent stocker qu'une seule valeur à la fois.

Nous avons effleuré le sujet à la leçon sur les variables, nous allons maintenant l'approfondir.


Intérêt des tableaux

Imaginez que dans une procédure vous ayez besoin de stocker 500 valeurs. S'il fallait créer 500 variables pour stocker toutes ces valeurs, cela deviendrait vite très compliqué, tandis qu'avec un tableau, le stockage et l'utilisation de ces valeurs seront grandement simplifiés.

Le second intérêt est la vitesse d'exécution (parcourir un tableau de données est infiniment plus rapide que de parcourir une plage de cellules équivalente).

Rien de tel qu'un exemple pour mieux comprendre ...

La première feuille contient ici une base de données de 5000 lignes sur 3 colonnes :

bd tableaux vba

La seconde feuille contient une grille où seront comptabilisés les OUI en fonction des années et des clients :

tableau excel clients annees png tableaux vba

Dans cet exemple, la procédure va parcourir la base de données en boucle et comptabilisera pour chaque année et chaque numéro de client le nombre de OUI avant de l'entrer dans la cellule correspondante.

Sans utiliser de tableau, il faudra 171.11 secondes à Excel pour exécuter la procédure :

sans tableaux vba

En enregistrant tout d'abord la base de données dans un tableau et en effectuant ensuite les mêmes calculs (en parcourant le tableau au lieu des cellules), il ne faudra que 1.67 secondes pour exécuter la procédure :

avec tableaux vba

Et si l'on décide d'optimiser la procédure en n'enregistrant que les données avec les OUI dans le tableau (ce qui représente environ le 3/4 des données) et uniquement les années des dates, 0.58 secondes suffisent :

avec opti tableaux vba

Dans cet exemple, l'utilisation d'un tableau a permis d'exécuter la procédure environ 295x plus rapidement.

Déclaration d'un tableau

Voici quelques exemples de déclarations (si les 2 premières déclarations ne sont pas claires pour vous, relisez ceci) :

'Exemple de déclaration d'un tableau à 1 dimension
Dim tab1(4)

'Exemple de déclaration d'un tableau à 2 dimensions
Dim tab2(6, 1)

'Exemple de déclaration d'un tableau dynamique
Dim tab3()

Si vous ne pouvez pas entrer de valeurs fixes (parce que cela dépend de la taille de la base de données par exemple), laissez les parenthèses vides.

Vous n'avez pas besoin de déclarer un type (String, Integer, etc.) car dans bien des cas cela ralentirait votre procédure.

Enregistrer des données dans un tableau

Commençons par enregistrer ces quelques données dans un tableau :

enreg 1 dim tableaux vba

Nous voulons enregistrer ici 11 x 1 valeurs, il faudra donc déclarer un tableau à une dimension :

Dim tableau(10)

Le tableau tableau(10) peut contenir 11 valeurs, car rappelez-vous que la numérotation d'un tableau commence à 0.

Chaque élément du tableau reçoit ensuite sa valeur :

Sub exemple()

    Dim tableau(10)

    'Enregistrement des valeurs dans le tableau
    tableau(0) = Range("A2")
    tableau(1) = Range("A3")
    tableau(2) = Range("A4")
    tableau(3) = Range("A5")
    tableau(4) = Range("A6")
    tableau(5) = Range("A7")
    tableau(6) = Range("A8")
    tableau(7) = Range("A9")
    tableau(8) = Range("A10")
    tableau(9) = Range("A11")
    tableau(10) = Range("A12")

End Sub

Mais pour éviter toutes ces répétitions, l'utilisation d'une boucle For est plus que recommandée :

Sub exemple()
    
    Dim tableau(10), i As Integer
    
    'Enregistrement des valeurs dans le tableau
    For i = 0 To 10
        tableau(i) = Range("A" & i + 2)
    Next

End Sub

Notez que vous pouvez utiliser, modifier chaque élément du tableau individuellement comme une variable.

En voici un exemple avec tableau(3), la 4e valeur du tableau :

Sub exemple()
    
    Dim tableau(10), i As Integer
    
    'Enregistrement des valeurs dans le tableau
    For i = 0 To 10
        tableau(i) = Range("A" & i + 2)
    Next
    
    'Affichage 1
    MsgBox tableau(3) 'Renvoie : 08.03.2023
    
    'Modification de l'une des valeurs 
    tableau(3) = Year(tableau(3))
    
    'Affichage 2
    MsgBox tableau(3) 'Renvoie : 2023
	
End Sub

Dans cet exemple, la fonction Year (qui renvoie l'année d'une date) a été utilisée pour modifier tableau(3).