Vous avez apprécié ?
Cliquez ;-)

Cours VBA : les variables (suite)

Les tableaux

Les variables permettent de stocker une valeur par variable, les tableaux permettent de stocker une multitude de valeurs (leur utilisation est proche de celle des variables).

Voici quelques exemples de déclarations :

'Exemple de déclaration de variable
Dim var1 As String
   
'Exemple de déclaration de tableau à 1 dimension
Dim tab1(4) As String
   
'Exemple de déclaration de tableau à 2 dimensions
Dim tab2(4, 3) As String
   
'Exemple de déclaration de tableau à 3 dimensions
Dim tab3(4, 3, 2) As String

Le tableau à 1 dimension :

'Exemple de déclaration de tableau à 1 dimension
Dim tab1(4) As String

Dans cette déclaration, il n'y a qu'un chiffre entre parenthèses, il s'agit donc d'un tableau à une dimension. Ce chiffre indique la dernière case du tableau. tab1(4) est un tableau dont les cases vont de 0 à 4, il s'agit donc d'un tableau de 5 cases :

'Attribution de valeurs aux 5 cases
tab1(0) = "Valeur de la case 0"
tab1(1) = "Valeur de la case 1"
tab1(2) = "Valeur de la case 2"
tab1(3) = "Valeur de la case 3"
tab1(4) = "Valeur de la case 4"
1dim - variables suite
Important : la première case d'un tableau est 0.

Autre exemple, le tableau à 2 dimensions :

'Exemple de déclaration de tableau à 2 dimensions
Dim tab2(4, 3) As String
'Attribution de valeurs aux 3 cases colorées
tab2(0, 0) = "Valeur de la case rouge"
tab2(4, 1) = "Valeur de la case verte"
tab2(2, 3) = "Valeur de la case bleue"
2dim - variables suite

Les constantes

Les constantes permettent de stocker des valeurs comme les variables, à la différence qu'on ne peut pas les modifier (d'où leur nom).

Par exemple, nous pouvons ajouter une constante pour éviter les répétitions de 6.87236476641 :

Sub exemple_const()
    Cells(1, 1) = Cells(1, 2) * 6.87236476641
    Cells(2, 1) = Cells(2, 2) * 6.87236476641
    Cells(3, 1) = Cells(3, 2) * 6.87236476641
    Cells(4, 1) = Cells(4, 2) * 6.87236476641
    Cells(5, 1) = Cells(5, 2) * 6.87236476641
End Sub

Cela facilite la lecture du code (en particulier pour des codes importants) et facilite le changement (manuel) de la valeur de la constante en cas de besoin :

Sub exemple_const()
   'Déclaration de la constante + attribution de sa valeur
    Const TAUX_ANNUEL As Double = 6.87236476641
   
    Cells(1, 1) = Cells(1, 2) * TAUX_ANNUEL
    Cells(2, 1) = Cells(2, 2) * TAUX_ANNUEL
    Cells(3, 1) = Cells(3, 2) * TAUX_ANNUEL
    Cells(4, 1) = Cells(4, 2) * TAUX_ANNUEL
    Cells(5, 1) = Cells(5, 2) * TAUX_ANNUEL
End Sub

La portée des variables

Si la variable est déclarée au début d'une procédure (Sub), elle ne peut être utilisée que dans cette même procédure. La valeur de la variable n'est pas conservée après l'exécution de la procédure.

Sub procedure1()
   Dim var1 As Integer
   ' => Utilisation de la variable dans la procédure uniquement
End Sub

Sub procedure2()
   ' => Impossible d'utiliser var1 ici
End Sub

Pour pouvoir utiliser une variable dans toutes les procédures d'un module, il suffit de la déclarer en début de module. De plus, cela permet de conserver la valeur de la variable jusqu'à la fermeture du classeur.

Dim var1 As Integer

Sub procedure1()
   ' => Utilisation de var1 possible
End Sub

Sub procedure2()
   ' => Utilisation de var1 possible
End Sub

Même principe pour utiliser une variable dans tous les modules, à la différence près que Dim est remplacé par Global :

Global var1 As Integer

Pour conserver la valeur d'une variable à la fin d'une procédure, remplacez Dim par Static :

Sub procedure1()
    Static var1 As Integer
End Sub

Pour conserver les valeurs de toutes les variables d'une procédure, ajoutez Static devant Sub :

Static Sub procedure1()
    Dim var1 As Integer
End Sub

Créer son propre type de variable

Nous n'allons pas nous attarder sur ce point, voici juste un exemple :

'Création d'un type de variable
Type invites
    nom As String
    prenom As String
End Type
   
Sub variables()
    'Déclaration
    Dim p1 As invites
   
    'Attributions des valeurs à p1
    p1.nom = "Smith"
    p1.prenom = "John"
   
    'Exemple d'utilisation
    MsgBox p1.nom & " " & p1.prenom
End Sub