Cours VBA : les variables

Les variables permettent de stocker toutes sortes de données.

Voici un premier exemple :

'Affichage de la valeur de la variable dans une boîte de dialogue
Sub variables()

    'Déclaration de la variable
    Dim maVariable As Integer
	
    'Attribution d'une valeur à la variable
    maVariable = 12
	
    'Affichage de la valeur de maVariable dans une MsgBox
    MsgBox maVariable
	
End Sub

Cette première ligne de code est la déclaration de la variable (généralement placée en début de procédure).

Dim maVariable As Integer

Déclarer ses variables n'est pas obligatoire mais recommandé. Cela permet de s'y retrouver plus facilement, peut aider dans certains cas à résoudre plus facilement les problèmes, etc. Mieux vaut donc prendre l'habitude de déclarer correctement ses variables.

Le type de la variable indique la nature de son contenu (texte, nombres, date, etc.).

Une valeur est ensuite donnée à cette variable :

maVariable = 12

Et enfin, la valeur de la variable est affichée dans une boîte de dialogue :

MsgBox maVariable

MsgBox affiche une valeur dans une boîte de dialogue (les boîtes de dialogue seront détaillées dans quelques leçons).

Le résultat de ce code :

msgbox variables

Si pour le moment vous ne comprenez pas bien l'intérêt d'utiliser des variables, soyez rassuré, les exemples abordés au cours des prochaines leçons vous en démontreront l'utilité.

Les types de variables

NomTypeDétailsSymbole
ByteNumériqueNombre entier de 0 à 255.
IntegerNumériqueNombre entier de -32'768 à 32'767.%
LongNumériqueNombre entier de - 2'147'483'648 à 2'147'483'647.&
CurrencyNumériqueNombre à décimale fixe de -922'337'203'685'477.5808 à 922'337'203'685'477.5807.@
SingleNumériqueNombre à virgule flottante de -3.402823E38 à 3.402823E38.!
DoubleNumériqueNombre à virgule flottante de -1.79769313486232E308 à 1.79769313486232E308.#
StringTexteTexte.$
DateDateDate et heure.
BooleanBooleanTrue (vrai) ou False (faux).
ObjectObjetObjet.
VariantTousTout type de données (type par défaut si la variable n'est pas déclarée).

Quelques exemples avec différents types :

'Exemple : nombre entier
Dim nbEntier As Integer
nbEntier = 12345
    
'Exemple : nombre à virgule
Dim nbVirgule As Single
nbVirgule = 123.45

'Exemple : texte
Dim varTexte As String
varTexte = "Excel-Pratique.com"

'Exemple : date
Dim varDate As Date
varDate = "19/03/2024"

'Exemple : vrai/faux
Dim varBoolean As Boolean
varBoolean = True
    
'Exemple : objet (objet Worksheet pour cet exemple)
Dim varFeuille As Worksheet
Set varFeuille = Sheets("Feuil2") 'Set => attribution d'une valeur à une variable objet
    
'Exemple d'utilisation de la variable objet : activation de la feuille
varFeuille.Activate

Les symboles indiqués dans le tableau ci-dessus permettent de raccourcir les déclarations de variables.

Par soucis de lisibilité, ils ne seront pas utilisés dans les leçons mais voici tout de même un exemple :

Dim exemple As Integer
Dim exemple%

Ces deux lignes sont identiques.

Il est possible de forcer les déclarations de variables en plaçant Option Explicit tout au début du module (une erreur sera ainsi générée en cas d'oubli de déclaration).

Exemple pratique

Nous allons maintenant créer par étapes une macro qui va récupérer le nom dans la cellule A2, le prénom dans la cellule B2, l'âge dans la cellule C2 et qui va les afficher dans une boîte de dialogue.

Fichier source : exercice_variables.xlsm

Commençons par déclarer les variables (sur la même ligne, séparées par des virgules) :

Sub variables()

    'Déclaration des variables
    Dim nom As String, prenom As String, age As Integer
    
End Sub

Attribuons ensuite les valeurs des cellules aux variables :

Sub variables()

    'Déclaration des variables
    Dim nom As String, prenom As String, age As Integer

    'Valeurs des variables
    nom = Cells(2, 1)
    prenom = Cells(2, 2)
    age = Cells(2, 3)

End Sub

Et enfin, affichons le résultat dans la boîte de dialogue en concaténant les valeurs avec & (comme dans les formules Excel) :

Sub variables()

    'Déclaration des variables
    Dim nom As String, prenom As String, age As Integer

    'Valeurs des variables
    nom = Cells(2, 1)
    prenom = Cells(2, 2)
    age = Cells(2, 3)

    'Boîte de dialogue
    MsgBox nom & " " & prenom & ", " & age & " ans"

End Sub

Ce qui nous donne :

resultat variables

Nous allons maintenant chercher à afficher dans la boite de dialogue la ligne du tableau correspondant au numéro indiqué dans la cellule F5.

Voici l'objectif :

objectif variables

Prenez un moment pour effectuer cette modification vous-même avant de passer à la solution un peu plus bas ...

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

La solution :

Sub variables()

    'Déclaration des variables
    Dim nom As String, prenom As String, age As Integer, numeroLigne As Integer
        
    'Valeurs des variables
    numeroLigne = Range("F5") + 1
    nom = Cells(numeroLigne, 1)
    prenom = Cells(numeroLigne, 2)
    age = Cells(numeroLigne, 3)
    
    'Boîte de dialogue
    MsgBox nom & " " & prenom & ", " & age & " ans"

End Sub

Une variable numeroLigne a été ajoutée :

'Déclaration des variables
Dim nom As String, prenom As String, age As Integer, numeroLigne As Integer

La variable prend ensuite la valeur de la cellule F5 à laquelle nous ajoutons 1 (pour ne pas tenir compte de la première ligne qui contient les titres du tableau).

La variable numeroLigne aura donc pour valeur le numéro de ligne des cellules qui nous intéressent :

numeroLigne = Range("F5") + 1

Il ne reste plus qu'à remplacer les numéros de ligne dans Cells par notre variable :

nom = Cells(numeroLigne, 1)
prenom = Cells(numeroLigne, 2)
age = Cells(numeroLigne, 3)

Notre macro affiche maintenant la ligne du tableau qui nous intéresse.

objectif2 variables

Notez au passage que nous pouvons réduire cette procédure entière sur une ligne :

Sub variables()
    MsgBox Cells(Range("F5")+1,1) & " " & Cells(Range("F5")+1,2) & ", " & Cells(Range("F5")+1,3) & " ans"
End Sub

Le code fonctionne correctement, il est néanmoins beaucoup moins lisible que le précédent et plus difficile à entretenir par la suite (les codes ne seront donc pas réduits dans les leçons afin d'en faciliter la compréhension).