VBA - Déclarer (Dim), créer et initialiser une variable de tableau

Ce tutoriel montrera comment déclarer (Dim), créer et initialiser des variables de tableau dans VBA

Qu'est-ce qu'une variable de tableau VBA ?

Une variable de 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 stocker du texte, des nombres ou des objets.

Vous faites référence à un élément dans un tableau en utilisant son numéro d'index.

Vous pouvez déclarer une variable tableau de la même manière que vous déclareriez n'importe quelle autre variable en utilisant le mot clé Dim, Static, Public ou Private.

Tableaux statiques

Il existe 2 types de tableaux - Statique et Dynamique. Un tableau statique est déclaré avec sa taille spécifiée lorsque vous déclarez initialement le tableau. On l'appelle aussi un tableau fixe.

1 Dim intA(4) comme entier

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, malgré la saisie de 4 dans le tableau. C'est parce que les index de tableau commencent automatiquement à zéro.

Index de tableau

Les index de tableau commencent automatiquement à zéro à moins que Base d'options 1 est déclaré en haut de votre module de code.

Si Base d'options 1 est déclaré, les tableaux commenceront 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 savoir que les tableaux commencent à zéro ou de la déclaration Option Base 1

Au lieu de cela, je préfère déclarer explicitement les positions de début et de fin des tableaux :

1 Dim intA(2 à 5) comme entier

Notez que lorsque vous le faites, vous pouvez démarrer le tableau à n'importe quel nombre (pas seulement 1 ou 0).

Tableaux dynamiques

Une variable de tableau dynamique est un tableau dont la taille peut être modifiée au moment de l'exécution. Vous déclarez des variables dynamiques sans taille.

1 Dim intA() comme entier

Vous pouvez utiliser l'instruction ReDim pour spécifier la taille du tableau une fois le tableau créé.

1 ReDim intA(2)

Vous pouvez redimensionner un tableau dynamique à tout moment. Cependant, lors de l'utilisation de l'instruction ReDim, toutes les valeurs existantes sont effacées. Pour conserver les valeurs de tableau existantes, utilisez ReDim préserver au lieu.

1 ReDim Preserve intA(2)

Vous pouvez déclarer un tableau dynamique au niveau d'une procédure, d'un module ou global, mais vous ne pouvez utiliser l'instruction ReDim que dans une procédure.

Tableaux de variantes

Les tableaux de variantes sont des tableaux dynamiques avec lesquels il est plus facile de travailler.

1 Dim varNames()

Notez que vous n'avez pas besoin de spécifier le type de données (il est supposé être une variante) ou la taille du tableau.

Comme nous le verrons ci-dessous, vous pouvez initialiser des tableaux de variantes à l'aide de la fonction Array (inutile de redimensionner les tableaux au préalable) !

Déclarer le module et les tableaux publics

Comme indiqué ci-dessus, les tableaux peuvent être déclarés dans des procédures, pour être utilisés dans cette procédure :

1234 Sous TableauStatique()'déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4Dim IntA (1 à 4) en tant qu'entierFin du sous-marin

Mais ils peuvent aussi être déclarés au niveau Module ou Global.

1234567 Option Explicite'déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4Dim IntA (1 à 4) en tant qu'entierSous TableauStatique()Fin du sous-marin

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é tout au long de votre projet VBA (voir la section suivante).

Déclarer un tableau public

Vous déclarez un tableau public statique comme vous déclareriez une variable publique.

1 Public strNames(3) en tant que chaîne

Cette déclaration devra aller en haut de votre module, sous Option Explicit. Il pourrait ensuite être utilisé tout au long 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, alors l'utilisation de ce tableau est limitée à ce module individuel. Essayer d'utiliser le tableau dans un module séparé entraînerait une erreur.

Initialiser les tableaux

Vous pouvez affecter des valeurs à un tableau statique de la manière suivante.

1234567891011 Sous TableauStatique()'déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4Dim IntA (1 à 4) en tant qu'entier'initialise le tableauIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'afficher le résultat de la position 2 du tableau dans la fenêtre immédiateDebug.Print IntA(2)Fin du sous-marin

Si vous exécutez la procédure ci-dessus, la valeur 20 sera affichée dans la fenêtre immédiate.

Vous pouvez également affecter les valeurs à un tableau dynamique de la même manière

12345678910111213 Sous-tableau dynamique()'déclare un tableau dynamique mais en omettant les valeurs liéesDim IntA() en tant qu'entier'initialise le tableauReDim IntA (1 à 4)IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'afficher le résultat de la position 2 du tableau dans la fenêtre immédiateDéboguer.ImprimerIntA(2)Fin du sous-marin

Fonction de tableau

Cependant, avec le tableau de variantes uniquement, vous pouvez utiliser la fonction Array qui peut être plus simple que d'utiliser la méthode standard.

12 'remplir le tableauintA() = Tableau (10, 20, 30, 40)

Remplir le tableau avec la boucle

Vous pouvez également remplir des tableaux en parcourant une plage de cellules dans Excel

1234567891011121314151617 Sous-testDynamicArrayFromExcel()'déclare le tableauDim strNames() en tant que chaîne'déclare un entier pour compter les lignes d'une plageDim n en tant qu'entier'déclare un entier pour la boucleDiminuer en tant qu'entier'compter les lignes dans une plagen = Range("A1", Range("A1").End(xlDown)).Rows.Count'redim the array au nombre de lignes de la plage.ReDim strNames(n)Pour i = 0 à nstrNames(i) = Range("A1").Offset(i + 1, 0)Ensuite je'afficher les valeurs dans le tableauMsgBox Join(strNames())Fin du sous-marin

Réinitialiser les tableaux

Vous pouvez réinitialiser votre tableau à n'importe quelle étape de votre code, mais vous perdrez alors la valeur d'origine contenue à cette position dans votre tableau.

1234567891011121314 Sous TableauStatique()'déclare le tableau avec une valeur LBound de 1 et une valeur UBound de 4Dim IntA (1 à 4) en tant qu'entier'initialise le tableauIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'afficher le résultat de la position 2 du tableau dans la fenêtre immédiateDebug.Print IntA(2)'réinitialiser le tableauintA(2)= 200Debug.Print IntA(2)Fin du sous-marin

Dans l'exemple ci-dessus, le tableau statique conservera toutes les valeurs, à l'exception de la valeur en position 2 - cette valeur passera à 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 nécessaire. La ligne de code ci-dessous réinitialisera le tableau intA pour avoir une taille de 2 (Rappelez-vous - un index de tableau commence à 0 !)

1 ReDim intA(1) en tant qu'entier

Ainsi, le code comprenant l'instruction ReDim ressemblerait à l'exemple ci-dessous.

1234567891011121314151617 Sous-test TableauDynamique()'déclare le tableauDim intA() en tant qu'entierReDim intA(2)'remplir le tableau avec des nombresintA(0) = 2intA(1) = 5intA(2) = 9'afficher le numéro en position 1Debug.Print intA(1)'redim the array pour changer la tailleReDim intA(3)intA(0) = 6intA(1) = 8'montre le numéro en position 1 cette foisDebug.Print intA(1)Fin du sous-marin

Si vous exécutez la procédure ci-dessus, la valeur de 5 sera affichée dans la fenêtre immédiate, puis une valeur de 8 sera affichée une fois que nous aurons redimensionné le tableau à l'aide de 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 dans le tableau seront à zéro.

Utilisation de ReDim Preserve

Si nous utilisons ReDim Preserve, il conservera les valeurs d'origine contenues dans le tableau.

1234567891011121314151617 Sous-test TableauDynamique()'déclare le tableauDim intA() en tant qu'entierReDim intA(2)'remplir le tableau avec des nombresintA(0) = 2intA(1) = 5intA(2) = 9'afficher le numéro en position 2Debug.Print intA(2)'redim le tableauReDim intA(3)intA(0) = 6intA(1) = 8'afficher à nouveau le numéro en position 2Debug.Print intA(2)Fin du sous-marin

Dans les deux boîtes de message affichées ci-dessus, le numéro 9 apparaîtra car l'instruction ReDim Preserve a conservé cette valeur dans cette position.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave