TOP

VBA-Leçon 6.2. Types de données (Variables)

Dans la leçon précédente, nous avons examiné les variables dans lesquelles certaines données peuvent être écrites, mais elles ne peuvent pas contenir plus d'une valeur. Pour contourner cette limitation, il existe des tableaux dans VBA qui peuvent stocker plusieurs valeurs.


Voici quelques exemples de différents tableaux :

Sub variables()
    'Un exemple de déclaration d'une variable
    Dim var1 As String
    
    'Un exemple de déclaration d'un tableau à 1 dimension
    Dim array1(4) As String
    
    'Un exemple de déclaration d'un tableau à 2 dimensions
    Dim array2(4, 3) As String
    
    'Un exemple de déclaration d'un tableau à 3 dimensions
    Dim array3(4, 3, 2) As String
End Sub

Tableau unidimensionnel

Dim array1(4) As String

Un tableau unidimensionnel peut être considéré comme un tableau composé d’une seule colonne. Le tableau array1(4) est un tableau unidimensionnel pouvant contenir 5 enregistrements. Pourquoi 5 ? Parce que le nombre d'enregistrements dans le tableau commence à zéro (0, 1, 2, 3, 4).

Considérons maintenant un tableau à 2 dimensions :

Dim array2(4, 3) As String

Cela ressemblera déjà à un tableau avec 5 lignes et 4 colonnes :

'Attribuer des valeurs aux cellules colorées
array2(0, 0) = "Valeur en cellule rouge"
array2(4, 1) = "Valeur dans la cellule verte"
array2(2, 3) = "La valeur dans la cellule bleue"

Constantes

Comme les variables, les constantes peuvent être utilisées pour stocker des valeurs, mais la différence est que les valeurs ne peuvent pas changer. On peut ajouter une constante pour éviter de répéter la valeur, par exemple 13.14 :

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

Cela rend le code plus facile à comprendre et à modifier. Il permet également de modifier la valeur de la constante tout simplement :

Sub const_example()
   'Déclarer une constante + attribuer une valeur
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

Portée des variables

Si une variable est déclarée au début d'une procédure (Sub), alors elle ne peut être utilisée que dans cette procédure. La valeur de la variable ne sera plus disponible une fois la procédure exécutée.

Sub procedure1()
   Dim var1 As Integer
   '=> La variable n'est valide que dans cette procédure
End Sub

Sub procedure2()
   '=> var1 ne peut pas être utilisé ici
End Sub

Pour utiliser une variable dans n'importe quelle procédure de module, il suffit de la déclarer au tout début du module. Et si vous déclarez une variable comme celle-ci, elle sera disponible jusqu'à la fermeture du classeur.

Dim var1 As Integer

Sub procedure1()
   '=> var1 peut être utilisé ici
End Sub

Sub procedure2()
   '=> var1 peut également être utilisé ici
End Sub

Si vous souhaitez utiliser la même variable dans tous les modules du livre, vous devez uniquement remplacer Dim par Global dans l'exemple précédent :

Global var1 As Integer

Pour utiliser une variable après avoir exécuté la procédure dans laquelle elle apparaît, remplacez Dim par Static :

Sub procedure1()
    Static var1 As Integer
End Sub

Pour utiliser les valeurs de toutes les variables dans la procédure, ajoutez Static avant Sub :

Static Sub procedure1()
    Dim var1 As Integer
End Sub

Créer votre propre type de variable

Voici un exemple rapide de la façon dont vous pouvez créer votre propre type :

 'Création d'un type de variable
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    'Déclaration d'une variable
    Dim cust1 As customers
   
    'Attribuer une valeur à cust1
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    'Exemple d'utilisation
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub