Tu dois devenir capable de
|
Savoir
- Expliquer la notion de variable en informatique
- Expliquer l'importance de la notion de type de variables.
Savoir faire
- Examiner le contenu des variables dans la fenêtre des variables
locales d'Excel.
- Ecrire des procédure pour déposer le contenu des variables
dans les cellules des feuilles de calcul.
- Ecrire correctement les valeurs 'texte' à déposer
dans les variables
- Ecrire correctement les valeurs 'date' à déposer
dans les variables
- Examiner et modifier les propriétés des objets
'à la main' et par procédure
- Réaliser des interactions entre les procédures et l'utilisateur
et inversement.
|
|
Notion de variable en VBA
|
Une variable est une portion de la mémoire centrale
de l'ordinateur
et qui est susceptible d'accueillir une valeur.
Cette valeur peut être réutilisée plus tard dans l'exécution d'une procédure.
|
|
- Ouvre un nouveau classeur Excel
- Dans le menu Outils, sélectionne la commande Macro puis l'option
Macros...
- Dans la zone Nom de la macro, indique TesteVariables
- Clique ensuite le bouton Créer
- La fenêtre de l'éditeur VBA s'ouvre: le curseur de texte attend
tes premières frappes entre les marqueurs de début et de fin
de la procédure TesteVariables
- Entre ces deux marqueurs, frappe le texte sur le modèle suivant
Il est très important de respecter scrupuleusement
les symboles utilisés et l'orthographe du texte.
|
|
La procédure est maintenant en place. Nous allons pouvoir examiner
ce qu'elle fait en l'exécutant pas à pas.
- Place le curseur de texte dans le texte de la procédure
- Frappe la touche F8 pour démarrer l'exécution pas à pas
- Frappe encore cette touche 7 fois de suite de manière à exécuter
l'ensemble des instructions
- Au cas où un message d'erreur intervient durant la manipulation,
vérifie que ton texte correspond parfaitement à ce qui est indiqué
plus haut.
- J'ai un peu l'impression
que l'on se moque de moi là... Il ne s'est rien passé du tout durant
l'exécution de ces instructions.
- Il ne s'est
rien passé? Je ne serais pas si formel.
Simplement, ce qui s'est passé n'est pas directement visible: tout
s'est déroulé en coulisses, dans la mémoire de l'ordinateur.
- Pas très impressionnant,
du coup. Et il n'y a vraiment aucun moyen de voir ce qui s'y passe,
dans cette mémoire?
- Heureusement
si! On peut soulever un coin du voile, si l'on veut.
|
|
Quand la procédure TesteVariables fonctionne sans erreur,
passe à l'étape suivante. |
Voir les variables en coulisses
|
La procédure TesteVariables fonctionne parfaitement.
Nous allons maintenant passer à l'intérieur de la mémoire pour voir
comment elle fonctionne.
|
|
- Vérifie que l'éditeur VBA est toujours bien actif
- Dans le menu Affichage, sélectionne la commande Fenêtre Variables
locales
- Une nouvelle fenêtre intitulée Variables locales apparaît, vide
pour l'instant
- Cette fenêtre étant bien visible, exécute à nouveau la procédure
TesteVariables en mode Pas à pas: le curseur de texte étant dans
le texe de la procédure, frappe la touche F8.
Le contenu de la fenêtre Variables locales se modifie:
les différents
noms donnés dans l'éditeur VBA apparaissent à côté de
la mention
Variant/Empty
- Frappe la touche F8 pour déclencher la première instruction.
Dans la colonne Valeur de la ligne MaVariable, la valeur 500 apparaît.
Dans la colonne Type de la ligne MaVariable, la mention Integer s'affiche.
- Frappe la touche F8 pour déclencher la deuxième instruction,
et ainsi de suite.
- Continue d'observer le contenu de la fenêtre Variables
locales lors de l'exécution des différentes instructions.
A la fin, la fenêtre se présente comme ci-dessous.
Lorsque le marqueur de fin de procédure est dépassé,
la fenêtre se vide.
|
|
Que faut-il retenir de cette expérience?
1 |
Les entités nommées MaVariable, Toto, MonNom,
LaDate dans l'exemple ci-dessous sont des VARIABLES. |
2 |
Une variable est une portion de la mémoire centrale
de l'ordinateur dans laquelle on peut déposer une information. |
3 |
L'information déposée dans une variable
est généralement caractérisée
par son type:
- Integer: il s'agit d'un nombre entier
- String: il s'agit d'une 'chaîne' de caractères,
un mot, une phrase,...
- Date: ... :o)
- ...
Excel admet encore beaucoup d'autres types. |
4 |
L'information déposée dans une variable peut...
changer s'il est prévu qu'elle change dans la procédure
qui l'utilise. |
5 |
A la fin de l'exécution de la procédure, la
variable perd sa valeur. |
|
|
Quand tu as parfaitement compris ce qui se passe lors de
l'exécution de la procédure TesteVariables, passe à l'étape suivante. |
Les variables peuvent communiquer avec les feuilles
de calculs
|
Dans l'exemple précédent, nous avons vu que les variables
existent dans le monde de la mémoire centrale. Existe-t-il cependant un moyen
de les faire communiquer avec le monde des feuilles de calculs?
|
|
Les variables transmettent des valeurs
- Sur une feuille de calculs vierge, introduis les informations
indiquées sur l'exemple ci-dessous. Indique ton âge
dans la cellule B1.
- Démarre la rédaction manuelle d'une nouvelle
procédure, selon
la méthode déjà expliquée précédemment:
cette procédure s'appellera CalculAge.
- Sur la première ligne, écris le texte
MonAge =
- Derrière le signe =, frappe Ctrl+Espace
Une liste déroulante apparaît: elle présente les noms des procédures
et des objets qui peuvent être utilisés ici:
- Frappe la lettre R (première lettre du mot Range) et sélectionne
l'objet Range
- Frappe la touche de tabulation; le mot-clef Range s'ajoute
au texte
- Frappe une parenthèse ouvrante
Une nouvelle aide apparaît pour indiquer les informations suivantes
à fournir
Ici, nous sommes avertis qu'une référence de cellule est attendue.
- Indique la référence
MonAge = Range('B1')
- Frappe un point
Une liste déroulante apparaît. Elle nous présente toutes les méthodes
et les propriétés que l'on peut indiquer maintenant.
- Frappe la lettre V (première lettre de la propriété Value)
- Frappe la touche de tabulation: la ligne se complète
- En utilisant les mêmes procédés, termine la rédaction du texte
de cette procédure
selon l'exemple présenté ci-dessous:
- Peux-tu prévoir ce que fait cette procédure? Réfléchis
quelques instants avant de poursuivre.
|
|
La procédure CalculAge:
- dépose le contenu de la cellule B1 dans la variable MonAge;
- ajoute deux unités à la valeur de MonAge et dépose le résultat
du calcul dans la cellule B2
- dépose la valeur de la variable MonAge dans
la cellule B3.
Cette valeur n'a pas changé depuis la première
ligne.
Exécute la procédure en mode Pas à pas
|
|
Les variables transmettent des formules
- modifie le texte de la procédure CalculAge selon les indications
données ci-dessous
Peux-tu prévoir ce que fait cette procédure? Réfléchis
quelques instants avant de poursuivre. Quelle différence
avec la version précédente?
- Exécute la procédure en mode Pas à pas.
|
|
Quand tu as bien compris les deux versions de la procédure
CalculAge, passe à l'étape suivante. |
Les variables et leurs types
|
A l'étape précédente, nous avons pu voir que le logiciel
Excel distingue les variables selon leur type. Quelques expériences
complémentaires vont nous permettre de mieux comprendre ce point.
|
|
Les variables numériques et leurs types
- Démarre l'éditeur de code VBA selon la méthode utilisée précédemment dans cette leçon.
- Dans l'éditeur, frappe le texte de la procédure TypesVariables comme illustré ci-dessous. Sois attentif à l'écriture de la valeur
2.13, avec un point et non une virgule.
- Visualise la fenêtre des Variables locales en utilisant la
méthode expliquée précédemment dans cette leçon.
- Exécute la procédure en mode Pas à pas en frappant la touche
F8. A chaque frappe, sois attentif aux informations données dans
la fenêtre des Variables locales.
|
|
Après l'exécution des deux premières lignes,
la fenêtre des variables locales se présente comme
sur l'illustration ci-dessous:
La variable MaVariable est de type Integer (un
nombre entier); la variable TaVariable est du type Double.
Les variables de type Double sont conçues
pour recevoir des valeurs appartenant à l'ensemble des
réels (au sens mathématique).
Dans une variable de type Double, le nombre est codé sur
8 octets. Cela permet d'y déposer des nombres compris entre
-1,79769313486231.10308 et
-4,94065645841247.10-324 pour les nombres
négatifs
et entre
4,94065645841247.10-324 et 1,79769313486231.10308 pour
les positifs.
Il existe aussi le type Single qui permet
de recevoir des nombres compris entre
-3,402823.1038 et
-1,401298.10-45 pour les nombres
négatifs
et entre
1,401298.10-45 et
3,402823.1038 pour les positifs.
Dans
le cadre de cette leçon, nous n'aurons pas à nous
soucier de ces subtilités: nous laisserons la gestion des
types de variables au logiciel.
|
|
Ecrire correctement les valeurs 'texte' à déposer dans les
variables
- Sélectionne l'éditeur de code VBA si nécessaire.
- Dans l'éditeur, frappe le texte de la procédure TypeTexte comme
illustré ci-dessous.
- Exécute les instructions en mode Pas à pas en examinant le
contenu de la fenêtre Variables locales.
|
|
A la première ligne, la variable TaVariable reçoit la valeur
Bonjour le monde. Remarque les guillemets.
A la deuxième ligne, le contenu de la variable TaVariable est déposé
dans MaVariable.
Remarque que pour désigner le contenu de la variable on utilise simplement
son nom, sans guillemets.
A la troisième ligne, c'est bien le texte 'TaVariable' qui est envoyé
dans MaVariable.
Pour indiquer qu'il s'agit bien d'un texte, on utilise les guillemets.
Dans l'éditeur VBA, les textes qui doivent être affectés
à des variables sont entourés de guillemets.
Pour désigner une
variable, on n'utilise jamais de guillemets.
|
|
|
Ecrire correctement les valeurs 'date' à déposer
dans les variables
- Sélectionne l'éditeur de code VBA si nécessaire.
- Dans l'éditeur, frappe le texte de la procédure TypeDate comme
illustré ci-dessous.
- Exécute la procédure en mode Pas à pas en examinant attentivement
le contenu de la fenêtre Variables locales.
- Oups!
Mais c'est n'importe quoi cette histoire. Quelqu'un peut m'expliquer
la raison pour laquelle cette valeur 1,797.10-3 vient se mettre dans
la variable?
- Très
simple: c'est le résultat de l'opération de division de 18 par 5
divisé par 2003.
Le problème, c'est que nous n'avions pas précisé qu'il s'agissait
d'une date. Excel a donc considéré qu'il s'agit simplement d'un calcul...
qu'il effectue sans problème.
- Et
on s'en tire comment alors?
- Cela
reste très simple: on entoure la valeur de type date d'un
signe de reconnaissance: le signe #.
- Dans l'éditeur VBA, modifie la ligne d'instruction de la procédure
TypeDate en
MaVariable = #18/05/2003#
- Exécute la procédure Pas à pas.
Tout se passe maintenant correctement.
Dans l'éditeur VBA, les dates qui doivent être
affectés à des variables sont entourés
de signes #.
|
|
|
Quand tu as bien en tête la façon de traiter les valeurs
de type 'texte' et de type 'date' en VBA, passe à l'étape suivante. |
Examiner et modifier les propriétés des objets
|
Nous sommes maintenant capables d'examiner le contenu
des variables à tout moment de l'exécution d'une
procédure.
Il est également possible d'examiner les objets et leurs propriétés.
|
|
Examen et modification manuelle des propriétés
- Ouvre un nouveau classeur Excel.
- Dans la cellule A1 de la Feuil1, frappe la formule '=A2+2'
- Dans la cellule A2, indique la valeur 10.
Puisque A2 contient 10, le contenu de A1 vaut donc 12.
- Si nécessaire, démarre l'éditeur de code
VBA selon la méthode utilisée précédemment dans
cette leçon.
- Dans l'éditeur, frappe le début du texte de la
procédure ExamineObjet selon le modèle proposé ci-dessous
La
syntaxe utilisée est semblable à celle que nous avons employée
lors de l'affectation d'une variable. Remarque cependant
la différence avec l'emploi du mot clef Set.
L'objet Range('A1') est affecté à la variable UnObjet.
- Vérifie que la fenêtre des Variables locales soit
visible à l'écran.
- Exécute la macro en mode Pas à pas.
Dans la fenêtre des variables locales, nous voyons apparaître
la mention de la variable précédée d'un signe qui indique la
présence d'une liste à ouvrir:
- Clique sur le signe qui
précède la mention UnObjet
La liste des propriétés de l'objet UnObjet apparaît
Certaines de ces propriétés sont elles-mêmes
de objets (vu dans une leçon précédente)
.
- Sélectionne la propriété ColumnWidth puis clique sur la valeur
10,71 qui lui est attribuée actuellement.
- Change cette valeur en 20.
- Remarque que la colonne qui contient la cellule A1 s'est élargie.
On voit donc que nous pouvons modifier les propriétés 'à la main'.
- Dans la liste des propriétés, recherche Formula et modifie
sa valeur à '=A2*2'.
Note la modification dans la feuille de calculs.
- Dans la liste des propriétés, recheche Value et modifie sa
valeur à 55.
Note que la formule disparaît de la cellule A1 et fait place
à la valeur indiquée.
|
|
Modification des propriétés dans une procédure
Si les propriétés peuvent être modifiées 'à la
main', il est aussi possible de les modifier dans une procédure.
|
|
Exemple 1:
- Dans la cellule A1 de la feuille de calculs active, indique
la valeur 0.
- Retourne dans l'éditeur de code VBA.
- Dans l'éditeur, frappe le texte de la
procédure ModifProp selon le modèle proposé ci-dessous:
- Exécute la macro en mode Pas à pas.
- Examine le contenu de la cellule A1.
D'autres propriétés peuvent être modifiées de la même façon.
Exemple 2
- Retourne dans l'éditeur de code VBA.
- Dans l'éditeur, modifie le texte de la
procédure ModifProp selon le modèle proposé ci-dessous:
Peux-tu
prévoir ce qui va se passer lors de l'exécution? Réfléchis quelques
instants avant de lancer la procédure.
Exemple 3
- Retourne dans l'éditeur de code VBA.
- Dans l'éditeur, modifie le texte de la procédure
ModifProp selon le modèle proposé ci-dessous:
Pour la valeur du paramète ColorIndex, tu peux indiquer un chiffre
compris entre 1 et 56 de la palette ci-dessous.
Exemple 4
- Retourne dans l'éditeur de code VBA.
- Dans l'éditeur, modifie le texte de la procédure ModifProp selon
le modèle proposé ci-dessous:
Peux-tu
prévoir ce qui va se passer lors de l'exécution? Réfléchis
quelques instants avant de lancer la procédure.
|
|
Toutes les propriétés des objets ne peuvent être
modifiées: dans ce cas, elles sont dites 'en lecture
seule'.
|
|
Quand tu as examiné quelques propriétés
d'objets et que tu es capable de les modifier 'à la main' et par une procédure,
passe à l'étape suivante. |
Interaction avec l'utilisateur: l'ordinateur vous parle
|
A ce point de la leçon, nous avons appris à manipuler
les variables et à voir leur contenu dans la fenêtre des variables
locales.
Nous savons aussi comment la valeur d'une variable peut être déposée
dans une cellule d'une feuille de calculs.
Nous allons maintenant apprendre à faire en sorte que les procédures
puissent afficher la valeur d'une variable dans une boîte de dialogue.
|
|
VBA prévoit une fonction appelée MsgBox et dont le rôle est de
délivrer de courts messages à l'utilisateur.
Comme il s'agit d'une fonction, elle demande un certain nombre
de paramètres et renvoie une valeur.
- Si nécessaire, démarre l'éditeur de code
VBA selon la méthode
utilisée précédemment dans
cette leçon.
- Dans l'éditeur, frappe le début du texte de la procédure Message selon le modèle suivant:
- Immédiatement derrière le mot MsgBox, frappe une parenthèse
ouvrante.
Un aide-mémoire des paramètres possibles apparaît. Le premier
paramètre s'appelle Prompt: il s'agit du message à délivrer à l'écran.
Le terme français 'prompteur' (utilisé par le présentateur TV)
dérive de ce mot.
- Frappe le message à déliver à l'utilisateur sur le modèle ci-dessous:
- Frappe ensuite une virgule. Un aide mémoire encore plus complet
pour le prochain paramètre apparaît:
Comme le nom du paramètre le laisse penser (Buttons),
il s'agit maintenant de préciser le type de boutons qui figureront
dans la boîte de dialogue.
- Dans la liste déroulante des types de boutons, sélectionne
vbYesNo afin d'obtenir les deux boutons Oui et Non. Frappe la
touche de tabulation pour accepter.
- Frappe une virgule.
La nature du paramètre suivant apparaît dans l'aide-mémoire: il
s'agit du titre de la boîte de dialogue:
- Frappe la phrase 'La météo du jour'. Comme il s'agit d'un texte,
il ne faut pas oublier de frapper des guillemets.
En VBA, tous les paramètres ne sont pas obligatoires. Dans
le cadre de cette leçon, nous ne préciserons pas
les paramètres ultérieurs.
- Frappe une parenthèse fermante pour terminer la rédaction du
texte de la procédure.
- Vérifie que la fenêtre des Variables locales soit visible
à l'écran.
- Exécute deux fois la macro en mode Pas à pas.
- A la première
exécution, actionne le bouton Oui. A la deuxième exécution, le
bouton Non. Sois attentif à la valeur de la variable Reponse donnée
dans la fenêtre
des Variables
locales.
La fonction MsgBox renvoie donc une valeur différente
selon le bouton actionné. Cette valeur peut éventuellemênt être
utilisée ensuite.
- Modifie la valeur du paramètre Buttons et observe la valeur
retournée par la fonction selon le bouton actionné.
Certaines valeurs de ce paramètre permettent d'ajouter des
icones dans la boîte de dialogue: vbQuestion, vbCritical.
On peut additionner les arguments de manière à faire apparaître des
combinaisons
d'icones et de boutons: vbCritical + vbRetryCancel, ...
- Comique. J'ai
envie d'essayer de cumuler vbYesNo et vbYesNoCancel, comme ça pour
voir.
- Toutes les
combinaisons ne sont pas possibles, question de logique. Ici, le
résultat sera plutôt étonnant: seul un bouton OK apparaît.
|
|
Comment faudrait-il faire pour qu'une boîte de dialogue annonce
le contenu de la cellule A1?
Etablis le texte de la procédure MessageCellule qui
permet cela.
Seul le bouton OK doit apparaître.
|
|
Quand ta procédure MessageCellule fonctionne, passe à l'étape suivante. |
Interaction avec l'utilisateur: parler à l'ordinateur
|
A ce point, nous savons comment recevoir des informations
de l'ordinateur par l'intermédiaire des feuilles de calcul ou des
boîtes de messages.
Nous allons maintenant voir comment nous pouvons fournir des informations
à l'ordinateur de manière interactive.
|
|
VBA prévoit une fonction appelée InputBox et
dont le rôle est de demander des informations à l'utilisateur.
Comme il s'agit d'une fonction, elle demande un certain nombre
de paramètres et renvoie une valeur.
- Si nécessaire, démarre l'éditeur de code
VBA selon la méthode
utilisée précédemment dans
cette leçon.
- Dans l'éditeur, frappe le début du texte de la
procédure BoîteDonnées selon le
modèle
suivant:
- Immédiatement derrière le mot InputBox,
frappe une parenthèse ouvrante.
Un aide-mémoire des paramètres possibles apparaît.
Le premier paramètre s'appelle Prompt, comme dans
le cas de la MsgBox.
- Frappe le message à délivrer à l'utilisateur
sur le modèle ci-dessous:
- Frappe une virgule, suivie du titre de la boîte de dialogue 'La
météo du jour'.
- Frappe une nouvelle virgule.
Le paramètre suivant s'intitule Default. Il s'agit d'indiquer maintenant
une réponse par défaut à la question posée: la réponse qui est prise
en compte si l'utilisateur ne répond pas.
- Frappe le texte 'Couci, couça' suivi d'une virgule.
Les deux paramètres suivants intitulés XPos et YPos représentent
la position de la boîte de dialogue à l'écran, exprimée en 'twips'.
Un 'twip' est une unité de mesure en typographie, définie
comme un vingtième de point ('twentieth of a point').
Le point est une autre unité de mesure en typographie: 1 point
= 1/72e de pouce.
1 twip est donc 1/72/20 pouce = 1/1440 pouce
1 pouce = 2,54 cm, donc 1 twip = 2,54cm/1440 = 0,00176 cm
Le twip est donc une très petite unité de longueur.
- Indique les valeurs 2000 et 3000 pour ces deux paramètres.
En VBA, tous les paramètres ne sont pas obligatoires. Dans
le cadre de cette leçon, nous ne préciserons pas les
paramètres suivants.
- Frappe une parenthèse fermante pour terminer la rédaction
du texte de la procédure.
- Vérifie que la fenêtre des Variables locales soit
visible à l'écran.
- Exécute la macro en mode Pas à pas en
modifiant la réponse par défaut:
- Note la valeur de la variable Reponse à l'issue de l'exécution
de la procédure.
- Exécute une nouvelle fois la procédure en conservant la réponse
par défaut.
- Exécute une troisième fois la procédure en donnant une autre
réponse.
|
|
Comment faudrait-il faire pour qu'une boîte de dialogue pose
une question qui serait indiquée dans la cellule A1 d'une feuille
de calculs. La réponse par défaut serait dans la cellule A2.
Finalement, la nouvelle réponse viendrait remplacer l'ancienne réponse
par défaut.
|
|
Quand ta procédure fonctionne,
passe à l'étape suivante. |
Exercices
|
Résous les exercices suivants en respectant les
contraintes qui sont données.
- La cellule A1 d'une feuille de calcul contient une valeur.
Ecrire une procédure qui envoie le contenu de A1 vers
la cellule B7 sans utiliser le presse-papiers.
- Les cellules A1 et A2 d'une feuille de calcul contiennent chacune
une valeur différente. Ecrire une procédure qui réalise l'échange
des contenus des deux cellules: le contenu de A1 passe en A2 et
inversement.
- Une procédure demande le montant d'un placement
ainsi que le taux d'intérêt annuel. Elle indique en réponse la
valeur du placement après un an. Cette procédure n'utilise pas
les feuilles de calcul.
- Une procédure demande les références d'une cellule de la feuille
de calcul active et la valeur qu'il faut y placer. Elle place
ensuite cette valeur dans la cellule demandée.
Cette procédure peut-elle également fonctionner avec des plages
étendues de cellules?
- A suivre...
|
|
Quand tu as terminé tous les exercices, sache que tu as fini !! |
Droits d'auteur : Yves Mairesse. Ce cours est sous
contrat Creative Commons