Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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,
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() ,
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')
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,
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')
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() ,
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 ,
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,
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.
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.
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) ,
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,
Enfoncer la touche F5 du clavier pour exécuter le code,
Répondre aux trois boîtes de dialogue en veillant à inscrire des nombres,
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() ,
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 :
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 .
Enfin, retenez ceci, les noms de variables ne doivent jamais comporter ni d'espaces, ni d'accents.