Les variables, les constantes
Définitions
En programmation VBA, pour stocker des informations qui seront utilisées dans vos programmes, vous utilisez des "récipients" qu’on appelle variable ou constante. Une constante a une valeur unique qui ne sera jamais changée, alors qu’une variable peut avoir plusieurs valeurs différentes durant l’exécution de votre programme.
Pour manipuler des variables vous devez connaître deux attributs :
-
le nom de la variable, que vous pourrez choisir selon vos besoins, en respectant quelques règles évoquées dans le paragraphe Convention de nommage,
-
le type de donnée qui sera stockée dans la variable.
Déclaration
Pour pouvoir utiliser une variable, il faut dans un premier temps la déclarer, pour indiquer au programme qu’elle sera utilisée ultérieurement. Les déclarations se font donc d’habitude au début du programme et doivent toujours se faire en amont de la première utilisation desdites variables.
La syntaxe générale de déclaration d’une variable est la suivante :
Dim NomDeLaVariable As TypeDeLaVariable
Par exemple, la ligne suivante permet de déclarer la variable dtDateDevis, qui contiendra une date.
Dim dtDateDevis As Date
Exemple 1 : déclaration d’une variable de type Date
Le mot-clé Dim sert à indiquer la déclaration d’une variable. Suit alors le nom de la variable. Vous trouvez ensuite le mot-clé As qui permet de préciser le type de donnée qui sera contenu dans la variable. Enfin, vous trouvez le type de donnée, dont vous verrez les types principaux dans la section suivante.
Dans l’exemple 1, le type de donnée est Date, qui permet de stocker une date et une heure dans la variable.
Les types de données
Il existe des centaines de types de données, mais vous verrez ici les types de données les plus répandus et basiques qui vous serviront toujours.
Les types numériques
Il existe plusieurs types de données permettant de gérer les valeurs numériques, selon que vous ayez besoin de stocker des petites ou des grandes valeurs, des valeurs entières ou décimales.
Les valeurs entières - Byte, Integer et Long
Le type Byte permet de stocker une valeur entière comprise entre 0 et 255. Le terme Byte en anglais signifie octet, soit 8 bits.
Dim b As Byte
b = 12
Exemple 2 : déclaration d’une variable de type Byte
Le type Integer permet de stocker une valeur entière comprise entre -32 768 et 32 767. Il est stocké sur 16 bits (2 octets).
Dim i As Integer
i = 2390
Exemple 3 : déclaration d’une variable de type Integer
Le type Long permet de stocker une valeur entière comprise entre -2 147 483 648 et 2 147 483 647. Il est stocké sur 32 bits (4 octets).
Dim l As Long
l = 45678
Exemple 4 : déclaration d’une variable de type Long
Si vous utilisez une variable de type entier, si vous lui affectez une valeur décimale (par exemple i = 1.23), la valeur qui sera affectée à la variable i sera alors 1. Si tel est le cas, privilégiez une variable de type décimal.
Les valeurs décimales - Single, Double et Currency
Lorsque les valeurs numériques que vous souhaitez manipuler sont des décimales (comme 3.14, 2.50 ou 0.75), vous disposez également de plusieurs types de données qui permettent de stocker de telles valeurs. Remarquez que le séparateur décimal en programmation VBA est le point (.).
Le type Single permet de stocker des nombres décimaux, pour des valeurs comprises entre -3.402823E38 et -1.401298E-45 (E38 signifiant 10 puissance 38 soit un 1 suivi de trente-huit 0) pour les valeurs négatives et entre 1.401298E-45 et 3.402823E38 pour les valeurs positives. Il utilise 32 bits (4 octets).
Dim s As Single
s=4E-2
'est équivalent à
s=0.04
Exemple 5 : déclaration d’une variable de type Single
Le type Double permet quant à lui de stocker...
Déclaration multiple
Si vous avez plusieurs variables à utiliser dans votre programme, par exemple une variable dtDateDevis de type Date, ainsi qu’une variable strTitreProjet de type String, et une autre variable strBureau, également de type String, vous avez plusieurs façons de les déclarer.
'Déclarations séparées par des virgules (le plus courant)
Dim dtDateDevis As Date, strTitreProjet As String, strBureau As String
'Déclarations sur plusieurs lignes (1 ligne par type de donnée)
Dim dtDateDevis As Date
Dim strTitreProjet As String, strBureau As String
'Déclarations sur une seule ligne (peu fréquent)
Dim dtDateDevis As Date : Dim strTitreProjet As String : Dim strBureau
As String
Exemple 12 : les différentes façons d’effectuer des déclarations multiples
Comme chacune des façons de déclarer les variables est équivalente aux autres, utilisez celle qui vous apparaît comme la plus facile pour vous.
Attention à bien spécifier pour chaque variable le type de données qui lui correspond, sinon vous risquez d’utiliser le Variant par défaut.
Dim dtDateDevis, strTitreProjet As String
Exemple 13 : une déclaration incomplète
Dans l’exemple précédent, vous aurez une variable de type Variant dtDateDevis...
Affecter une valeur à une variable
Lorsque vous avez déclaré vos variables, vient le temps de les utiliser. Comme vous avez pu le voir dans les exemples précédents, la syntaxe pour affecter une valeur à une variable sera la suivante :
NomDeVotreVariable = valeur_assignee
Comme ceci :
Dim X As Integer
X = 28
Exemple 14 : déclaration et affectation d’une variable
L’affectation se fait au travers du caractère égal =. La valeur assignée se trouvant à droite du signe, alors que la variable se retrouve à gauche. Le calcul s’effectue de droite à gauche pour l’affectation. Après l’exécution de la ligne, la variable X contient la valeur 28.
Lire une valeur de variable
De la même façon qu’on utilise le signe = pour affecter une valeur à une variable, on utilise le signe = pour lire la valeur d’une variable. Au lieu de la positionner à gauche du signe =, elle le sera à droite.
Dim i As Integer, j As Integer
i = 1
j = i + 3
Exemple 15 : lecture et affectation d’une variable
Dans le code précédent, vous affectez la valeur 1 à la variable i, puis vous additionnez la valeur de la variable i et 3, pour l’affecter à la variable j. Après l’exécution des instructions, vous aurez donc la valeur 1 dans la variable i et la valeur 4 dans la variable j.
Convertir un type de données en un autre
Comme vous le verrez durant la lecture de cet ouvrage, il peut parfois être utile de transformer un type de données en un autre type de données, pour manipuler la donnée plus facilement.
Qu’il s’agisse de passer d’une valeur numérique au texte, de transformer du texte en date, ou encore de transformer une date en valeur numérique, il existe plusieurs fonctions qui permettent ces conversions.
Par exemple, pour convertir une chaîne de caractères en valeur numérique entière, vous pouvez utiliser la fonction CInt(), ou encore pour convertir une valeur numérique en valeur booléenne, vous pouvez utiliser la fonction CBool().
?CInt("456")
456
?CBool(-1)
Vrai
Pour qu’une conversion se fasse, il faut bien entendu que la valeur une fois convertie appartienne bien à l’intervalle des valeurs autorisées par son type converti. Les conversions entre valeurs numériques sont relativement peu courantes, alors que celles entre chaînes de caractères ou dates vers valeur numérique, et inversement, sont plutôt fréquentes.
Voici un tableau des fonctions de conversions existantes :
Type de données cible |
Fonction de conversion |
Exemple |
Boolean |
CBool |
CBool(-1) =>Vrai |
Byte |
CByte |
CByte("12")=>12 |
Currency |
CCur |
CCur("14")=>14... |
Les tableaux
Concept de tableau
Lorsque vous souhaitez manipuler des groupes de données du même type, il est possible de les disposer dans un tableau. Tout comme vous manipulez les données sous Excel, il est possible d’accéder aux données d’un tableau en utilisant leur indice au sein de celui-ci.
Un tableau peut être constitué d’une ou de plusieurs dimensions. Vous verrez des exemples de tableaux à 2 voire 3 dimensions dans les paragraphes qui suivent. Lors de la déclaration du tableau, vous pouvez préciser une taille fixe pour le tableau, ou le définir comme tableau de taille dynamique (sa taille sera définie plus tard dans le programme).
Tous les types de données peuvent faire l’objet d’un tableau.
Déclaration d’un tableau
De la même façon que vous devez déclarer une variable pour pouvoir l’utiliser, les tableaux de données doivent être déclarés.
Tableau de taille fixe
Pour déclarer un tableau de taille fixe, la syntaxe générale de l’instruction sera la suivante :
Dim NomDuTableau(TailleDuTableau) As TypeDeDonnee
'exemple
Dim TabString(7) As String
Exemple 16 : déclaration d’un tableau de taille fixe
L’indice 7 correspond à la taille du tableau. Pour pointer sur les éléments du tableau, il vous faudra ainsi passer par leur indice.
L’indice inférieur du tableau peut commencer à 0 ou 1, selon la valeur qui est spécifiée par l’instruction Option Base, en haut du module. Ce point sera abordé dans la section suivante. Par défaut, le décompte débute avec la valeur 0.
Voici un exemple de déclaration et d’alimentation d’un tableau de chaînes de caractères.
Option Base 0
Dim Semaine(6) As String
Semaine(0)="Lundi"
Semaine(1)="Mardi"
Semaine(2)="Mercredi"
Semaine(3)="Jeudi"
Semaine(4)="Vendredi"
Semaine(5)="Samedi"
Semaine(6)="Dimanche"
Exemple 17 : alimentation d’un tableau de taille fixe
Tableau de taille dynamique
Lorsque vous ne connaissez pas à l’avance...
Les constantes
Lorsque vous souhaitez garder des valeurs inchangées durant les programmes, vous avez la possibilité de le faire au travers des constantes. Il existe également des constantes directement disponibles dans Office, que vous avez vu par exemple dans le chapitre Communiquer avec l’utilisateur - MsgBox et InputBox.
Les constantes de l’utilisateur
Si en tant que développeur, vous souhaitez stocker une valeur qui ne pourra pas être modifiée, vous pouvez déclarer une constante avec le mot-clé Const. La syntaxe générale de déclaration d’une constante est la suivante :
Const NomDeVotreConstante [As TypeDeVotreConstante]= ValeurConstante
Par exemple, pour déclarer une constante AGE_MAJORITE de type numérique entier et de valeur 18, la déclaration sera la suivante :
Const AGE_MAJORITE As Integer = 18
Exemple 29 : déclaration d’une constante
Une fois la déclaration effectuée, il n’est pas possible d’affecter une autre valeur à une constante. Dans l’exemple suivant, lors de l’exécution du code, un message d’erreur apparaîtra à l’écran.
Const AGE_MAJORITE As Integer = 18
AGE_MAJORITE = 19
Exemple 30 : tentative de modifier la valeur d’une constante
Il est intéressant d’utiliser les constantes lorsque vous avez besoin...
Convention de nommage
Afin de vous rendre le travail plus facile, mais aussi parce que VBA vous fixe des limites, la façon dont vous nommerez variables et constantes n’est pas totalement libre. Bien que chaque entreprise puisse avoir sa propre nomenclature de nommage, voici les règles qui sont les plus communément admises et suivies dans le cadre du développement d’outils VBA.
Un nom unique pour les variables
Pour commencer, il n’est pas possible d’avoir deux variables du même nom à l’intérieur d’une même portée (cette notion est évoquée avec plus de détails dans le chapitre Procédures, fonctions et macros). Ainsi un code comme le suivant générera une erreur.
Dim a As Integer
Dim a As Date
Exemple 31 : interdiction d’avoir deux variables avec le même nom.
L’erreur qui s’affichera alors à l’écran sera la suivante :
Règles générales de nommage
Qu’il s’agisse de variables, de constantes ou d’objets quelconques dans vos programmes VBA, voici les principales règles qu’il vous faudra respecter :
-
Le nom doit débuter par une lettre uniquement.
-
Sont donc interdits _ABC et 8Titre.
-
Le nom est limité à 255 caractères.
-
Le nom est composé uniquement de lettres, de chiffres et du caractère souligné (_).
-
Sont donc interdits A-BC et dt%.
-
Le nom ne peut pas contenir de caractères de ponctuation ni d’espace.
-
Le nom ne peut pas correspondre à un mot-clé VBA.
-
Sont donc interdits Dim, As ou encore For.
Voici une série de noms de variables qui sont valides :
-
Texte08,
-
Txt08Nom,
-
Nom_8_txt.
Bien que cela ne soit pas interdit par les règles imposées par VBA, il est fortement déconseillé d’utiliser des caractères accentués (é, à, ù) ou diacritiques (ç, ø) dans le nommage de vos variables. En effet, votre configuration de clavier n’est pas nécessairement celle de vos collègues qui seraient amenés à reprendre votre travail.
'Vous préférerez par exemple utiliser
Dim dtArrivee As Date
'À
Dim dtArrivée As Date
Exemple 32 : privilégier les caractères...
Exercices
Pour chaque chapitre, vous serez amené à rédiger vos propres programmes. Les solutions sont mises à disposition dans le chapitre Correction des exercices.
Pour ce chapitre, créez un module portant le nom/numéro du chapitre, et dans ce module, créez une macro pour chaque exercice Private Sub TitreExercice() dans lequel vous placerez vos instructions.
Pour afficher une valeur à l’utilisateur, vous pourrez utiliser l’instruction MsgBox suivie de la variable que vous souhaitez afficher.
Terminez l’exercice en exécutant la macro, en appuyant sur la touche F5. Les résultats attendus à l’écran seront indiqués entre parenthèses. Aucune erreur ne doit survenir lors de la compilation ni lors de l’exécution.
Déclaration simple de variables
Entre les deux lignes suivantes :
Private Sub DeclarationsSimples()
End Sub
A-Déclarez une variable pouvant accueillir un nom de Projet qui s’appellera NomProjet.
B-Déclarez une variable qui accepte des valeurs entières et qui s’appellera NumeroDevis.
C-Déclarez une variable qui pourra contenir Vrai ou Faux, que vous nommerez Prioritaire.
D-Déclarez une constante qui contiendra le 1er janvier 1950, que vous nommerez DATE_LIMITE.
E-Déclarez une variable pouvant stocker la valeur 3.14 (plusieurs solutions possibles)...