VBA – Déclarer (Dim), Créer et Initialiser une Variable de Type Tableau

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on décembre 23, 2021

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.

vba option base

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.

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA