On peut concevoir un tableau VBA comme une collection de variables VBA, mais
comme les tableaux existaient en Basic
bien avant l'introduction de la
programmation objet, le traitement des tableaux diffère du traitement des
collections.
Un tableau VBA doit être déclaré.
Le nombre d'éléments d'un tableau peut être fixé lors de la déclaration (nombre fixe d'éléments) ou lors de l'exécution (tableau dynamique).
Exemples:
La seule façon d'utiliser un élément d'un tableau est d'utiliser son adresse:
Lorsqu'un tableau a une dimension, comme tTableau(1 to 15), c'est un vecteur, et on le représente comme une liste.
Lorsqu'un tableau a deux dimensions, comme tTableau(1 to 5, 1 To 5),
c'est une matrice, et on le représente comme un tableau,
le premier indice étant
le numéro de ligne, le second le numéro de colonne.
Lorsqu'un tableau a trois dimensions, comme tTableau(1 to 5, 1 To 5, 1 To 5),
c'est un cube, et on ne le représente pas.
Le premier indice est le numéro de
ligne, le second le numéro de colonne et le troisième le numéro de rangée
(profondeur).
Un tableau peut avoir plus de 3 dimensions, mais les applications sont rares.
Certaines instructions VBA sont spécifiques aux tableaux:
ReDim [Preserve] nom(indices) [As type] [, nom(indices) [As type]] . . . Où:
Utilisez ReDim pour les tableaux dont les dimensions ne sont pas précisées dans l'instruction Dim. |
LBound(NomTableau[, dimension]) Où
LBound est utilisé pour obtenir la valeur minimale de la dimension d'un tableau VBA. |
UBound(NomTableau[, dimension]) Où
UBound est utilisé pour obtenir la valeur maximale de la dimension d'un tableau VBA.
|
Ces trois instructions sont utiles lorsqu'on utilise un tableau
dynamique, c'est à dire dont la dimension n'est connue
qu'au moment de
l'exécution (comme une liste d'étudiants ou d'items d'une facture),
par
opposition à un tableau statique, dont le nombre d'éléments est connu au moment
de l'écriture du programme (une liste de noms de mois, par exemple).
Si on a une liste de valeurs à manipuler ou produire en VBA Excel, doit-on le faire en utilisant un plage Excel ou un tableau VBA?
Avantages de la plage Excel:
Avantages du tableau VBA:
Vous pouvez copier directement une plage Excel dans un tableau VBA dynamique
de type Variant,
sans même utiliser l'instruction ReDim:
Dim vTableau() As Variant vTableau = Range("Plage")
a l'effet suivant:
Bien noter que vTableau doit être un tableau dynamique de type Variant.
Vous pouvez copier directement un tableau VBA dans une plage Excel:
Range(Cells(1, 1), Cells(UBound(vTableau, 1), UBound(vTableau, 2))) = vTableau
copie tout le tableau vTableau dans la plage de même dimension commençant en
A1 de la feuille active.
vTableau peut être de n'importe quel type.
Sub ExemplesTableaux() 'Auteur: Michel Berthiaume 'Exemples de manipulation de collection et de tableau Dim cNombres() As Currency Dim vTableau() As Variant Dim lLigne As Long, lColonne As Long Dim tDépart As Date With Worksheets("Tableaux") Cells.Clear 'Créer une matrice 10000x100 de nombres dans Excel tDépart = Now 'Date et heure du départ For lLigne = 1 To 10000 For lColonne = 1 To 100 .Cells(lLigne, lColonne) = lLigne + lColonne Next Next MsgBox "Création de matrice Excel en " & Round((Now - tDépart) * 24 * 60 * 60, 2) & " secondes" 'Créer une matrice 10000x100 de nombres dans VBA ReDim cNombres(1 To 10000, 1 To 100) tDépart = Now 'Date et heure du départ For lLigne = 1 To 10000 For lColonne = 1 To 100 cNombres(lLigne, lColonne) = lLigne + lColonne Next Next MsgBox "Création de matrice VBA en " & Round((Now - tDépart) * 24 * 60 * 60, 10) & " secondes" 'Copie d'une matrice Excel dans un tableau VBA 'ATTENTION: le tableau DOIT ÊTRE DE TYPE Variant 'Le tableau est automatiquement redimensionné aux dimensions de la plage vTableau = Range(.Cells(1, 1), .Cells(1000, 100)) 'Copie d'une matrice VBA dans un tableau Excel .Cells.Clear .Range(.Cells(1, 1), .Cells(UBound(vTableau, 1), UBound(vTableau, 2))) = vTableau End With End Sub |
Abonnez-vous à l'infolettre Abonnez-vous à l'infolettre du site pour recevoir les dernières nouvelles et aussi des formations à votre courriel. Vous pouvez voir la liste des dernières infolettres ici. |