Tableaux dans Visual Basic pour Application

Les tableaux dans Visual Basic pour Application sont des structures qui stockent généralement des ensembles de variables associées du même type. Les entrées du tableau sont accessibles par leur index numérique.

Par exemple, il y a une équipe de 20 personnes dont les noms doivent être enregistrés pour une utilisation ultérieure dans le code VBA. On pourrait simplement déclarer 20 variables pour contenir chaque nom, comme ceci :

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Mais vous pouvez utiliser une méthode beaucoup plus simple et plus organisée : stocker une liste des noms des membres de l'équipe dans un tableau de 20 variables comme Chaîne:

Dim Team_Members (1 à 20) en tant que chaîne

Dans la ligne ci-dessus, nous avons déclaré un tableau. Écrivons maintenant une valeur à chacun de ses éléments, comme ceci :

Team_Members(1) = "Jean Dupont"

Un avantage supplémentaire de stocker des données dans un tableau, par rapport à l'utilisation de variables séparées, devient évident lorsqu'il devient nécessaire d'effectuer la même action sur chaque élément du tableau. Si les noms des membres de l'équipe étaient stockés dans 20 variables distinctes, il faudrait alors écrire 20 lignes de code à chaque fois pour effectuer la même action sur chacune d'entre elles. Cependant, si les noms sont stockés dans un tableau, vous pouvez effectuer l'action souhaitée avec chacun d'eux à l'aide d'une simple boucle.

Son fonctionnement est illustré ci-dessous avec un exemple de code qui imprime les noms de chaque membre de l'équipe de manière séquentielle dans les cellules de la colonne. A feuille de calcul Excel active.

For i = 1 To 20 Cells(i,1).Value = Team_Members(i) Next i

De toute évidence, travailler avec un tableau qui stocke 20 noms est beaucoup moins lourd et plus précis que d'utiliser 20 variables distinctes. Mais que se passe-t-il si ces noms ne sont pas 20, mais 1000 ? Et si, en plus, il fallait garder les noms et patronymes séparément ?! Il est clair qu'il deviendra bientôt totalement impossible de gérer un tel volume de données en code VBA sans l'aide d'un tableau.

Tableaux multidimensionnels dans Excel Visual Basic

Les tableaux Visual Basic décrits ci-dessus sont considérés comme unidimensionnels. Cela signifie qu'ils stockent une simple liste de noms. Cependant, les tableaux peuvent avoir plusieurs dimensions. Par exemple, un tableau à deux dimensions peut être comparé à une grille de valeurs.

Supposons que vous souhaitiez enregistrer les chiffres de vente quotidiens de janvier pour 5 équipes différentes. Cela nécessitera un tableau à deux dimensions composé de 5 ensembles de métriques pendant 31 jours. Déclarons un tableau comme celui-ci :

Dim Jan_Sales_Figures (1 à 31, 1 à 5) comme devise

Pour accéder aux éléments du tableau Jan_Sales_Chiffres, vous devez utiliser deux index indiquant le jour du mois et le numéro de commande. Par exemple, l'adresse d'un élément contenant le chiffre d'affaires de 2-oh des équipes pour 15 e Janvier s'écrirait ainsi :

Jan_Sales_Chiffres(15, 2)

De la même manière, vous pouvez déclarer un tableau avec 3 dimensions ou plus - ajoutez simplement des dimensions supplémentaires à la déclaration du tableau et utilisez des indices supplémentaires pour faire référence aux éléments de ce tableau.

Déclarer des tableaux dans Excel Visual Basic

Plus tôt dans cet article, nous avons déjà examiné plusieurs exemples de déclaration de tableaux dans VBA, mais ce sujet mérite d'être examiné de plus près. Comme indiqué, un tableau à une dimension peut être déclaré comme ceci :

Dim Team_Members (1 à 20) en tant que chaîne

Une telle déclaration indique au compilateur VBA que le tableau Membres de l'équipe se compose de 20 variables accessibles aux indices de 1 à 20. Cependant, nous pourrions penser à numéroter nos variables de tableau de 0 à 19, auquel cas le tableau devrait être déclaré comme ceci :

Dim Team_Members (0 à 19) en tant que chaîne

En fait, par défaut, la numérotation des éléments du tableau commence à 0, et dans la déclaration du tableau, l'index initial peut ne pas être spécifié du tout, comme ceci :

Dim Team_Members(19) en tant que chaîne

Le compilateur VBA traitera une telle entrée comme déclarant un tableau de 20 éléments avec des indices de 0 à 19.

Les mêmes règles s'appliquent lors de la déclaration de tableaux Visual Basic multidimensionnels. Comme déjà montré dans l'un des exemples, lors de la déclaration d'un tableau à deux dimensions, les indices de ses dimensions sont séparés par une virgule :

Dim Jan_Sales_Figures (1 à 31, 1 à 5) comme devise

Cependant, si vous ne spécifiez pas d'index de départ pour les deux dimensions du tableau et que vous le déclarez comme ceci :

Dim Jan_Sales_Figures(31, 5) comme devise

alors cette entrée sera traitée comme un tableau à deux dimensions, dont la première dimension contient 32 éléments avec des indices de 0 à 31, et la deuxième dimension du tableau contient 6 éléments avec des indices de 0 à 5.

Tableaux dynamiques

Tous les tableaux des exemples ci-dessus ont un nombre fixe de dimensions. Cependant, dans de nombreux cas, nous ne savons pas à l'avance quelle doit être la taille de notre tableau. Nous pouvons sortir de la situation en déclarant un immense tableau, dont la taille sera certainement plus grande que nécessaire pour notre tâche. Mais une telle solution nécessitera beaucoup de mémoire supplémentaire et peut ralentir le programme. Il existe une meilleure solution. Nous pouvons utiliser un tableau dynamique - c'est un tableau dont la taille peut être définie et modifiée un nombre illimité de fois lors de l'exécution d'une macro.

Un tableau dynamique est déclaré avec des parenthèses vides, comme ceci :

Dim Team_Members() en tant que chaîne

Ensuite, vous devrez déclarer la dimension du tableau lors de l'exécution du code à l'aide de l'expression ReDim:

ReDim Team_Members (1 à 20)

Et si lors de l'exécution du code, vous devez à nouveau modifier la taille du tableau, vous pouvez à nouveau utiliser l'expression ReDim :

Si Team_Size > 20 Alors Redim Team_Members (1 à Team_Size) End If

Gardez à l'esprit que le redimensionnement d'un tableau dynamique de cette manière entraînera la perte de toutes les valeurs stockées dans le tableau. Afin de stocker des données déjà dans le tableau, vous devez utiliser le mot-clé Préservercomme indiqué ci-dessous:

Si Team_Size > 20 Alors ReDim Preserve Team_Members(1 To Team_Size) End If

Malheureusement le mot clé Préserver ne peut être utilisé que pour modifier la limite supérieure d'une dimension de tableau. La limite inférieure d'un tableau ne peut pas être modifiée de cette manière. De plus, si le tableau a plusieurs dimensions, utilisez le mot-clé Préserver, seule la dernière dimension du tableau peut être redimensionnée.

Soyez sympa! Laissez un commentaire