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