formateur informatique

Les variables en VBA Excel, premiers pas en développement

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Les variables en VBA Excel, premiers pas en développement
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Déclarations de variables - Apprendre VBA Excel
Nous avons récemment débuté avec VBA Excel avec le support qui présente certains objets et propriétés du langage. Nous y avons notamment vu à quel point il était simple de manipuler les cellules d'une feuille Excel grâce aux propriétés des objets qui désignent ces cellules comme Range, Selection et Cells. Pour réaliser des traitements en fonction des données numériques d'un tableau par exemple, le code a besoin tôt ou tard de mémoriser les valeurs pour les traiter. Ces traitements peuvent être des opérations sur ces valeurs. Pour mémoriser ces valeurs, on les stocke dans des variables. Les variables doivent d'abord être déclarées par l'instruction Dim et typées en fonction de ce qu'elles doivent stocker. L'allocation mémoire ne sera en effet pas la même selon qu'il s'agit d'un entier, d'une valeur numérique avec décimales ou d'un texte par exemple. Ces notions sont importantes. Comme pour les bases de données, les variables doivent être typées au plus juste pour optimiser le code et ses ressources.

Variables - Mis en pratique
Pour débuter avec les variables, nous proposons de créer une petite application qui permet de calculer le coût d'un trajet en voiture en fonction du prix du carburant, de la consommation moyenne du véhicule et de la distance à parcourir. Ces informations seront tour à tour demandées à l'utilisateur par l'intermédiaire d'une boîte de dialogue. Donc nous allons découvrir les boîtes de dialogue de programmation qui permettent d'interagir. Les valeurs saisies par l'utilisateur dans ces boîtes seront stockées dans des variables pour pouvoir les traiter par le code.

Les boîtes de dialogue
  • Démarrer avec un nouveau classeur dans Excel,
  • Afficher l'éditeur de code Visual Basic soit par le raccourci clavier ALT + F11, soit à l'aide du ruban Développeur,
Si vous ne voyez pas le ruban développeur, référez-vous au support pour débuter avec VBA Excel. La procédure pour afficher ce ruban y est donnée. Nous allons écrire notre code dans un module.
  • Dans l'éditeur Visual Basic, cliquer sur le menu Insertion,
  • Puis, choisir Module dans la liste,
Module Visual Basic pour écrire le code

Le Module1 apparaît dans le volet de gauche dans le dossier des modules. Au centre la page de code est prête à la saisie. Commençons par créer la procédure qui sera reconnue comme une macro par Excel. Nous allons la nommer calcul_consommation. Comme vous le savez, une procédure commence par Sub et se termine par End Sub.
  • Créer la procédure calcul_consommation(),
Création macro en langage VBA Excel

Notre code sera écrit entre les bornes de cette procédure.
  • Enregistrer le travail mais surtout en choisissant le type .xlsm dans la zone type de fichiers afin que le classeur conserve les macros et leurs codes,
Il y a deux types de boîtes de dialogue pour interagir avec l'utilisateur. La boîte de dialogue affichant un message d'information, MsgBox() et celle demandant à l'utilisateur de saisir une valeur ou une réponse, InputBox(). Toutes deux disposent d'un certain nombre d'arguments facultatifs permettant de les personnaliser mais peuvent aussi s'utiliser dans leur expression la plus simple. Comme le InputBox() demande à l'utilisateur de saisir une valeur, nous devons récupérer cette valeur pour pouvoir la traiter. C'est là que nous la stockerons dans une variable.

MsgBox()
Elle est conventionnellement utilisée pour afficher un message d'information à l'utilisateur. L'utilisateur clique sur Ok et le code se poursuit. Mais elle peut être personnalisée en lui ajoutant des boutons comme Ok et Annuler. Dans ce cas, il faut savoir sur quel bouton clique l'utilisateur. Si c'est annuler, nous devons stopper le traitement du code. Nous aborderons ce sujet dans un autre support.
  • Dans les bornes de la procédure, taper la ligne suivante : MsgBox('Cette application sert à calculer le coût d'un trajet')
Fonction VBA MsgBox pour afficher message dans boîte de dialogue

Vous l'avez remarqué, au moment où vous ouvrez la parenthèse, une info-bulle apparaît. Elle indique les paramètres à passer à cette fonction. Tous ceux indiqués entre crochets sont facultatifs. Seul Prompt est obligatoire, soit le message à afficher. C'est pourquoi notre code est correct, nous avons bien écrit le message entre guillemets.
  • Enfoncer la touche F5 du clavier pour exécuter la procédure,
Boîte de dialogue MsgBox VBA Excel

La boîte de dialogue apparaît avec le message personnalisé. Vous remarquez donc à quel point il est trivial en VBA Excel de déclencher une boîte de dialogue.
  • Cliquer sur Ok pour valider et fermer cette boîte de dialogue,
Le code se poursuit et se termine donc à ce stade. Vous êtes de retour dans l'éditeur. Il n'y a dans ce cas pas de réelle interaction, en tous cas ni valeur à stocker ni action de l'utilisateur à interpréter.

InputBox()
Cette boîte de dialogue offre une zone de saisie à l'utilisateur. Nous allons commencer par la tester dans son état le plus simple.
  • Saisir sous la ligne précédente, la ligne suivante : InputBox ('Prix du litre de carburant')
Boîte de dialogue avec zone de saisie en Visual Basic Excel

Là encore, lorsque vous ouvrez la parenthèse, une info-bulle vous indique les paramètres attendus par la fonction. Prompt, notre message, est le seul paramètre obligatoire, celui que nous indiquons.
  • Exécuter le code en enfonçant la touche F5 du clavier,
  • Cliquer sur Ok à la première boîte de dialogue, le MsgBox(),
Boîte de dialogue InputBox VBA avec saisie utilisateur

La boîte de dialogue InputBox() apparaît avec une zone de saisie. Dans cette zone de saisie, vous devez donc saisir le prix du carburant au litre. Cela signifie qu'au clic sur le bouton Ok, la boîte de dialogue va retourner cette valeur. Mais à ce stade, nous n'avons rien écrit qui permette de stocker la valeur retournée, d'où la nécessité des variables. D'ailleurs rien n'est fait non plus pour savoir si l'utilisateur valide en cliquant sur Ok ou abandonne en cliquant sur Annuler.

Les variables
Les variables servent à stocker en mémoire des valeurs pour un traitement ultérieur comme des calculs par exemple. Les variables doivent être typées en fonction de la nature de l'information à stocker. Concrètement, il faut dire si on va stocker un texte, un nombre entier ou un nombre réel par exemple. Le mot clé utilisé pour la déclaration d'une variable est Dim suivi du nom de la variable à définir suivi du mot clé As pour annoncer le type et enfin suivi du type : Dim nom_variable As Entier. La déclaration des variables se fait généralement en en-tête de code, c'est plus clair. Mais vous pouvez les déclarer où vous le souhaitez. L'essentiel est qu'elles soient bien déclarées avant de les utiliser. Découvrons cela pour personnaliser la boîte de dialogue MsgBox(). Nous n'allons plus lui passer le message entre guillemets mais une variable dans laquelle ce message est stocké. Cette variable doit donc être de type texte.
  • Placer le point d'insertion en début de procédure, juste après le Sub,
  • Saisir la déclaration suivante : Dim message As String,
Déclaration de variables en VBA Excel de type texte

Dim annonce la déclaration d'une variable. Ensuite, message est le nom de notre variable. Il est préférable de lui donner un nom explicite par rapport à ce qu'elle contient. Puis As est le mot clé qui annonce le type de données à lui associer. Juste après sa saisie, une liste déroulante se déclenche proposant notamment les types à associer aux variables. Nous choisissons String qui est le type qui permet de stocker des textes, des chaînes de caractères. Notez que si vous ne respectez pas la casse, VBA Excel ne vous en tient pas rigueur et corrige pour vous. Une variable après avoir été déclarée doit être affectée. C'est-à-dire que nous devons lui attribuer une valeur à stocker. Ici, il s'agit du texte de la boîte de dialogue. Une affectation se réalise avec le symbole =.
  • Sous la déclaration, saisir l'affectation suivante : message = 'Cette application sert à calculer le coût d'un trajet',
Nous stockons un texte dans cette variable, ce texte doit donc être écrit entre guillemets.
  • Remplacer le message du MsgBox() par la variable,
Afficher une variable avec une boîte de dialogue en VBA Excel

Si vous exécutez l'application, rien ne change à ce stade. Nous disions que la boîte de dialogue MsgBox() pouvait se personnaliser avec des boutons notamment. En fonction du bouton cliqué, une valeur est retournée. Cette valeur doit être stockée dans une variable. Selon la valeur nous pouvons enclencher une action ou une autre. Seulement, nous ne connaissons pas encore les instructions qui permettent de poser des conditions dans le code. Nous aborderons ce sujet dans un autre support. Occupons-nous de stocker en variable la valeur saisie par l'utilisateur pour le prix du carburant. Il s'agit d'un nombre réel. Donc nous devons déclarer la variable en tant que tel.
  • Ajouter la déclaration suivante en début de code : Dim prix_litre As Single,
Prix_litre est le nom de notre variable. Single est ce que l'on appelle un réel simple. Il gère les décimales. Nous devons maintenant affecter cette variable. Nous allons lui attribuer la valeur saisie par l'utilisateur dans le InputBox.
  • Modifier l'instruction du InputBox comme suit : prix_litre = InputBox('Prix du litre de carburant'),
Pour nous assurer que la valeur a bien été enregistrée dans la variable, nous allons demander à VBA Excel d'afficher cette valeur à l'écran, avec un MsgBox bien sûr.
  • Sous le InputBox, saisir la ligne suivante : MsgBox(prix_litre),
Le premier MsgBox() était un essai, il ne nous est plus utile. Nous allons le passer en commentaire lui et toutes les lignes qui lui sont liées. Pour afficher une ligne de code en commentaire, il faut la faire précéder d'une apostrophe, touche 4 du clavier.
  • Passer en commentaire la déclaration de la variable message ainsi que son affectation et la ligne du MsgBox() qui l'affiche,
A ce stade, votre code doit ressembler à celui de la capture ci-dessous.
Code VBA pour stocker valeur saisie par utilisateur dans variable

Toutes les lignes en commentaire ne s'exécuteront pas.
  • Enfoncer la touche F5 du clavier pour exécuter le code,
  • A l'invite du InputBox, taper un prix de carburant, par exemple 1,089 et valider par Ok,
Le MsgBox qui suit restitue l'information à l'écran, prouvant que la valeur a bien été stockée dans la variable. Attention néanmoins, à ce stade, nous ne gérons pas ce que nous appelons les incompatibilités de type. Si l'utilisateur saisit une information qui n'est pas une valeur numérique, celle-ci ne peut pas être stockée dans la variable. Nous avons déclaré cette dernière comme un réel. Nous ne pouvons pas y stocker du texte. Si vous saisissez la valeur 1.089, une erreur se déclenche. En France, la virgule fait office de décimales contrairement aux Etats Unis où il s'agit du point. Dans notre langue, le point transforme la valeur numérique en texte.

Variable mal typée, incompatibilité de type

Nous gèrerons ces exceptions dans un support à venir. La suite du code est une répétition de ce que nous avons déjà fait. Il s'agit de demander à l'utilisateur la consommation du véhicule et la distance à parcourir. Seul le type de la variable pour stocker l'information change. La consommation est un nombre réel tandis que la distance est un nombre entier. Le réel simple se déclare avec le type Single tandis que l'entier se déclare avec le type Integer.
  • Ajouter les deux déclarations suivantes en haut du code : Dim consommation As Single et Dim distance As Integer
  • Puis affecter ces variables aux valeurs saisies par l'utilisateur à l'aide d'un InputBox,
  • Supprimer la ligne de test MsgBox(prix_litre),
Récupération en variables des valeurs de boîtes de dialogue VBA

Votre code doit ressembler à celui présenté par la figure ci-dessus. Maintenant que les trois valeurs sont stockées dans des variables, nous pouvons les manipuler de manière à calculer le prix du trajet. Le calcul est le suivant : distance x (consommation / 100) x prix_litre. Nous allons stocker ce résultat dans une dernière variable réelle. Comme le résultat du calcul peut comporter un grand nombre de décimales, nous allons stocker la variable en réel double qui permet de les gérer.
  • Ajouter la déclaration suivante : Dim cout_trajet As Double,
  • Puis, sous les InputBox, stocker le résultat du calcul dans cette nouvelle variable : cout_trajet = prix_litre * (consommation / 100) * distance,
  • Taper ensuite MsgBox(cout_trajet) pour afficher le résultat,
  • Supprimer toutes les lignes en commentaire,
Résultat calcul stocké dans variable réel double VBA
  • Enfoncer la touche F5 du clavier pour exécuter le code,
  • Répondre aux trois boîtes de dialogue en veillant à inscrire des nombres,
Affichage variable réel double avec beaucoup de décimales

A l'issue, VBA Excel affiche le résultat dans un MsgBox comme nous l'avons codé. Le résultat n'est pas parlant pour deux raisons. Premièrement, aucun commentaire n'indique de quoi il s'agit même si a priori nous sommes au courant. Deuxièmement, le grand nombre de décimales du résultat est inutile et disgracieux. Nous pourrions limiter cette valeur à deux décimales, soit au centime d'Euro près. Pour information pour obtenir ce résultat, nous avons indiqué un prix du carburant à 1,089, une consommation moyenne de 6,5 et une distance de 70. Le résultat annonce donc qu'un trajet de 70 Km coûte environ 5 Euros, ce qui est loin d'être négligeable. Pour pallier le problème de ces décimales, nous allons utiliser la fonction Round(). Cette fonction permet d'arrondir ou plutôt de tronquer un réel au nombre de décimales indiqué. Elle attend donc deux paramètres : premièrement le nombre à arrondir, cout_trajet ici et deuxièmement le nombre de décimales, 2 donc.
  • Ajouter la fonction Round() dans le MsgBox(),
Fonction VBA Round pour réduire le nombre de décimales



Le résultat obtenu est plus propre mais mériterait d'être commenté. En fait on veut intégrer le résultat numérique dans une phrase. Pour cela nous devons concaténer les informations. Concaténer signifie assembler. Nous souhaitons assembler un texte et cette valeur numérique. La concaténation est d'ailleurs un support de formation qui est traité sur le site avec les fonctions Excel. Le caractère qui sert à la concaténation est le Et commercial (&), touche 1 du clavier. Un texte doit toujours être saisi entre guillemets. Nous pourrions donc modifier le code ainsi : MsgBox ('Votre trajet de ' & distance & ' Km vous coûtera ' & Round(cout_trajet, 2) & ' Euros')

Nous obtiendrions le résultat suivant :
Concaténer variable et texte en Visual Basic Excel

Pour finir, sachez qu'il existe un grand nombre de variables. Ce support a permis d'aborder les plus courantes. Mais il existe aussi le type Boolean pour les variables ne pouvant prendre que deux valeurs Oui/Non, True/False ou 0/1. Nous avons aussi le type Byte pour les entiers compris entre 0 et 255. Il s'agit d'un typage judicieux pour les dates (jour du mois, mois de l'année). Il existe les entiers longs, Long, pour gérer des nombres excessivement grands. On peut aussi trouver un type particulier pour désigner un objet qui n'est pas encore défini avec le type Object.
Types de variables VBA avec liste déroulante Intellisense

Enfin, retenez ceci, les noms de variables ne doivent jamais comporter ni d'espaces, ni d'accents.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn