Easy-Micro

ESPACEMEMBRE Tableaux VBA
Tableau multidimensionnel

Tableau VBA multidimensionnel

Déclaration d'un tableau multidimensionnel

Il est possible de déclarer des tableaux pouvant avoir jusqu'à 60 dimensions.
Par exemple, un tableau 10X10 (2 dimensions) comportant 100 nombres entiers est déclaré comme ceci :
Dim MonTableau (1 To 10, 1 To 10) as Integer

Ou similairement :
Option Base 1 'instruction en début de module
Dim  MonTableau (10, 10) as Integer

Affectation d'un tableau multidimensionnel

Pour accéder à un élément particulier d'un tableau, il faut donner la valeur de l'index dans chacune des dimensions définies.
Exemple avec le tableau MonTableau défini précédament
Sub proc_affectation()
MonTableau(4, 5) = 5
Endsub

La procédure ci-dessus affecte la valeur 5 à l'élément situé à ligne 4, colonne 5 du tableau MonTableau.

Exemple de tableau dynamique avec deux dimensions
Option Explicit
Option Base 1
Public i As Integer
Public txt_pays() As String
Public int_nbre_de_pays As Integer
Public int_nbre_de_villes As Integer
Public max_d_elements As Integer


Sub proc_mes_pays()
'Exemple de tableau dynamique avec deux dimensions
'Dans feuille 1 : une liste de pays en colonne A et une liste de ville en colonne F

Sheets("Feuil1").Activate

'Numéro de la dernière ligne
int_nbre_de_pays = Range("A1").End(xlDown).Row
int_nbre_de_villes = Range("F1").End(xlDown).Row

'Récupère le nombre d'éléments maximum à utiliser
max_d_elements = WorksheetFunction.Max(int_nbre_de_pays, int_nbre_de_villes)

'redimensionne avec 2 dimensions (nombre de virgule) de 2 X max_d_elements
'Attention, le 2 ci-dessous n'est pas le nombre de dimension
'Si le nombre de pays n'est pas égal au nombre de villes, on aura des cellules vide
ReDim txt_pays(2, max_d_elements)

'initialisation dynamique
For i = 1 To int_nbre_de_pays
txt_pays(1, i) = Cells(i, 1).Value
Next i

'initialisation dynamique deuxième dimension (les villes)
For i = 1 To 5
txt_pays(2, i) = Cells(i, 6).Value
Next i

Sheets.Add

' Affichage
' UBound avec numéro de la dimension qui correspond au redim ci-dessus :
' 1 pour int_nbre_de_villes et 2 pour int_nbre_de_pays)
For i = 1 To UBound(txt_pays, 2)
Cells(i, 1).Value = txt_pays(1, i) 'Affichage des pays avec txt_pays(1, i) et affichage des villes avec txt_pays(2, i)
Next i
End Sub
Exercice réalisé en novembre 2020 avec Léa Souleyreau, Guillaume Bucher, Ludovic Pottier et Ronan Jaouannet du Service Commun des Laboratoires