Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Macros et langage VBA
  3. Les variables, les constantes
Extrait - Macros et langage VBA  Découvrez la programmation sous Excel (2e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (2e édition)
6 avis
Revenir à la page d'achat du livre

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 des nombres sur la plus large plage de valeurs possibles, allant de -1,79769313486231E308 (1 suivi de trois-cent-huit 0) à -4,94065645841247E-324 pour les valeurs négatives et de 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives. Ce type est codé sur 64 bits (8 octets).

Dim d As Double 
d=4.567 

Exemple 6 : déclaration d’une variable de type Double

Enfin, vous disposez du type Currency, qui permet de stocker une valeur comprise entre -922 337 203 685 477,5808 et 922 337 203 685 477,5807....

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 la taille du tableau dont vous allez avoir besoin, il reste possible de le déclarer sans en préciser la taille immédiatement. On dit d’un tel tableau qu’il est dynamique. Vous pouvez préciser le type de données lors de la déclaration, et modifier autant de fois que vous le souhaitez la taille du tableau.

La déclaration d’un tableau dynamique sera selon la syntaxe suivante :

Dim NomDuTableau() As TypeDeDonnee 
'Exemple 
Dim ReferencesProduit() As Integer 

Exemple 18 : déclaration...

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

images/06SOB02N.png

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 :

images/06SOB03N.png

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 non accentués

Convention de nommage des variables et des constantes

Un nom explicite

Lorsque vous nommez une variable, il est intéressant de lui donner un nom qui rende explicite son utilisation. Vous privilégiez donc un nom tel que dtDateNaissance pour stocker une date de naissance plutôt que d’utiliser dtAge, pour lequel vous aurez de la difficulté pour savoir s’il s’agit d’une date ou bien de l’âge de la personne, et donc une valeur numérique entière. Ce détail a l’air anodin, mais n’oubliez pas qu’il peut se passer plusieurs mois entre l’écriture de votre programme, et sa relecture par vous-même ou une autre personne. Il est évident que plus votre programme sera long, plus le nombre de variables et constantes sera élevé, aussi cela vous facilitera le travail.

Un nom lisible

Lorsque votre nom de variable est constitué de plusieurs...

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)...