VBA – Déclarer (Dim), Créer et Initialiser une Variable de Type Tableau
In this Article
Ce tutoriel montre comment déclarer (Dim), Créer et Initialiser des variables de type tableau en VBA
Qu’est-ce qu’une Variable Tableau en VBA?
Une variable tableau VBA peut être considérée comme un groupe de variables, stockées sous le même nom et ayant le même type de données. Un tableau peut contenir du texte, des chiffres ou des objets.
Vous faites référence à un élément d’un tableau en utilisant son numéro d’index.
Vous pouvez déclarer une variable de tableau de la même manière que vous déclareriez n’importe quelle autre variable en utilisant les mots-clés Dim, Static, Public ou Private.
Tableaux Statiques
Il existe deux types de tableaux : statiques et dynamiques. Un tableau statique est déclaré avec sa taille spécifiée lorsque vous déclarez initialement le tableau. Il est également appelé tableau fixe.
Dim intA(4) as integer
Le tableau ci-dessus est déclaré à l’aide de l’instruction Dim au niveau d’une procédure ou d’un module, et la taille du tableau est de 5 car nous n’avons pas déclaré la valeur LBound du tableau.
Non, ce n’est pas une faute de frappe! La taille du tableau est de 5, bien que nous ayons entré 4 dans le tableau. Cela s’explique par le fait que les index des tableaux commencent automatiquement à zéro.
Index des Tableaux
Les index des tableaux commencent automatiquement à zéro, sauf si l’Option Base 1 est déclarée en haut de votre module de code.
Si l’Option Base 1 est déclarée, les tableaux commencent automatiquement à 1. Cependant, je trouve que déclarer des variables de cette manière est problématique. Les réviseurs de code peuvent ne pas être au courant que les tableaux commencent à zéro ou de la déclaration de l’Option Base 1 Au lieu de cela, je préfère déclarer explicitement les positions de début et de fin des tableaux :
Dim intA(2 To 5) as integer
Remarquez qu’en procédant ainsi, vous pouvez faire commencer le tableau à n’importe quel nombre (pas seulement 1 ou 0).
Tableaux Dynamiques
Une variable Array Dynamique est un tableau dont la taille peut être modifiée au moment de l’exécution. Vous déclarez les variables dynamiques sans taille.
Dim intA() as integer
Vous pouvez utiliser l’instruction ReDim pour spécifier la taille du tableau après sa création.
ReDim intA(2)
Vous pouvez redimensionner un tableau dynamique à tout moment. Toutefois, lorsque vous utilisez l’instruction ReDim, toutes les valeurs existantes sont effacées. Pour préserver les valeurs existantes du tableau, utilisez plutôt ReDim Preserve.
ReDim Preserve intA(2)
Vous pouvez déclarer un tableau dynamique au niveau d’une procédure, d’un module ou au niveau global, mais vous ne pouvez utiliser l’instruction ReDim que dans une procédure.
Tableaux d’Objets de Type « Variant »
Les tableaux de variants sont des tableaux dynamiques avec lesquels il est plus facile de travailler.
Dim varNames()
Notez que vous n’avez pas besoin de spécifier le type de données (il est supposé de type variant par défaut) ou la taille du tableau. Comme nous le verrons plus loin, vous pouvez initialiser les tableaux de variants à l’aide de la fonction Array (pas besoin de redimensionner les tableaux au préalable)!
Déclarer des Modules et des Tableaux Publics
Comme nous l’avons vu ci-dessus, les tableaux peuvent être déclarés dans des procédures, pour être utilisés dans cette procédure :
Sub TableauStatique()
' Déclare le tableau avec une valeur inférieure LBound de 1 et une valeur supérieure UBound de 4
Dim IntA(1 To 4) as Integer
End Sub
Mais ils peuvent également être déclarés au niveau du module ou au niveau global.
Option explicit
'Déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4
Dim IntA(1 à 4) as Integer
Sub TableauStatique()
End Sub
Dans cet exemple, la variable tableau peut être appelée n’importe où dans ce module de code. Au lieu de cela, vous pouvez déclarer un tableau public qui peut être utilisé dans l’ensemble de votre projet VBA (voir la section suivante).
Déclaration d’un Tableau Public
Vous déclarez un tableau statique public comme vous déclareriez une variable publique.
Public strNoms(3) as String
Cette déclaration doit être placée en haut de votre module, sous Option Explicit. Elle peut ensuite être utilisée dans l’ensemble de votre projet VBA, dans n’importe quel module ou procédure.
Si vous déclarez le tableau en haut du module, mais avec le mot-clé Dim, l’utilisation de ce tableau est limitée à ce module individuel. Si vous essayez d’utiliser le tableau dans un autre module, vous obtiendrez une erreur.
Initialisation des Tableaux
Vous pouvez attribuer des valeurs à un tableau statique de la manière suivante.
Sub TableauStatique()
' Déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4
Dim IntA(1 To 4) As Integer
' Initialise le tableau
IntA(1) = 10
IntA(2) = 20
IntA(3) = 30
IntA(4) = 40
' Affiche le résultat de la position 2 du tableau dans la fenêtre d'exécution
Debug.Print IntA(2)
End Sub
Si vous exécutez la procédure ci-dessus, la valeur 20 sera affichée dans la fenêtre d’exécution.
Vous pouvez également affecter les valeurs à un tableau dynamique de la même manière
Sub TableauDynamique()
' Déclare le tableau dynamique en omettant les valeurs liées
Dim IntA() As Integer
' Initialise le tableau
ReDim IntA(1 To 4)
IntA(1) = 10
IntA(2) = 20
IntA(3) = 30
IntA(4) = 40
' Affiche le résultat de la position 2 du tableau dans la fenêtre d'exécution
Debug.Print IntA(2)
End Sub
Fonction Array
Vous pouvez utiliser la fonction Array, avec un tableau d’objets de type variant uniquement, ce qui peut être plus facile que d’utiliser la méthode standard.
' Remplissage du tableau
intA() = Array(10, 20, 30, 40)
Remplir un Tableau avec une Boucle
Vous pouvez également remplir des tableaux en parcourant une plage de cellules en boucle dans Excel
Sub TestTableauDynamiquePlageExcel()
' Déclare le tableau
Dim strNames() As String
' déclare un nombre entier pour compter les lignes d'une plage
Dim n As Integer
' Déclaration d 'un nombre entier pour la boucle
Dim i As Integer
' Compte les lignes d'une plage
n = Range("A1", Range("A1").End(xlDown)).Rows.Count
' Redimensionne le tableau en fonction du nombre de lignes de la plage.
ReDim strNames(n)
For i = 0 To n
strNames(i) = Range("A1").Offset(i + 1, 0)
Next i
' Affiche les valeurs dans le tableau
MsgBox Join(strNames())
End Sub
Réinitialiser les Tableaux
Vous pouvez réinitialiser votre tableau à n’importe quelle étape de votre code, mais vous perdrez alors la valeur originale contenue à cette position dans votre tableau.
Sub TableauStatique2()
' Déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4
Dim IntA(1 To 4) As Integer
' Initialise le tableau
IntA(1) = 10
IntA(2) = 20
IntA(3) = 30
IntA(4) = 40
' Affiche le résultat de la position 2 du tableau dans la fenêtre immédiate
Debug.Print IntA(2)
' Initialise à nouveau le tableau
IntA(2) = 200
Debug.Print IntA(2)
End Sub
Dans l’exemple ci-dessus, le tableau statique conservera toutes les valeurs, sauf celle de la position 2 – cette valeur deviendra 200.
Utilisation de ReDim
Si vous utilisez un tableau dynamique, l’instruction ReDim est utilisée pour définir la taille de votre tableau. Vous pouvez utiliser l’instruction ReDim ultérieurement dans votre code pour modifier la taille du tableau autant de fois que vous le souhaitez. La ligne de code ci-dessous réinitialisera le tableau intA pour qu’il ait une taille de 2 (n’oubliez pas qu’un index de tableau commence à 0!)
ReDim intA(1) as Integer
Ainsi, le code incluant l’instruction ReDim ressemblerait à l’exemple ci-dessous.
Sub TableauDynamique2()
' Déclare le tableau dynamique en omettant les valeurs liées
Dim IntA() As Integer
' Initialise le tableau
ReDim IntA(2)
IntA(0) = 2
IntA(1) = 5
IntA(2) = 9
' Affiche le résultat de la position 1
Debug.Print IntA(1)
' ReDim le tableau pour changer sa taille
ReDim IntA(3)
IntA(0) = 6
IntA(1) = 8
' Affiche le nouveau résultat de la position 1
Debug.Print IntA(1)
End Sub
Si vous exécutez la procédure ci-dessus, la valeur 5 sera affichée dans la fenêtre exécution, puis la valeur 8 sera affichée une fois que nous aurons redimensionné le tableau en utilisant ReDim et que nous l’aurons repeuplé. Cependant, comme nous n’avons pas rempli IntA(2), et que nous n’avons pas utilisé Re-Dim Preserve, la valeur à cette position dans le tableau sera supprimée et les positions 3 et 4 du tableau seront toutes deux égales à zéro.
Utilisation de ReDim Preserve
Si nous utilisons ReDim Preserve, les valeurs originales contenues dans le tableau seront conservées.
Sub TableauDynamique2Preserve()
' Déclare le tableau dynamique en omettant les valeurs liées
Dim intA() As Integer
' Initialise le tableau
ReDim intA(2)
intA(0) = 2
intA(1) = 5
intA(2) = 9
' Affiche le résultat de la position 2
Debug.Print intA(2)
' ReDim le tableau pour changer sa taille
ReDim Preserve intA(3)
intA(0) = 6
intA(1) = 8
' Affiche à nouveau résultat de la position 2
Debug.Print intA(2)
End Sub
Dans les deux boîtes de message affichées ci-dessus, le nombre 9 apparaît car l’instruction ReDim Preserve a conservé cette valeur à cette position.