EXCEL VBA
GUIDE DÉBUTANT ÉTAPE PAR ÉTAPE DU
LANGAGE DE PROGRAMMATION EXCEL
© Copyright 2017 - All rights reserved.
Si vous souhaitez partager ce livre avec une autre personne,
veuillez en acheter une copie supplémentaire pour chaque
destinataire. Merci de respecter le travail acharné de cet
auteur. Dans le cas contraire, la transmission, la duplication
ou la reproduction de l'un ou l'autre des travaux suivants, y
compris des renseignements spécifiques, seront considérés
comme un acte illégal, qu'ils soient effectués par voie
électronique ou écrit. Cela s'applique à la création d'une
copie secondaire ou tertiaire de l'œuvre ou d'une copie
enregistrée qui n'est autorisée qu'avec le consentement écrit
exprès de l'éditeur. Tout droit supplémentaire réservé.
TABLE DES MATIÈRES
INTRODUCTION
CHAPITRE 1
L’onglet développeur sous VBA
CHAPITRE 2
Les Macros
CHAPITRE 3
Utiliser VBA
CHAPITRE 4
Projet : Créer une calculatrice simple en
utilisant ActiveX
CHAPITRE 5
Projet : Créer une calculatrice en utilisant les
formes
INTRODUCTION
Si vous savez déjà comment utiliser Microsoft Excel mais qu’il vous reste
encore de quoi apprendre, il est temps d’explorer sa plus puissante
fonctionnalité : Visual Basic for Applications (VBA).
VBA est un langage de programmation incorporé à Microsoft Excel, Access,
Powerpoint et même Word, vous permettant d’utiliser leurs fonctions les plus
communes et bien plus. Par exemple, vous voulez qu’à chaque fois que vous
ouvrez un fichier Microsoft Word, ce dernier écrive automatiquement la date
d’aujourd’hui deux lignes sous l’endroit où vous vous trouviez la dernière
fois? Ou bien vous souhaitez un tableau Excel sans formules, qui sont
pourtant appliquées comme si elles étaient apparentes? Comment faire?
Toutes ces choses, et bien plus, sont réalisées grâce à VBA pour Microsoft
Office.
Jetez un oeil à l’exemple ci-dessous :
Ceci ressemble à un programme d’analyses, et s’en est un. Mais quel
programme? Vous pensez très certainement qu’il ne s’agit d’aucun
programme de Microsoft Office, et pourtant il a été réalisé grâce à Microsoft
Excel. Mais alors comment réaliser quelque chose de la sorte sans
programmer? Impossible !
Vous apprendrez bien plus que ça pour finalement être capable de créer vos
propres programmes grâce à VBA. Si vous avez besoin d’un programme
spécifique aux analyses de votre entreprise, à usage personnel, ou même juste
par curiosité, vous avez besoin de VBA dès aujourd’hui !
CHAPITRE 1
L’onglet développeur sous VBA
Tous les langages de programmation présentent des similarités dans ce qui
constitue leurs fondamentaux. Les fonctions SI, ET, BOUCLE, OUVRIR,
FERMER en constituent seulement une partie. Nous apprendrons tout
d’abord les plus basiques, puisqu’elles sont nécessaires à la compréhension
de VBA.
Nous utiliserons Microsoft Excel 365 pour les instructions et exemples,
toutefois cela peut également s’appliquer aux versions Microsoft Excel 2007
et plus.
Accéder à l’onglet développeur
Microsoft Excel n’affiche pas l’onglet développeur par défaut. Les onglets
présents sont Fichier, Éditer, Insérer, etc. Mais aucun onglet Développeur. Il
existe différentes manières d’accéder à cet onglet, nous vous montrerons la
plus simple.
1. Effectuez un clique droit sur le ruban (n’importe quel endroit à
l’intérieur, sauf les boutons)
2. Sélectionner Personnaliser le ruban
3. Cocher la case Développeur et cliquez OK
4. Vous devriez voir apparaître l’onglet développeur désormais
QUIZ 1
1. Comment accède-t-on à l’onglet développeur?
a. Il est disponible par défaut dans Excel
b. Clique droit sur le Ruban, Personnaliser le ruban, cocher la case
Développeur et valider
c. Aller dans fichier, Options, Options Avancées et activer l’onglet
développeur
CHAPITRE 2
Les Macros
Créer une macro
Plusieurs options sont disponibles via l’onglet Développeur, nous
commencerons par utiliser le bouton enregistreur de macro.
Une macro est une séquence automatisée qui s’appliquera à chaque fois que
vous la jouez. Un exemple plus concret : imaginez que tous les matins au
travail vous répétiez les mêmes actions. Cela vous prend un temps
considérable et vous ennuie.
Le processus est le suivant :
1. Votre patron vous envoie un fichier Microsoft Excel contenant des
données pour lesquelles vous devez inscrire la date avec l’année, le
mois, le jour dans des colonnes distinctes.
Vous faites ceci car votre travail exige ce format, et vous entrez ces données
tous les jours depuis plusieurs années.
Dans ce cas, une opération semi-automatisée serait utile. Excel nous en donne
à tous la possibilité avec les macros. Une macro est donc un processus semi-
automatisé permettant d’accomplir une tâche spécifique plus rapidement.
Afin de créer une macro, suivez les instructions ci-dessous :
1. Cliquez sur le bouton enregistrer une macro
2. Choisissez un nom pour votre Macro (obligatoire)
3. Choisissez un raccourci clavier qui déclenchera le macro. Attention,
n’utilisez pas Ctrl+C ou Ctrl+V, vous ne pourrez plus copier/coller
puisque le Macro se déclenchera. Si vous souhaitez un raccourci plus
spécifique, maintenez enfoncée la touche Maj. en pressant une lettre.
Par exemple, Ctrl+Maj.+C. Pour que cela fonctionne, n’appuyez pas
sur Ctrl en ajoutant un raccourci (facultatif)
4. Sauvegardez le macro dans : - Le classeur des macros personnelles,
disponible pour tous les fichiers ouverts avec Excel sur votre
ordinateur, - Un nouveau classeur pour un nouveau fichier seulement,
qui s’applique seulement au fichier déjà ouvert (choisir un)
5. Écrire une description sur l’action de ce macro (facultatif)
6. Cliquez OK
7. Effectuez la tâche normalement, donc dans ce cas, ajouter la date
d’aujourd’hui dans une cellule
8. Une fois fini, retournez sur le bouton Enregistreur de Macro, qui
apparaît maintenant comme Arrêter l’Enregistrement, cliquez pour le
sauvegarder
Il s’agit d’une macro très simple, ajoutant seulement la date d’aujourd’hui,
mais imaginons que vous deviez également importer des données d’une page
internet actualisée toutes les heures, afin de les classer, en utilisant des
graphiques, et ce plusieurs fois par jour. Il ne fait pas de doute qu’une Macro
plus élaborée serait utile dans ce cas.
Pour n’importe quelle Macro, les étapes sont les mêmes que celles
précédemment évoquées. Une chose importante à prendre en compte
toutefois lors de la création : l’utilisation ou non des références relatives.
Références relatives
Le bouton de références relatives se trouve en dessous du bouton enregistreur
de macro. Après avoir cliqué dessus, il reste actif jusqu’à ce que vous le
désactiviez en cliquant dessus à nouveau. Il s’utilise pour enregistrer des
macros dans lesquels le procédé doit s’appliquer à différentes gammes plutôt
qu’une seule prédéfinie.
Sa fonctionnalité est très utile. Une macro enregistrée sans références
relatives répétera toujours la même opération dans les mêmes cellules que
précédemment enregistrées. En utilisant les références relatives, le macro
partira de la cellule sélectionnée. En utilisant l’exemple précédent, imaginons
que vous ayez besoin que les dates soient inscrites dans les cases F4:H4 au
lieu de B2:D2? La seule chose que vous auriez à faire est de sélectionner F4
et de lancer le macro. Ou, de sélectionner n’importe quelle case dont vous
avez besoin et de le lancer. Cependant, vous aurez besoin d’enregistrer le
macro en utilisant les références relatives, puis de sélectionner la case désirée
et de lancer le macro.
Démarrer le macro
Il existe plusieurs façons de lancer une Macro. La première : cliquer sur le
bouton Macros puis sur le macro dont vous avez besoin. Il se pourrait que ce
ne soit pas la solution la plus pratique, toutefois nous ajouterons d’autres
fonctionnalités et rendrons le lancement plus simple dans la prochaine étape.
Sauvegarder un classeur avec des macros
Après avoir ajouté quelques macros à vos tableurs, en essayant de les
sauvegarder apparaîtra la notification suivante :
C’est assez délicat, puisque la plupart d’entre nous seraient tentés de
sauvegarder le fichier sans lire cette notification : « Les propriétés suivantes
ne peuvent être sauvegardées dans un classeur dans lequel les macros ne sont
pas activées : - Projet VBA. Pour sauvegarder un fichier avec ces propriétés,
cliquez sur non, puis choisissez un fichier pour lequel les macros sont activés
dans la liste des types de fichiers. Pour continuer à sauvegarder en tant que
classeur sans macros cliquez oui. »
La plupart des gens cliqueraient simplement oui, sauvegardant alors leur
fichier mais dépourvu des macros. Cela vous ferait perdre tout le travail
réalisé sur le plan des macros. Pour sauvegarder ces macros, cliquez
simplement non au message précédent, puis sauvegardez en tant que classeur
Excel avec macros.
Cliquez sur sauvegarder, et voilà !
Lorsque vous ouvrirez à nouveau le fichier, un message apparaîtra vous
indiquant que les Macros ont été désactivés, ainsi qu’un bouton permettant
d’activer les macros. Cliquez dessus, et vous n’aurez plus à le refaire. Si vous
ne réalisez pas cette étape, vous ne pourrez plus travailler avec VBA ; tout du
moins activez les dans la sécurité des Macros, dans l’onglet Développeur, ou
suivez les étapes du Chapitre 5 sur la Sécurité des Macros.
QUIZ 2
1. Qu’est-ce qu’une macro?
a. Une formule Excel
b. Un raccourci clavier permettant de lancer un processus pré-enregistré
c. Un processus intégré à Excel
2. Comment créer une macro?
a. Cliquer sur le bouton VB (Visual Basic)
b. Cliquer sur le bouton Macros
c. Cliquer sur le bouton Enregistreur de Macros
3. À quoi servent les références relatives?
a. À enregistrer une macro sans cellules pré-définies
b. À enregistrer une macro avec des cellules pré-définies
c. Sans elles, une macro n’est pas modifiable
4. Comment lancer une macro?
a. Cliquer sur le bouton Macros
b. Cliquer sur le bouton Enregistreur de Macros
c. Cliquer sur le bouton des références relatives
5. Comment sauvegarder un classeur contenant des macros?
a. En le sauvegardant normalement, les macros seront enregistrés
b. La notification devra être refusée pour ensuite enregistrer en tant que
classeur contenant et supportant des macros
c. La notification indiquera que nous sommes entrain d’enregistrer un
classeur avec des macros, il suffira d’accepter et sauvegarder
CHAPITRE 3
Utiliser VBA
Les macros sont des notions fondamentales pour l’utilisation de VBA.
Regardons pourquoi en suivant le programme suivant :
1. Créez une nouvelle macro sans références relatives
2. Durant le processus, sélectionnez la case A1, tapez le chiffre 1 et
appuyez sur Entrée
3. Arrêtez l’enregistrement
À côté du bouton enregistreur de macros se trouve le bouton Visual Basic
(VB). Cliquez dessus, le code suivant apparaîtra :
Range(« A1 »). Select
ActiveCell.FormulaR1C1=« 1 »
Range (« A2 »). Select
Félicitations, vous avez désormais un code VB, ce qui veut dire plusieurs
commandes :
Sélectionnez la case A1
Écrivez le chiffre 1
Sélectionnez la case A2
C’est exactement ce que nous venons de faire. Maintenant, nous allons éditer
le code afin que le Macro effectue une autre action.
Visiblement, il y a un modèle récurrent : sélectionner, écrire, sélectionner.
Donc, nous pourrions continuer ce modèle en ajoutant directement plusieurs
éléments, comme suit :
Range(« A1 »).Select
ActiveCell.FormulaR1C1=« 1 »
Range(« A2 »).Select
ActiveCell.FormulaR1C1=« 2 »
Range(« A3 »).Select
ActiveCell.FormulaR1C1=« 3 »
Range(« A4 »).Select
Après avoir ajouté ceci, lancez le macro, vous verrez une nouvelle façon de le
démarrer. Appuyez sur le bouton vert au dessus du code. Après avoir cliqué
dessus, rendez-vous dans le classeur Excel en cliquant sur le symbole Excel.
Vous noterez que les cases A1:A3 sont remplies des numéros précédemment
inscrits dans le code et que la cellule A4 est sélectionnée.
Ceci semble certainement complexe, et ce car l’humain avait l’habitude de
faire ce que les machines ne pouvaient effectuer. J’ai besoin de sélectionner
les cellules A1, A2, A3 etc. Mais Excel a-t-il réellement besoin de les
sélectionner pour y écrire un chiffre?
Essayons avec le code suivant :
Range(« A1 »)=1
Range(« A2 »)=2
Range(« A3 »)=3
Et voilà ! Excel peut se passer d’étapes qui sont nécessaires pour nous. Ceci
permet de travailler plus rapidement et plus facilement.
Et si je dois remplir plus de 100 cellules?
En effet, suivre ce modèle jusque la case A100 serait long et fastidieux. Que
faire alors?
Ajoutons ceci :
Range(« A1:A100 ») = 1
Oops! Cela ajoute un numéro 1 aux cellules A1 jusque A100. Essayons autre
chose:
Range(« A1:A100 ») = 1+1
Ce code inscrit un numéro 2 à la place. Alors, comment faire en sorte
qu’Excel remplisse les cellules en séquentiel?
Il existe plusieurs façons. La première est d’enregistrer une macro et
d’ajouter le chiffre 1 à la case A1 durant le processus, puis de maintenir le
clique droit sur le petit carré et enfin de faire défiler vers le bas jusque la
cellule A100. Sélectionnez remplir en série. Puis en retournant dans Visual
Basic, vous apercevrez le code suivant :
Range(« A1 »).Select
ActiveCell.FormulaR1C1 = « 1 »
Selection.AutoFill Destination:=Range(« A1:A100 »),
Type:=xlFillSeries
Range(« A1:A100 »).Select
Ça fonctionne! Nous avons maintenant une bonne idée de comment obtenir le
code VBA désiré. Enregistrez une macro, et le voilà. Dans tous les cas, il
existe de nombreuses fonctions permises par les macros. Par exemple,
remplir des cellules avec une suite logique à partir du nombre inscrit dans la
case B2, et une fois qu’il change remplir la séquence à nouveau en suivant ce
nombre. Donc, s’il y a le chiffre 1 les cases seront remplies une à une ; si
j’inscrit un 5, elles seront remplies cinq par cinq et ainsi de suite. Comment
enregistrer ceci dans une macro? Et si il ne s’agissait pas simplement de
remplir en séquentiel, mais d’un enjeux financier, avec des nombres réels et
que vous deviez trouver une solution à ce problème rapidement?
Enregistrer une macro n’est pas toujours suffisant, mais peut s’avèrer
très utile dans la plupart des cas
VBA est un langage de programmation, mais il n’est pas nécessaire de
connaître le code VBA ou la programmation informatique si l’enregistreur de
macro fait ce que vous souhaitez.
Vous devriez savoir que lors d’un enregistrement de macro, sont également
enregistrées vos erreurs, qui seront donc répétées si vous lancez le macro.
Pour résoudre ce type de problème, vous disposez de deux options :
1. Enregistrer à nouveau le macro
2. Éditer le code VBA
Rappelez vous qu’enregistrer un bon macro ou écrire un bon code VBA
permettra à Excel de fonctionner correctement. Autrement, vous pourriez
vous attendre à un message d’erreur, le programme ne répondant plus jusqu’à
ce qu’il termine s’il ne s’arrête pas complètement de fonctionner.
Nous nous concentrerons sur les choses que vous ne pouvez pas faire en
utilisant seulement des macros. Ainsi, vous comprendrez à quel point VBA
est un outil puissant pour Microsoft Excel.
Insérer un bouton forme
Nous disposons maintenant de plusieurs macros enregistrés. Mais les lancer
n’est pas encore très pratique alors pourquoi ne pas ajouter un bouton, qui
permettrait de lancer le macro à chaque fois que l’on cliquerait dessus?
Pour ce faire, cliquez sur le bouton Insérer dans l’onglet Développeur. Vous
verrez s’afficher deux fenêtres : « Contrôle des formes » et « Contrôles
ActiveX ». Sélectionnez le bouton du Contrôle des formes, puis - n’importe
où sur la feuille de travail - maintenez et faîtes glisser afin de déterminer la
taille du bouton. Lorsque vous relâchez, vous verrez une nouvelle fenêtre
s’ouvrir, vous permettant de choisir le macro que vous souhaitez associer à ce
bouton. Sélectionnez-le et c’est fait.
Si vous souhaitez changer le nom du bouton, cliquez simplement deux fois
dessus ou faites clique droit et éditez le texte. Pour changer la position du
bouton, effectuez un clique droit puis maintenez et glissez avec le clique
gauche.
Facile, n’est-ce pas?
LES CHOSES SIMPLES QU’Une macro NE PEUT PAS FAIRE
Insérer un bouton ActiveX
Ajoutons désormais un bouton ActiveX. Pour ce faire, cliquez dans l’onglet
Développeur sur Insérer, puis sélectionnez Bouton ActiveX. Maintenez et
glissez afin de créer le bouton sur le tableur. Ce type de bouton est différent
des boutons de formes, car ils fonctionnent directement avec VBA.
Maintenant, ajoutons-y des fonctionnalités qui ne peuvent être possibles
seulement en utilisant des macros. Nous souhaitons que ce bouton crée une
séquence de nombre selon la valeur insérée dans la case B2. C’est à dire, si
j’ajoutes le chiffre 1 alors je verrais un modèle allant de un en un. Si j’écris 5,
ce modèle ira de cinq en cinq, et ainsi de suite, de A1 jusque A100.
C’est là le bon moment pour expliquer les variables.
Variables, oui et boucles
Une variable est un terme algébrique, représenté plus communément par une
lettre dont la valeur varie. Par exemple, x + y = 10 ; dans cette équation il y a
deux variables que sont X et Y. Elles peuvent varier pour être égales à 10
lorsque additionnées. Si X=5 et Y=5 alors x+y=10, mais c’est aussi correct si
X=8 et Y=2, puisque X+Y=8+2=10… etc.
Avec VBA on déclare les variables aussi. Dans ce cas, nous allons ajouter
une fonctionnalité au bouton ActiveX créé à l’étape précédente.
D’abord, nous aurons besoin de choisir une variable numérique correcte.
Voici la plupart des types de variables, observez-les et voyez leur taille de
stockage et fourchette de valeurs dans le tableau ci-dessous :
Type de Taille de Fourchette de valeurs
données stockage
Octet 1 octet 0 jusque 255
Booléen 2 octets Vrai ou Faux
Integer 2 octets -32,768 jusque 32,767
Long 4 octets -2,147,483,648 jusque 2,147,483,647
(integer
long)
Single 4 octets -3.402823E38 jusque -1.401298E-45 pour
(single- des valeurs négatives ; 1.401298E-45 jusqu
precision 3.402823E38 pour des valeurs positives
floating-
point)
Double 8 octets -1.79769313486231E308 jusque
(double- -4.94065645841247E-324 pour des valeurs
precision négatives ; 4.94065645841247E-324 jusque
floating- 1.79769313486232E308 pour des valeurs
point) positives
Devise 8 octets -922,337,203,685,477.5808 jusque
(scaled 922,337,203,685,477.5807
integer)
Décimal 14 octets +/-79,228,162,514,264,337,593,543,950,33
sans virgules ;
+/-7.9228162514264337593543950335 wit
28 places to the right of the decimal; le plus
petit nombre qui ne soit pas zéro
+/-0.0000000000000000000000000001
Date 8 octets 1er Janvier 100, jusque 31 Décembre 31
9999
Objet 4 octets Toute référence à un objet
Chaîne 10 octets 0 jusque environ 2 billions
(longueur +
variable) longueur
de la
chaîne
Chaîne Longueur 1 jusque environ 65,400
(longueur de la
fixe) chaîne
Variable 16 octets N’importe quelle valeur numérique up
(nombres) supérieure à la gamme d’un Double
Variable 22 octets Pareil que pour une Chaîne à la longueur
(caractères) + string variable
length
User-defined Nombre La gamme de chaque élément est la même
(using Type) requis que celle de son type de donnée
par les
éléments
Dans ce tableau, nous pouvons observer que chaque variable dispose de
fourchettes de valeurs différentes, certaines plus larges que d’autres, et dans
le même temps la taille de stockage varie aussi. La plus petite unité de
mémoire disponible est appelée un octet, et selon ce tableau il va du chiffre 0
à 255.
Pour commencer, procédons comme suit :
1. Activez le bouton du mode Design, situé à côté tu bouton Insérer dans
l’onglet Développeur
2. Effectuez un double clique sur le bouton ActiveX
3. Vous êtes maintenant prêts à écrire le code
Private Sub CommandButton1_Click()
End Sub
Voici ce que vous devriez voir.
Écrivons maintenant quelques codes entre ces lignes :
Private Sub CommandButton1_Click()
Dim X As Octet
Dim Y As Octet
X=1
Y = Range("B1")
Do
Range("A" & X) = Y
X=X+1
Y = Y + Range("B1")
Loop Until X = 101
End Sub
Voici la signification de ce code :
Private Sub CommandButton1_Click()
Privé veut dire que vous ne trouverez pas le code dans le bouton macros.
CommandButton1 est le nom attribué par défaut au bouton ActiveX, et Click
signifie que le code sera appliqué uniquement lorsque l’on cliquera sur le
bouton.
Dim X As Octet
Dim déclare les variables, indiquant alors que X est une variable qui sera
utilisée avec des nombres allant de 0 à 255, puisque le octet n’accepte que
cette gamme de valeurs selon le tableau ci dessus.
X=1
Nous avons ajouté la valeur initiale de la variable, 1.
Y=Range(« B1 »)
La valeur de la variable Y est la même que celle inscrite dans la cellule B1.
Do
Veut dire « faire ceci ».
Range(« A »&X)=Y
Nous avons déjà déclaré X en tant que variable dont la valeur est 1. Alors, la
gamme AX signifie Range(« A1 »)=Y et Y est la gamme (« B1 »). Si on
ajoute le nombre 5 à B1, alors Y=5. C’est donc Range(« A1 »)=5.
X=X+1
Cela veut dire que X=1+1 car à cet instant X+1, puis enfin X+2. La prochaine
fois que l’on répètera le processus, ce sera encore X=X+1, mais cette fois
X=2, donc enfin X=3 car X=2+1 et ainsi de suite.
Y=Y + Range(« B1 »)
Ceci suit le même processus que l’étape précédente, mais avec une valeur
ajoutée dans Range(« B1 ») étant celle que nous avons inscrite. Si B1 a un 5,
alors ceci ajoutera un autre 5, s’en suivant une séquence selon ce que nous
avons inscrit dans la case B1.
Loop until X = 101
Cette ligne indique que le même procédé entre FAIRE et BOUCLE sera
répété jusqu’à ce que X=101.
End Sub
Marque la fin du procédé.
A vous maintenant !
Ajoutez le nombre 1 à la cellule B1 et cliquez sur le bouton. Vous verrez que
ceci remplis les cellules de A1 jusque A100 une par une. Essayez avec 2, et
elles se rempliront de deux en deux. Inscrivez maintenant le nombre 3 et
appuyez sur le bouton.
Félicitations! Vous venez de trouver votre premier bogue! Il s’agit d’un
débordement.
Les bogues sont des erreurs qui se manifestent lorsque l’on écrit un code
incorrect. Dans notre exemple, le code fonctionne parfaitement avec les
nombres allant de 0 à 255 seulement ; mais lorsque l’on demande au fichier
d’aller de trois en trois une centaine de fois nous nous attendons à ce qu’il
aille de 3 à 300, ce qui dépasse le nombre 255 causant un débordement.
Pour réparer ce bogue, nous disposons de deux options, soit nous augmentons
la valeur de la variable soit nous laissons Excel l’ajouter automatiquement.
Considérons la possibilité d’augmenter la capacité de la variable, de la
changer de octet (0 jusque 255) à integer (-32,768 jusque 32,767). Cela irait
si nous étions sûrs que nous ne travaillerons pas avec des nombres plus hauts
que 32767, ou que nous ne changerons pas pour « long » qui va de
-2147483648 jusque 2147483647. Il serait bien aussi de travailler avec des
millions, mais imaginons que quelqu’un aie besoin de mettre des milliards
dans la case B1. Dans ce cas, même une large variable ne suffira pas. Alors,
le meilleur moyen de résoudre ceci, c’est de ne pas déclarer la variable et de
laisser le code comme suit :
Private Sub CommandButton1_Click()
Dim X As Octet
X=1
Y = Range("B1")
Do
Range("A" & X) = Y
X=X+1
Y = Y + Range("B1")
Loop Until X = 101
End Sub
Ou de déclarer la valeur comme variable, qui autorise n’importe quelle lettre
et n’importe quel nombre.
Private Sub CommandButton1_Click()
Dim X As Octet
Dim Y As Variant
X=1
Y = Range("B1")
Do
Range("A" & X) = Y
X=X+1
Y = Y + Range("B1")
Loop Until X = 101
End Sub
Quels sont les avantages à déclarer les variables en octet, integer ou
autres?
Vous vous demandez peut-être pourquoi déclarer des variables en octet ou
integer… etc. si Excel peut en ajouter une automatiquement comme dans
l’exemple que nous venons de voir?
La réponse est simple mais importante. Rappelons-nous qu’une variable en
octet stocke seulement 1 octet en mémoire RAM, qui s’avère être la plus
petite unité de mémoire possible sous Excel, mais une variante déclarée
variable stockes au minimum 22 octets. Si nous ne déclarons pas une valeur
pour laquelle nous sommes surs de n’ajouter que les valeurs nécessaires, il
consommera plus de RAM, et fera ralentir le programme même sur des
tâches très simples.
Par exemple, je dois déclarer 1000 variables en octet. Cela occuperait 1
kilooctet de RAM seulement.
Cependant, par défaut, si vous ne fournissez pas de type de données, la
variable est déclarée variante, occupant alors 22 octets + string length, pour
les lettres.
Donc, 1000 variables non-déclarées seront automatiquement définies comme
variantes, et occuperont 22 kilooctets. Il s’agit de 21 kilooctets vides, ce qui
représente 95% d’espace non disponible et non utilisé qui auraient pu l’être si
nous avions sélectionné les octets. Si vous comptez programmer avec VBA et
voulez que votre programme soit le plus fluide possible, vous feriez bien
d’apprendre quels types de variables déclarer. Dans le cas contraire, les
chargements seront longs et le programme lent.
Exiger l’importance de la déclaration des variables
Un des plus gros problèmes de ne pas déclarer une variable est que cela
engendre des bogues, puisque nous tapons quelque chose d’incorrect.
Faisons-en un exemple simple :
1. Ouvrir Visual Basic
2. Double cliquer sur CeClasseur
3. Ajouter le code suivant
Public Sub Infinite()
myvariable = 200
myrange = 1
Do Until myvariabe = 300
Range("A" & myrange) = myvariable
myvariable = myvariable + 1
myrange = myrange + 1
Loop
End Sub
Comme vous pouvez le voir, c’est un code très similaire à celui que nous
avons écrit précédemment. Il devrait s’arrêter une fois que myvariable est
égale à 300 mais il continue. Pouvez-vous déceler le problème?
Si la réponse est non, lancez le code. Vous noterez qu’il va au-delà de 300 et
n’a pratiquement pas de fin, ou tout du moins jusqu’à ce qu’il n’ai plus de
fichiers. Dans Excel 365 le total des fichiers disponibles est de 1048576, il ira
donc jusque A1048576 et vous avertira d’une erreur.
Si vous ne voulez pas attendre jusque là, pressez la touche Échap qui
interrompra l’exécution du code, appuyez ensuite sur le bouton fin.
Le problème est que nous avons oublié une lettre dans une variable. Nous
l’avons nommé myvariable mais en codant nous n’avons pas précisé la lettre
L : Do Until mavariabe.
Excel identifie myvariable et mavariabe comme deux variables différentes, et
leur assigne automatiquement le type variante.
Que se passerait-il si votre code comprends beaucoup de lignes? Pour trouver
le problème vous devriez regarder tous vos codes pour trouver la lettre
manquant ! Ça serait évidemment un problème. C’est pourquoi Microsoft
Excel dispose d’une option appelée Require Variable Declaration.
Ça ne vous permettra pas d’écrire quoique ce soit qui ne soit pas du code ou
une variable déclarée. Pour activer cette option, suivez les instructions
suivantes :
1. Visual Basic
2. Barre d’outils
3. Options
4. Require Variable Declaration
5. OK
Ceci ajoutera quelque chose au dessus du code : Option Explicite. Cependant
vous ne verrez pas cette modification avant de démarrer un nouveau projet,
insérer un module ou l’écrire vous-même. C’est pourquoi il est important de
toujours démarrer un projet avec cette option active.
Dans ce cas, ajoutez Option Explicite manuellement au dessus du code.
Option Explicit
Public Sub Infinite()
myvariable = 200
myrange = 1
Do Until myvariabe = 300
Range("A" & myrange) = myvariable
myvariable = myvariable + 1
myrange = myrange + 1
Loop
End Sub
Après avoir ajouté ce code, lancez le !
Vous verrez qu’il affiche automatiquement un message vous avertissant
qu’aucune variable n’a été définie tout en surlignant le problème. Il vous
évitera de nombreux problèmes relatifs aux fautes de frappes dans les
variables.
PERFORMANCES DES APPLICATIONS
Maintenant, imaginez que vous ayez vraiment besoin de remplir une à une les
cellules allant de A1 à A1048576, et que c’est une action que devra effectuer
votre application.
Pour tous les développeurs, il est important de créer des applications qui
s’exécutent rapidement. Travailler avec Excel ne fait pas exception. Essayez
de lancer le code suivant et voyez combien de temps le programme prends
pour remplir toute la colonne A avec des nombres :
Public Sub FillColumnA()
Dim X As Long
X=1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X=X+1
Loop
MsgBox "Finished"
End Sub
Quand il terminera vous verrez s’afficher le message « Terminé ». Cela
prendra plus ou moins 5 minutes, selon les performances de votre ordinateur.
Il est probable qu’Excel ne réponde plus, mais la plupart du temps cela
fonctionne. Nous ne voulons pas attendre trop longtemps!
Une bonne façon pour les développeurs VBA de rendre les applications plus
rapides, est de désactiver le ScreenUpdating. Chaque changement qu’Excel
fait, nous sommes supposés les voir. Mais si nous ne voulons pas, cela
améliorera considérablement ses performances.
Changeons le code pour celui ci :
Public Sub FillColumnA()
Dim X As Long
On Error GoTo A
Application.ScreenUpdating = False
X=1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X=X+1
Loop
A:
MsgBox "Finish"
End Sub
Lancez le et comptez le temps afin de comparer à quel point ce code est plus
rapide. N’oubliez pas d’effacer la colonne A avant de commencer. Vous
devriez remarquer une grande différence! Screenupdating est un bon outil
lorsqu’il s’agit d’augmenter les performances d’une application. Allez
maintenant sur le tableur et essayez quelque chose. Vous verrez qu’il n’est
plus possible d’effectuer quoique ce soit, ou tout du moins vous ne le verrez
pas car screenupdating=false corresponds à la désactivation de la visibilité
des modifications. Donc, lorsque vous utilisez
Application.screeupdating=false n’oubliez JAMAIS d’ajouter
Application.ScreenUpdating=True à la fin de votre code. En tant que
sauvegarde en cas d’erreur, faites comme le code suivant :
Public Sub FillColumnA()
Dim X As Long
On Error GoTo A
Application.ScreenUpdating = False
X=1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X=X+1
Loop
A:
Application.ScreenUpdating = True
MsgBox "Finished"
End Sub
MSGBOX
Comme vous avez pu le voir dans le code ci-dessus, elle affiche un message
disant Fini. Mais nous pouvons faire tellement plus !
Un de ces messages peuvent exécuter des codes aussi! Regardez le tableau ci-
dessous :
Constante Valeur
vbOK 1
vbAnnuler 2
vbAbort 3
vbRetry 4
vbAbandonner 5
vbOui 6
vbNon 7
Il s’agit du type de messages que vous pouvez affichez, et une fois que vous
cliquez dessus, il en retournera la valeur selon le tableau ci-dessus.
Lancez le code suivant :
Public Sub fff()
Dim X As Octet
X = MsgBox("This is the body", vbYesNoCancel, "This is the title")
MsgBox X
End Sub
Ceci affichera la msgbox avec les boutons Oui, Non et Annuler. Une fois que
vous cliquez sur l’un de ces boutons, X prendra cette valeur et s’affichera
dans la prochaine Msgbox. Donc, si vous cliquez Oui, vous verrez le chiffre 6
et si vous cliquez Non vous verrez le chiffre 7.
C’est un grand avantage puisque nous pouvons ainsi demander aux
utilisateurs s’ils souhaitent continuer ou non… etc.
Les cases Si et Sélectionner
Nous voyons que lorsque nous ajoutons une msgbox, nous pouvons
également créer un message d’alerte, une information… etc. Ajoutons-en un
au code ci-dessous pour comprendre comment le faire :
Public Sub myMessageBox()
Dim X As Octet
X = MsgBox("I'll tell you the button you pressed on", vbYesNoCancel +
vbExclamation, "What Button would you press?")
If X = 2 Then
MsgBox "You Pressed Button Cancel"
ElseIf X = 6 Then
MsgBox "You pressed Button Yes"
Else
MsgBox "You pressed Button No"
End If
End Sub
Il vous dira sur quel bouton vous avez pressé. Cela veut dire que si vous
pouvez connaître quel bouton a été activé, vous pouvez alors contrôler une
action en fonction de cela. En guise d’exemple, exécutez une macro.
« Si » est le conditionnel. Comme dans :
Public Sub Evaluation()
Dim X As Octet
X = Range("A1")
If X = 5 Then
MsgBox "There's a number " & X
ElseIf X = 6 Then
MsgBox "There's a number " & X
ElseIf X = 7 Then
MsgBox "There's a number " & X
ElseIf X = 8 Then
MsgBox "There's a number " & X
Else
MsgBox "There's another value"
End If
End Sub
Donc « si » crée une condition, « elseif » est coché dans le cas ou la première
condition n’est pas remplie et sera coché autant de fois que vous en ajouterez
jusqu’à ce qu’une condition soit remplie. « Else » se lancera dans le cas ou
aucune condition n’est remplie. Alors, si nous n’ajoutons aucun chiffre entre
5 et 8, nous verrons apparaître le message suivant : « Il y a une autre valeur »,
mais si nous mettons le chiffre 8, nous verrons apparaître le message : « Il y a
le chiffre 8 ».
If, elseif et else sont très similaires à un autre type de code appelé Select
Case, Case et Case Else. Et il s’avère être plus efficace que « Si » dans
certains cas. Faisons la même chose que ci-dessus mais en utilisant Case cette
fois :
Public Sub Cases()
Dim X As Octet
X = Range("A1")
Select Case Range("A1")
Case 5 To 8
MsgBox "There's a number " & X
Case Else
MsgBox "There's another value"
End Select
End Sub
Ce dernier utilise beaucoup moins de lignes. C’était meilleur et plus facile.
Libre à vous de choisir ce qui vous convient le mieux.
QUIZ 3
Qu’est ce qu’une variable?
1. Une valeur qui ne change jamais.
2. Une valeur changeante.
3. Un nombre spécifique.
Qu’est est la capacité de stockage d’un octet variable ainsi que sa
fourchette de valeurs?
1. Il stocke 2 octets et va de -32567 jusque 32567.
2. Il stocke 1 octet et va de -256 jusque -256.
3. Il stocke 1 octet et va de 0 à 256.
Quel est l’avantage de déclarer les variables?
1. On consomme moins de RAM, permettant une exécution plus fluide.
2. On consomme plus de RAM, ralentissant l’exécution.
3. Cela ne fonctionnerait pas si les variables n’étaient pas déclarées.
Est-ce obligatoire de déclarer les variables?
1. Seulement si Require Variable Declaration est activé.
2. C’est obligatoire dans tous les cas.
3. C’est facultatif, puisque qu’Excel les déclare automatiquement
conformément à la valeur ajoutée.
MSGBOX retourne une valeur en fonction du bouton cliqué.
1. On assigne une valeur à chaque bouton.
2. Il en retourne une valeur en fonction du bouton cliqué.
3. Aucune valeur n’est retournée.
CHAPITRE 4
Projet : Créer une calculatrice simple
en utilisant ActiveX
Nous allons tout d’abord créer une calculatrice. Une fois ce projet complété,
nous en créerons une plus sophistiquée. Pour ce faire, nous aurons besoin des
pré-requis suivants :
Qu’est-ce qu’un module?
Lors de l’écriture d’un code VBA, nous commençons généralement sur la
Feuille1. Mais pour comprendre les Modules, les Procédures Privées et
Publiques, nous créerons une calculatrice visuelle. Premièrement sur un
tableau ensuite comme un programme réel.
Un module s’apparente à une boîte, dans laquelle nous ajoutons des lignes de
code à lancer lorsque nous « l’appelons ». Pour comprendre comment cela
fonctionne, nous créerons notre propre calculatrice en utilisant quelques uns
de ces modules.
Créer un module
Tout d’abord, ajoutez le bouton Active X suivant sur une feuille dans un
tableau comme dans l’image ci-contre. Pour attribuer le bon
symbole à chaque bouton, la méthode est différente de celle que
nous avons vu avec les boutons de formes. Dans ce cas précis,
nous devons cliqer sur le bouton Design More dans l’onglet
Développeur, puis effectuer un clique droit sur chaque bouton.
Vous verrez ensuite quelque chose comme sur l’image ci-dessous,
dans laquelle nous pouvons voir quelque chose nommé « Nom ».
La plupart d’entre nous penseraient qu’il y ait un endroit dans
lequel mettre le bon symbole à voir, mais c’est faux. Excel
identifie le bouton avec ce nom. Imaginez que vous ayez plusieurs boutons
dont le nom est « + ». Comment Excel et même vous pourriez possiblement
identifier lequel est le bon? Alors, chaque bouton aura un nom différent.
Ajoutons en un correct qui nous permettra de savoir ce qu’il fait. Dans
l’exemple nous avons inscrit cmdAddition, nous permettant de savoir que
ceci s’applique au bouton « + ». Toutefois, comment ajouter le signe +?
Sur l’image ci-dessus, vous verrez qu’il existe une propriété appelée Caption.
C’est là que vous inscrirez le signe +.
Vous pouvez tout aussi bien vous amuser avec les autres options disponibles
comme Backcolor, Font, Height et même ajouter une image. Nous avons
laissé toutes les options dans leur configuration par défaut.
Après avoir répété le procédé pour tous les boutons, enchaînons sur les
prochaines étapes. Créons un module !
Laissez vous guider par les étapes suivantes :
1. Ouvrez Visual Basic via l’onglet Développeur. Par défaut, vous
devriez voir quelque chose comme ça :
2. Cliquez sur « Voir l’onglet » et sélectionnez « Propriétés de la
fenêtre ». Nous utiliserons beaucoup cette fenêtre. Maintenant vous
devriez voir apparaître quelque chose comme ce qui est montré à
l’intérieur du carré rouge :
3. Ajoutons maintenant notre premier module. Cliquez sur l’onglet
Insérer, puis Module.
4. Vous apercevrez un nouveau dossier appelé « Modules » avec un
fichier nommé Module 1 :
5. Sélectionnez le et changez son nom pour Addition dans les propriétés
de la fenêtre. Puis répétez le procédé jusqu’à ce que vous ayez créé
un Module pour Moins, Division et Multiplier.
6. Double cliquez sur le Module Addition afin de l’ouvrir.
7. Vous verrez qu’il affiche une page blanche. Nous devons y ajouter
une procédure ! Pour ce faire, cliquez sur l’onglet Insérer, puis
Procédure. Une fenêtre comme celle-ci va s’ouvrir, ajoutez un nom et
laissez la configuration par défaut.
8. Cliquez OK, vous verrez ceci apparaître :
9. Entre ces lignes, écrivez le code suivant :
Range (« A2 »)+Range (« B2 »)=Range(« C2 »)
10. Cliquez sur le triangle vert au dessus pour le lancer.
11. Une erreur vous indiquera : Invalid Use or Property. Peut-être parce
que nous n’avons tapé aucun nombre dans les cases A2 et B2.
Ajoutez en et lancez le code à nouveau.
Il y a toujours un problème ! Pouvez-vous voir de quoi il s’agit?
Bienvenue dans le deuxième bogue!
Ce problème est très commun. Nous demandons à Excel que les cellules
A2+B2 soient égales à C2 au lieu que C2 soit égal à A2+B2. Il s’agit
seulement d’un problème de commande. Et vous feriez mieux de ne pas
oublier cette règle ! Toujours ajouter en premier la case que vous souhaitez
voir changer, puis les valeurs dont vous aurez besoin. Comme ceci :
Range(« C2 »)=Range(« A2 »)+Range(« B2 »)
Lancez le à nouveau avec ce même triangle vert. OK ! Cela fonctionne !
Si vous voyez apparaître une ligne jaune vous empêchant de le lancer, cliquez
sur stop, corrigez votre code et relancez le.
Vous verrez maintenant dans la case C2 le résultat d’A2+B2.
Complétons maintenant les autres modules en répétant le processus correct
évoqué ci-dessus. Ajoutez les codes comme suit :
Module Moins
Public Sub Minus()
Range("C2") = Range("A2") - Range("B2")
End Sub
Module Division
Public Sub Division()
Range("C2") = Range("A2") / Range("B2")
End Sub
Module Multiplier
Public Sub Times()
Range("C2") = Range("A2") * Range("B2")
End Sub
Vous devriez normalement voir un fichier comme celui-ci :
Tous les modules devraient marcher si vous les lancez.
Maintenant, relions les modules à leur bouton.
Il vous suffit de suivre les instructions ci-dessous :
1. Rendez vous sur le tableur.
2. Cliquez sur le Design Mode.
3. Double cliquez sur chaque bouton. Vous verrez qu’à chaque fois, du
code s’ajoute à la Feuille 1(Feuille1). À la fin, cela devrait ressembler
à ça :
Maintenant, effectuons le processus « Calling ». Pour cela vous écrirez
simplement chaque Module entre ses lignes correspondantes :
Private Sub cmdAddition_Click()
Addition
End Sub
Private Sub CmdDivision_Click()
Division
End Sub
Private Sub CmdSubstraction_Click()
Minus
End Sub
Private Sub CmdTimes_Click()
Times
End Sub
Après avoir écrit le code ci-dessus, essayez de cliquer sur un bouton :
Vous voilà face à votre 3ème bogue ! Que se passe-t-il? Lisons le message
d’erreur : il n’attendait pas de module, mais une variable ou une procédure.
Le problème dans ce bogue est que les Modules et Procédures de cet exemple
ont le même nom, et c’est une grosse erreur. Rien ne devrait avoir le même
nom lorsque l’on fait de la programmation !
Réglons rapidement le problème. Ajoutez simplement le chiffre 1 après
chaque sous-procédure de chaque module.
Public Sub Addition1()
Range("C2") = Range("A2") + Range("B2")
End Sub
Vous devriez également changer le code écrit sur la Feuille1. Ajoutez celui
que nous venons d’écrire à chaque sous procédure de chaque module :
Private Sub cmdAddition_Click()
Addition1
End Sub
Private Sub CmdDivision_Click()
Division1
End Sub
Private Sub CmdSubstraction_Click()
Minus1
End Sub
Private Sub CmdTimes_Click()
Times1
End Sub
Essayez maintenant de cliquer sur chaque bouton pour vérifier que cela
fonctionne !
Excellent !
Nous sommes supposés avoir une bien meilleur connaissance des Modules et
Procédures puisqu’ils sont constamment utilisés. Mais vous avez surement
remarqué que certains d’entre eux sont appelés Publics et Privés. Qu’est-ce
que cela signifie?
PUBLIC signifie que la procédure peut-être « appelée » de n’importe où.
Vous noterez aussi que toutes se trouvent dans la liste des macros, alors que
les PRIVÉS ne le sont pas.
Changez un ou deux modules en inscrivant Privé au lieu de Public et essayez
de les lancer.
Puisqu’il s’agissait d’un module privé, il n’a pas pu le retrouver. Changeons
alors le mot Privé en Public à nouveau, et il fonctionne à nouveau.
Donc, les modules privés ne peuvent être appelés contrairement aux modules
publics, même depuis la liste des macros. En d’autres termes, les modules
privés ne sont pas reliés, les publics oui.
Nous avons jusqu’alors vu les fonctions les plus basiques vous permettant
d’avoir désormais une bonne idée de ce qu’est VBA. Tournons nous
maintenant vers quelque chose de plus professionnel : une vraie calculatrice.
AJOUTER DES LETTRES?
Avant de commencer avec la calculatrice, menez cette expérience
intéressante, elle vous sera utile. Dans la précédente calculatrice, essayez
d’ajouter deux lettres à la place des nombres.
Vous remarquerez que c’est possible ! A + A = AA ?! Cela ne devrait pas
marcher si vous soustrayez, divisez ou multipliez. Mais en utilisant le « + »
dans VBA la formule est différente de =SUM(). Il s’agit là d’un point
important pour le prochain projet.
QUIZ 4
Qu’est-ce qu’une procédure privée?
1. Personne ne peux voir le code car il est masqué.
2. Le code ne peut être copié/collé.
3. Il ne peut être appelé par une autre partie du code.
Qu’est-ce qu’une procédure publique?
1. Le code peut être appelé et exécuté depuis n’importe quel endroit du
classeur.
2. Il peut être visible en ligne.
3. Le code ne peut-être protégé par des mots de passe.
CHAPITRE 5
Projet : Créer une calculatrice en
utilisant les formes
Aperçu
Cette fois nous utiliserons bien plus de fonctionnalités de VBA. Nous allons
comprendre notamment pourquoi il est nommé « Visual Basic ».
Avant toute chose, passons en revue quelques points importants :
1. Choisissez la variable correct pour éviter les bogues et exécuter le
programme de manière fluide.
2. Écrivez le code dans le bon ordre, autrement un bogue surviendra.
3. Ne répétez jamais le nom de quelque chose dans un programme, tout
doit être identifié grâce à un nom qui lui est propre.
4. Vous avez sûrement remarqué les lettres bleues. Il s’agit de codes
intégrés utilisés par Excel VBA. Ne les modifiez et ne les changez
pas sans connaissances, vous risqueriez de produire des erreurs.
5. Conseil : Employez toujours des noms avec au moins une lettre
capitale, et en les appelant écrivez les en minuscule. Vous noterez que
cela vous empêchera de faire des fautes de frappe, car écrit
correctement les capitales seront ajoutées automatiquement.
6. Testez constamment les nouveaux codes que vous écrivez, afin d’être
sûr qu’ils fonctionnent.
7. Ajoutez suffisamment de commentaires pour savoir quelles sont les
fonctions de vos codes. Nous y reviendrons plus tard.
FORMES
VBA pour Excel dispose d’un outil appelé Formes dans lequel vous pouvez
créer un visuel de l’application, comme vu au début de ce livre. C’est de cette
manière que nous allons créer notre calculatrice.
Procédez comme suit :
1. Ouvrez un nouveau document Excel.
2. Ouvrez Visual Basic.
3. Cliquez sur l’onglet Insérer.
4. Userform.
Vous devriez voir apparaître quelque chose de ce genre :
Il s’agit d’un userform, qui va vous permettre de créer la calculatrice. Vous
voyez très certainement une fenêtre appelée « Controls » avec plusieurs
options à l’intérieur ; nous l’utiliserons tout le temps alors ne la fermez pas.
Si c’est déjà fait, vous pouvez rouvrir cette fenêtre en cliquant sur l’onglet
Aperçu, puis sur Boîte à Outils.
Ne fermez pas non plus les propriétés Userform. Elles constituent l’outil
principal que nous utiliserons pour ce projet, puisque dans ce cas, nous ne
toucherons à aucune feuille Excel.
Dans la fenêtre des propriétés changez les valeurs suivantes :
Name: CalculatorProject
Caption: Calculator
Height: 260
Width: 200
Rappelez vous que Caption est le titre affiché.
Dans la boîte à outils choisissez l’étiquette, marqué par un A à côté de la
flèche curseur.
Une fois sélectionné, cliquez sur la partie supérieure de la forme, maintenez
et tirez pour créer un rectangle qui formera l’écran de la calculatrice.
Maintenant, sélectionnez l’étiquette, et changez son nom dans les propriétés.
Appelez-le « Display ». Puis, effacez la valeur caption.
Dans la boîte à outils, choisissez le bouton de commande et ajoutez une série
comme la suivante :
Chaque fois que vous ajoutez un nouveau bouton, soyez surs de le faire avec
les dimensions suivantes :
Height: 30
Width: 36
Conseil : Créez un seul bouton, puis copiez/coller le nombre de boutons que
vous voulez. Mettez les à leur place puis assurez vous que chaque bouton est
ajouté avec les informations suivantes :
Name Caption
CmdDel Del
CmdCE CE
CmdPourcentage %
CmdMultiplier *
CmdDivision /
CmdAdd +
CmdMoins -
CmdEgal =
Cmd1 1
Cmd2 2
Cmd3 3
Cmd4 4
Cmd5 5
Cmd6 6
Cmd7 7
Cmd8 8
Cmd9 9
CmdDot .
Cmd0 0
Cmd00 00
Félicitations !
CODE DES BOUTONS DE COMMANDE
Une fois que nous avons le visuel de la calculatrice et que les noms sont
correctement attribués, lancez la et cliquez sur chaque bouton. Rien ne se
passe, puisque nous n’avons pas dit à Excel ce qu’il devait en faire. Ajoutons
alors un code à chaque bouton.
1. Double cliquez sur le bouton avec le chiffre 1
2. Le code suivant s’ajoute automatiquement :
Private Sub cmd1_Click()
End Sub
3. Ajoutez ce code entre les lignes ci-dessus :
Display.Caption = cmd1.Caption
4. Lancez la forme.
5. Vous devriez voir un chiffre 1 écrit sur le display, mais il s’agit de
bien plus que ça. S’il s’agit d’une calculatrice, nous devons en ajouter
plusieurs si besoin. Alors comment faire?
Le problème ici est que le code indique la caption du display (qui est vide) est
égale à la caption de cmd1, qui est un chiffre 1 et c’est précisément ce qu’il
fait.
Afin de régler ce problème nous devons demander à Excel d’ajouter un
chiffre 1 après un chiffre 1, et ainsi de suite.
Display.Caption = Display.Caption + cmd1.Caption
Vous comprenez maintenant. C’est exactement ce que nous avons fait au
début de ce livre. Vous rappelez-vous du moment ou nous avons fait en sorte
que les cellules augmentent leur valeur selon la valeur inscrite dans la case
B1?
Si vous le souhaitez, vous pouvez retrouver ce passage dans Variables, do et
boucles à la page 11.
Cela veut dire que X=X+1 ou, en d’autres termes, que display.caption
ajoutera sa propre valeur plus la caption de cmd1. Donc, 1=1+1=11 ce qui n’a
aucun sens mathématique, toutefois, rappelez-vous des lettres que nous avons
ajouté à la précédente calculatrice. Selon cette dernière A+A=AA, donc ici
1+1=11. Afin de rendre ceci plus clair, en cliquant le bouton 1, ce serait
1=1=1, supposons que vous tapez maintenant le chiffre 2. Ce serait donc
1=1+1=12, tapez maintenant sur le 7 : 12=12+7=127, et enfin le chiffre 9 :
127=127+9=1279… et ainsi de suite.
Lancez le tout avec le nouveau code. Félicitations ! Cela fonctionne !
Vous devriez tous avoir le code suivant :
Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub
Répétons la même chose pour tous les nombres et symbols, en double
cliquant sur chaque bouton et en modifiant le code automatiquement généré
comme nous venons de le faire :
Private Sub Cmd0_Click()
Display.Caption = Display.Caption + Cmd0.Caption
End Sub
Private Sub Cmd00_Click()
Display.Caption = Display.Caption + Cmd00.Caption
End Sub
Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub
Private Sub Cmd2_Click()
Display.Caption = Display.Caption + Cmd2.Caption
End Sub
Private Sub Cmd3_Click()
Display.Caption = Display.Caption + Cmd3.Caption
End Sub
Private Sub Cmd4_Click()
Display.Caption = Display.Caption + Cmd4.Caption
End Sub
Private Sub Cmd5_Click()
Display.Caption = Display.Caption + Cmd5.Caption
End Sub
Private Sub Cmd6_Click()
Display.Caption = Display.Caption + Cmd6.Caption
End Sub
Private Sub Cmd7_Click()
Display.Caption = Display.Caption + Cmd7.Caption
End Sub
Private Sub Cmd8_Click()
Display.Caption = Display.Caption + Cmd8.Caption
End Sub
Private Sub Cmd9_Click()
Display.Caption = Display.Caption + Cmd9.Caption
End Sub
Private Sub CmdAdd_Click()
Display.Caption = Display.Caption + CmdAdd.Caption
End Sub
Private Sub CmdDivision_Click()
Display.Caption = Display.Caption + CmdDivision.Caption
End Sub
Private Sub CmdDot_Click()
Display.Caption = Display.Caption + CmdDot.Caption
End Sub
Private Sub CmdMinus_Click()
Display.Caption = Display.Caption + CmdMinus.Caption
End Sub
Private Sub CmdPercent_Click()
Display.Caption = Display.Caption + CmdPercent.Caption
End Sub
Private Sub CmdTimes_Click()
Display.Caption = Display.Caption + CmdTimes.Caption
End Sub
L’ensemble de ce code doit nous laisser voir apparaître chaque chiffre et
symbole sur le display. Les boutons Égal, Supprimer et Corriger/Annuler
sont ceux que nous ne voyons pas écrits sur notre écran puisqu’ils doivent
recevoir un traitement différent.
Premier bouton, CE :
Il est censé effacer tout l’écran, il s’agit du plus facile des trois, voici le code :
Private, Sub CmdCE_Click()
Display.Caption = Empty
End Sub
Comme vous le voyez sur le code, l’écran est censé être vide.
Deuxième bouton, Corriger/Annuler :
Celui ci doit effacer un à un, à partir des derniers chiffres tapés. Comment
faire cela? Vous êtes ici censés connaître quelques formules Excel. Alors
tentez de résoudre ce cas.
Vous avez du mal? Voilà un peu d’aide :
Valeurs Formule Résultat
appliquée
12345678 =left(A1,len(A1)) 12345678
12345678 =left(A1,len(A1)-1) 1234567
12345678 =left(A1,len(A1)-2) 123456
=left() affiche depuis la valeur à gauche, en fonction du nombre de lettres
indiqué.
=len() compte le nombre de lettres contenues dans une cellule.
-1 soustrait 1 du total de lettres/chiffres de len().
Le résultat sera affiché au dessus. Donc, que se passe-t-il si nous répétons
plusieurs fois ce procédé, appliqué à la même cellule?
Répétitions Valeur Formule Résultat
appliquée
1 12345678 =left(A1,len(A1)) 12345678
2 1234567 =left(A1,len(A1)) 123456
3 123456 =left(A1,len(A1)) 12345
Il effectue ce que devrait faire le bouton Corriger/Annuler. Nous avons
besoin qu’à chaque fois que nous appuyons sur ce bouton, il efface
uniquement le dernier chiffre ou la dernière lettre ajouté comme le fait cette
formule. Pour faire en sorte que le bouton applique cette formule :
Double cliquez sur le bouton et ajoutez le code suivant :
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)
Voilà ! Nous venons d’ajouter deux variables utilisés dans une séquence
simple. Essayez ! Ajoutez quelques chiffres puis appuyez sur le bouton, cela
devrait fonctionner. Mais que se passe-t-il s’il n’y a plus de chiffres et que
l’on appuie sur le bouton? Évidemment, une erreur s’affiche. Comment
résoudre ce nouveau problème?
C’est très simple, ajoutez un code contenant « SI » :
If Display.Caption <> Empty Then
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)
End If
End Sub
Les deux lignes de code que nous venons d’ajouter signifient que SI
display.caption n’est « pas » vide alors il faut appliquer le code. Dans le cas
contraire, s’il est vide, ne rien faire.
FORMULES EXCEL SUR VBA
Penchons nous maintenant sur le bouton égal : nous voulons qu’il fasse toutes
les opérations que nous avons ajoutées sur display.caption. Comment?
Il s’agit du bouton le plus complexe de la calculatrice, mais aussi du plus
important puisqu’il donne le résultat de tout ce que nous avons fait. Il existe
plusieurs manières de faire ceci mais utilisons
Application.WorksheetFunction.
Une fois que vous tapez le point, vous devriez voir une longue liste
s’afficher. Il s’agit de la liste complète des formules normalement utilisés
dans Excel. Ajoutons-y le code suivant et voyons ce qu’il se passe :
Private Sub CmdEquals_Click()
Dim X As Variant
X = Application.WorksheetFunction.Sum(Display.Caption)
Display.Caption = Empty
Display.Caption = X
End Sub
Cela devrait marcher, vous ne pensez pas? Ça n’est pas le cas.
La première ligne déclare X comme une variable, ce qui veut dire qu’il peut
contenir n’importe quelle valeur.
X est égal à SUM(display.caption).
Ce qui devrait être X = SUM(2+2*4/7)
COMBINER VBA ET UN TABLEUR
Si vous essayez ceci dans une cellule d’un tableur, ça fonctionnera. Mais pas
en utilisant une variable, pour de nombreuses raisons dont la principale est
parce qu’il n’est pas possible d’ajouter le nombre 12 plus un signe
additionner, etc. Nous aurions besoin de faire une conversion, ainsi que
quelques procédures supplémentaires. Dans ce cas, toutefois, nous pouvons
juste commencer à utiliser le tableur.
Nous utiliserons une cellule du tableur afin de se familiariser à la
combinaison de VBA et des tableaux.
Nous allons demander à Excel de convertir Display.caption en une formule
dans la case A1.
Si vous enregistrez une macro et ajoutez une formule, le code sera
probablement : Activecell.FormulaR1C1 = « = »… mais nous n’avons pas
besoin de R1C1 pour notre code, c’est pourquoi nous l’avons effacé.
Private Sub CmdEquals_Click()
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
End Sub
Lancez le programme et essayez-le! Ça fonctionne! Maintenant, écrivez un
code incorrect comme : 5*
Appuyez sur =,
Vous voilà face à un autre bogue !
Voilà pourquoi les programmeurs essayent leurs applications très
fréquemment. Vous devez toujours faire de même. Comme vous pouvez le
voir, nous avons déjà eu à faire à de nombreux bogues, seulement en
travaillant sur une calculatrice. Une fois que vous serez habitué à utiliser le
code, vous serez à même d’identifier et prévenir ces derniers plus facilement.
Pour résoudre celui ci, nous appliquerons notre premier Contrôle d’Erreurs.
Ainsi, à chaque fois que quelque chose tourne mal il sera appliqué à la place
de ce type de fenêtres.
Ajoutez le code suivant :
Private Sub CmdEquals_Click()
On Error GoTo A
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
Exit Sub
A:
Range("A1").Clear
Display.Caption = "Error"
End Sub
Ça peut sembler facile à comprendre. Nous avons On Error Goto A, et nous
voyons également un A au milieu de ces lignes. Alors, si quelque chose
tourne mal, le code sera appliqué à partir de ce même A jusque la fin, c’est à
dire End Sub.
Ce code dit d’effacer la case A1 et d’afficher le message d’erreur dans
Display.Caption à la place.
Nous voyons également au dessus du A: une ligne disant Exit Sub. Cela
signifie que le code sera lu jusqu’à ce qu’il l’atteigne seulement, autrement la
calculatrice lirait sans cesse ce qui est des erreurs. Ce n’est pas ce que nous
voulons.
Essayez à nouveau d’inscrire quelque chose d’incorrect comme 5+
seulement. Vous voyez? Cela a fonctionné, notre calculatrice s’améliore à
chaque étape.
LES DÉCLARATIONS
Maintenant, nous convenons qu’il n’est pas agréable de voir le message
d’erreur même après avoir pressé un autre bouton.
Il serait judicieux qu’il s’efface automatiquement lorsque nous cliquons sur
un autre bouton. Pour ce faire, nous allons simplement ajouter une nouvelle
ligne de code au bouton égal. Cette fois, il ne sera pas appliqué lorsque nous
cliquons dessus, mais quand nous sortons du bouton en cliquant sur un autre.
Suivez les instructions suivantes :
1. Double cliquez sur le bouton égal
2. Cliquez afin de faire apparaître toutes les options, comme sur
l’image, et sélectionnez Quitter
Bravo! Vous avez maintenant interagi avec chaque attribut de chaque bouton.
Comme vous pouvez le voir, le code pourrait être appliqué si vous cliquez sur
le bouton, si vous le maintenez, en sortez et même si vous placez votre
curseur dessus. N’est-ce pas magnifique?
Une fois que vous avez sélectionner Quitter, vous verrez apparaître un
nouveau code. Ajoutez celui-ci :
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Display.Caption = Empty
End Sub
Cela fonctionne désormais comme nous le voulions. Après tout, vous vous
rendez bien compte que coder n’est que pure logique, après avoir appris
quelques commandes de plus vous pourrez faire d’incroyables choses.
Vous venez d’apprendre à corréler un peu un tableur et VBA, car nous
utilisons la rangée A1. Mais et si nous ne voulons pas utiliser de cases du
tableur?
Nous venons de voir que nous ne pouvons pas utiliser de variables, n’est-ce
pas? Bien sur que si, nous pouvons, le tout étant de savoir comment.
Vous pouvez maintenant tout effacer du bouton égal, et changer ce code :
On Error GoTo A
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
Exit Sub
A:
Range("A1").Clear
Display.Caption = "Error"
End Sub
Pour celui ci :
Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Nous n’avons pas tout de suite utilisé cette solution car il est important de
faire des erreurs pour apprendre. Il se peut qu’un jour vous ne connaissiez pas
la formule à utiliser, dans ce cas savoir comment relier VBA à un tableur
vous sera très utile.
Le code ci-dessus signifie :
Application désigne Excel.
Évaluer est une méthode d’Excel. Elle converti un nom Microsoft Excel en
un objet ou une valeur. En d’autres termes, en valeurs utilisables pouvant être
additionnées, divisées, multipliées… etc.
Maintenant nous n’utilisons aucun tableur. Alors pourquoi le laisser ouvert?
Nous nous intéressons seulement à l’application crée ! Que faire?
OUVRIR ET FERMER LES DÉCLARATIONS : AFFICHER UNE
FORME SANS REGARDER AUCUN TABLEUR
La calculatrice fonctionne bien mais nous voudrions ne pas voir tout le
tableur en arrière plan. Nous ne voulons même pas voir Excel ouvert car ce
n’est pas très commun lorsque nous utilisons une application, faisons donc
partir le tableur !
Cela devrait ressembler à ça :
Nous voyons seulement le bureau derrière, et aucun tableau.
Allons y étape par étape. Vous en apprendrez plus sur les fonctionnalités de
VBA, et même sur quelques questions de sécurité des macros.
Suivez les étapes ci-dessous :
1. Avant toute chose, nous voulons que la calculatrice s’ouvre
automatiquement lorsque le fichier est ouvert. Dans le dossier Projets
VBA(Calculadora), sélectionnez CeClasseur. Vous devriez voir deux
options : Général et Déclarations.
2. Ouvrez Général et sélectionnez Workbook.
3. Maintenant, les Déclarations devraient avoir changé pour s’ouvrir.
Autrement, sélectionnez les. Cela veut dire qu’à chaque fois que ce
Workbook s’ouvrira, il faudra exécuter le code entre :
Private Sub Workbook_Open()
End Sub
4. Maintenant, entre ces lignes, insérez :
Private Sub Workbook_Open()
CalculatorProject.Show
End Sub
5. Sauvegardez votre fichier.
6. Fermez et ouvrez à nouveau pour essayez. Cela devrait ouvrir la
calculatrice automatiquement. Il s’agit de l’évènement Ouvrir, un outil très
utile tant pour des grands projets que des plus petits.
Toutefois, nous voyons toujours Excel ouvert. Vous rappelez-vous que dans
certains codes Application désigne Excel? Cela veut dire que nous devrions
écrire un code indiquant qu’Application doit être invisible.
Ajoutez le code suivant à celui que vous venez d’écrire : Application.Visible
= False
Cela devrait ressembler à ça :
Private Sub Workbook_Open()
Application.Visible = False
CalculatorProject.Show
End Sub
Sauvegardez votre fichier, fermez et rouvrez.
Félicitations ! Vous ne voyez désormais que l’application créée. Une fois que
vous fermez la calculatrice, tout semble bien fonctionner. Mais il reste encore
quelque chose qui ne va pas…
Lorsque vous fermez la calculatrice, Excel semble se fermer également, tout
du moins il reste ouvert mais invisible. Alors que nous avons seulement
fermé la calculatrice ! Essayez d’ouvrir à nouveau le même fichier de la
calculatrice. Vous remarquerez qu’il s’ouvre sans charger quoique ce soit, et
n’affiche pas la calculatrice car c’était ouvert !
Nous voulons que lors de la fermeture de la calculatrice, Excel se ferme
aussi.
Pour se faire, suivez ces instructions :
1. Ouvrez VBA
2. CalculatriceProjet
3. Double cliquez sur n’importe quelle partie de votre Forme (sauf les
boutons et le caption) pour faire apparaître le code.
4. Vous verrez s’ouvrir quelque chose de ce type :
Private Sub UserForm_Initialize()
End Sub
5. C’est très similaire à l’ouverture des Déclarations que nous avons
appris, mais cela ne fonctionne qu’avec le projet. Nous n’en avons
toutefois pas besoin maintenant. Nous voulons le code de fermeture
pour notre Forme. La façon de le sélectionner est la même que nous
avons vue précédemment avec ThisWorkbook. Allez dans Initialiser,
sélectionnez le plus logique : Terminer.
6. Une fois sélectionné, vous verrez apparaître un code similaire à celui
ci :
Private Sub UserForm_Terminate()
End Sub
7. Rappelez vous qu’Application désigne Excel. Vous remarquerez que
lorsque vous tapez Application. (suivi d’un point) une longue liste
s’affiche. Vous pouvez regardez mais faites attention, il est possible
de faire de grosses erreurs (même en dehors d’Excel!) en jouant avec
le code. Choisissez Application.Quitter. Votre code devrait
ressembler à ça :
Private Sub UserForm_Terminate()
Application.Quit
End Sub
8. Sauvegardez votre fichier et essayez! Cela devrait fonctionner,
rapidement et facilement !
SÉCURITÉ DES Macros
Notre calculatrice semble bien fonctionner désormais. Essayez les étapes
suivantes :
1. 7*7
2. Cliquez sur le bouton égal
3. Vous verrez apparaître 49
4. Nous voulons maintenant faire 49+1. Cliquez donc (+)
5. Le 49 s’efface automatiquement, ce qui n’est pas normal pour une
calculatrice, puisqu’elle devrait nous laisser ajouter du code après
avoir affiché un résultat. Ajoutons ce code.
Nous sommes face à un problème. Comment éditer le code VBA si il ouvre et
ferme automatiquement Excel? Comment y accéder?
Nous avons ici l’opportunité de comprendre la sécurité des macros.
Vous devriez avoir cliqué sur le bouton activant les macros pour travailler
avec VBA, comme vu dans le chapitre 2. Une fois que vous avez cliqué
dessus, Excel sauvegarde un cheminement dans lequel ce fichier en
particulier sera autorisé à fonctionner avec les macros. Afin de désactiver
l’autorisation des macros, tout ce qu’il vous reste à faire est de déplacer le
fichier à un autre endroit. Essayez, puis rouvrez le. Vous verrez un message
indiquant que les macros ont été désactivés.
Une autre façon de faire, sans changer l’emplacement, est de changer le nom
du fichier. Essayez, vous verrez que vous recevrez le même message
concernant la désactivation des macros.
Si vous ne cliquez pas sur Enable Content, ou voulez simplement changer les
options de sécurité des macros, allez dans l’onglet Développeur et cliquez sur
Sécurité des Macros. Vous verrez toutes les options disponibles concernant
les macros dans tous les classeurs et pour ce fichier en particulier.
Vous pouvez maintenant vous rendre dans VBA et changer le code dont nous
avons besoin.
COMMENTAIRES
Nous ne souhaitons pas que la calculatrice efface ce qui est affiché à l’écran,
sauf s’il s’agit d’un message d’erreur. Cela permet de travailler de manière
plus efficace, nous devons donc retourner au code qui se charge d’effacer tout
cela. Vous rappelez-vous duquel il s’agit? Certainement, puisque nous
n’avons que peu de boutons.
Toutefois, que se passerait-il si nous avions des centaines et des centaines de
commandes?
Il est toujours pratique d’écrire des commentaires nous permettant
d’identifier facilement les fonctions de chaque code. Il est très courant de
résoudre quelques bogues, ajouter, supprimer ou améliorer des
fonctionnalités lors de la programmation. Alors n’oubliez pas d’ajouter des
commentaires pour trouver plus rapidement le code dont vous avez besoin.
Dans ce cas, nous avons besoin de changer le bouton égal. Cependant, il
possède deux codes ajoutés. Un qui se lance lorsque nous cliquons sur le
bouton, l’autre lorsque nous arrêtons de le sélectionner.
Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Display.Caption = Empty
End Sub
Le code que nous devons modifier se trouve dans la seconde partie de celui ci
dessus. D’abord, ajoutons quelques commentaires pour se rappeler de leur
fonction. Pour se faire, tout ce que vous avez à faire c’est d’écrire ce que
vous voulez en ajoutant une apostrophe à chaque début de phrase. Dans
l’exemple ci dessous nous avons ajouté deux phrases, il y a donc deux
apostrophes.
Private Sub CmdEquals_Click()
‘This Macro displays an error message in case we type wrong imposible
mathematics and click equals
‘otherwise it would run a bug and the program would stop working.
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
‘It erases the display once we select stop selecting the equals button.
Display.Caption = Empty
End Sub
Nous pouvons maintenant nous occuper du code.
Ce que nous demandons à Excel : Si l’écran affiche un message d’erreur,
efface-le, pour tout autre message, garde-le affiché. Traduisons maintenant ce
message en un code qu’Excel pourra lire.
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
‘It erases the display once we select stop selecting the equals button.
If Display.Caption = "Error" Then
Display.Caption = Empty
Else
Display.Caption = Display.Caption
End If
End Sub
C’est exactement ce que nous voulons. Essayez ! Tapez 3* puis égal. Le
message d’erreur s’affiche et s’efface lorsque vous cliquez sur autre chose.
Maintenant, écrivez à nouveau 7*7 puis égal. Vous devriez voir 49, tapez
alors +1. Ça fonctionne !
Seul le message d’erreur est effacé, les chiffres sont gardés. Bien que cela
fonctionne, nous avons inscrit un code inutile :
Display.Caption = Display.Caption
Effaçons le, ainsi que « Else » qui veut dire « Autrement ». Cela ne se
remarquera peut-être pas, mais c’est peu professionnel et consomme des
ressources à un petit niveau. N’ajoutez jamais de code inutile dans les
programmes que vous créez, pour votre bien et celui des utilisateurs de votre
programme. Avec de mauvaises habitudes de codage, vous aurez sûrement
des difficultés lorsque vous aurez besoin d’ajouter des pages et des pages de
code.
Après avoir supprimé le code qui n’était pas nécessaire, vous devriez vous
retrouver avec ceci :
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Display.Caption = "Error" Then
Display.Caption = Empty
End If
End Sub
Et cela fonctionne également !
Pour travailler comme un pro, n’oubliez jamais ces fondamentaux :
- Toujours ajouter des commentaires.
- Ne jamais insérer du code qui n’est pas nécessaire.
- Toujours choisir les bonnes variables.
Vous vous demandez sûrement pourquoi nous n’avons choisi aucune variable
pour le projet de la calculatrice. En réalité, nous l’avons fait même sans les
déclarer. Toutes nos variables ont été automatiquement déclarées variantes.
Nous avions besoin de ça car la calculatrice est supposée fonctionner avec
des milliards et des milliards de nombres. Un octet, Integer, Long… etc.
n’auraient pas fonctionné si l’utilisateur entrait un nombre plus grand que
ceux autorisés par ces derniers.
Rappelez vous que si vous ne déclarez pas les variables, elles sont
automatiquement déclarées variantes, autorisant n’importe quelle valeur de la
plus petite à la plus grande.
LE CODE COMPLET DE LA CALCULATRICE
Pour ce projet, le code complet devrait ressembler à ça :
Private Sub Cmd0_Click()
Display.Caption = Display.Caption + Cmd0.Caption
End Sub
Private Sub Cmd00_Click()
Display.Caption = Display.Caption + Cmd00.Caption
End Sub
Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub
Private Sub Cmd2_Click()
Display.Caption = Display.Caption + Cmd2.Caption
End Sub
Private Sub Cmd3_Click()
Display.Caption = Display.Caption + Cmd3.Caption
End Sub
Private Sub Cmd4_Click()
Display.Caption = Display.Caption + Cmd4.Caption
End Sub
Private Sub Cmd5_Click()
Display.Caption = Display.Caption + Cmd5.Caption
End Sub
Private Sub Cmd6_Click()
Display.Caption = Display.Caption + Cmd6.Caption
End Sub
Private Sub Cmd7_Click()
Display.Caption = Display.Caption + Cmd7.Caption
End Sub
Private Sub Cmd8_Click()
Display.Caption = Display.Caption + Cmd8.Caption
End Sub
Private Sub Cmd9_Click()
Display.Caption = Display.Caption + Cmd9.Caption
End Sub
Private Sub CmdAdd_Click()
Display.Caption = Display.Caption + CmdAdd.Caption
End Sub
Private Sub CmdCE_Click()
Display.Caption = Empty
End Sub
Private Sub CmdDel_Click()
If Display.Caption <> Empty Then
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)
End If
End Sub
Private Sub CmdDivision_Click()
Display.Caption = Display.Caption + CmdDivision.Caption
End Sub
Private Sub CmdDot_Click()
Display.Caption = Display.Caption + CmdDot.Caption
End Sub
Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Display.Caption = "Error" Then
Display.Caption = Empty
End If
End Sub
Private Sub CmdMinus_Click()
Display.Caption = Display.Caption + CmdMinus.Caption
End Sub
Private Sub CmdPercent_Click()
Display.Caption = Display.Caption + CmdPercent.Caption
End Sub
Private Sub CmdTimes_Click()
Display.Caption = Display.Caption + CmdTimes.Caption
End Sub
Private Sub UserForm_Terminate()
Application.Quit
End Sub
In ThisWorkbook the code should look like this:
Private Sub Workbook_Open()
Application.Visible = False
CalculatorProject.Show
End Sub
Essayez-le ! Il devrait fonctionner parfaitement.
AJOUTER UNE COMBINAISON CLAVIER AU BOUTON DE
COMMANDE
Nous pourrions ajouter autre chose. Avez-vous remarqué que la calculatrice
fonctionne uniquement si vous cliquez sur les boutons? Ne serait-il pas mieux
si nous pouvions utiliser le clavier?
Voyons comment procéder :
1. Ouvrez votre projet VBA
2. Maintenant, imaginons que nous souhaitons ajouter une combinaison
clavier à Cmd1, le bouton du chiffre 1. C’est très simple, cliquez
dessus
3. Allez dans ses propriétés
4. Dans l’Accélérateur, cliquez n’importe quel bouton. Ici le plus
approprié serait le chiffre 1, comme dans l’exemple ci dessous
5. Vous devriez ensuite voir le chiffre 1 souligné
6. Lorsque quelque chose est souligné, pas seulement dans Excel mais
dans tous les programmes Microsoft, cela veut dire que si vous
maintenez la touche Alt+ « La lettre ou le chiffre souligné », il le
lancera.
7. Essayez de lancer la calculatrice, appuyez sur Alt+1. Cela devrait
inscrire le chiffre 1.
8. Effectuez la même chose pour tous les chiffres et symbols, sauf DEL,
CE, 00 et égal.
Si vous essayez d’ajouter la combinaison clavier Retour à DEL ou Suppr à
CE, vous remarquez que ce n’est pas possible. Du moins, pas de cette façon.
ORDRE DES BOUTONS DE COMMANDE
Lorsque vous ouvrez la calculatrice, vous verrez qu’en inscrivant TAB il
sélectionnera les boutons, mais fort probablement de manière désorganisée.
Nous voulons leur donner un ordre. Pour se faire, suivez les étapes :
1. Ouvrez VBA et votre CalculatriceProjet
2. Cliquez sur l’onglet Afficher
3. Cliquez sur l’onglet Ordre
4. Réarrangez la liste selon l’ordre que vous désirez en utilisant les
boutons Haut et Bas
5. Cliquez OK lorsque vous avez terminé.
AJOUTER UN MOT DE PASSE À UN CODE VBA
Vous savez certainement qu’il est possible d’ajouter un mot de passe à
n’importe quel fichier Excel en procédant comme suit :
1. Onglet Fichier
2. Informations
3. Protéger classeur
4. Crypter avec un mot de passe
C’est une bonne option, toutefois il ne s’agit pas d’un mot de passe VBA.
Nous ne voulons pas entrer un mot de passe à chaque fois que nous ouvrons
la calculatrice. La seule chose que nous voulons c’est protéger notre code de
changements qui pourraient être effectués par des personnes non-autorisées.
Pour cela, la marche à suivre est la suivante :
1. Ouvrez VBA
2. Cliquez sur Outils
3. Cliquez sur les propriétés du projet
4. Onglet Protection
5. Ajoutez un verrou pour l’aperçu si vous le souhaitez
6. Cliquez OK
De cette façon, vous venez de protéger le code de votre calculatrice !
QUIZ 5
Qu’est ce qu’un Userform?
1. L’interface visuelle d’une application
2. Il s’agit de boutons de commandes, labels et cases
3. C’est une application pré-enregistrée que nous devons éditer pour un
usage personnel.
Comment créer un Userform?
1. Onglet Développeur, Insérer
2. Visual Basic, Insérer, Userform
3. Visual Basic, Module, Forme
Comment insérer des formules Excel dans VBA?
1. Application.Formules
2. Application.FormulaBarHeight
3. Application.WorksheetFunction
Quelle formule permet de rendre Excel invisible?
1. Application.Quit
2. Application.Visible=False
3. Application.Visible=True
Comment désactiver les Macros dans VBA lorsqu’ils sont activés?
1. Renommer le fichier, le déplacer ou dans l’onglet Développeur puis
Sécurité des Macros
2. Onglet Développeur, Sécurité des macros seulement
3. Il n’existe pas de moyen de les désactiver.
Comment mettre en place un mot de passe pour votre code VBA?
1. Visual Basic, Outils, Options, Sécurité, Mots de passe
2. Visual Basic, Outils, Propriétés du projet VBA, Protection, Mots de
passe
3. Visual Basic, Fichier, Enregistrer sous…, crypter le code VBA, Mot
de Passe
INTERAGIR AVEC D’AUTRES APPLICATIONS
Ouvrir d’autres applications depuis Excel
Microsoft Excel VBA est bien plus puissant que ce que nous venons de voir.
Il peut en effet aussi interagir avec d’autres applications telles que Word,
Access, Powerpoint… etc.
Nous jetterons simplement un coup d’oeil à l’interaction avec d’autres
applications depuis VBA.
Pour cet exercice, créez la forme suivante :
Ajoutez le code ci dessous :
Private Sub cmdAccess_Click()
Application.ActivateMicrosoftApp xlMicrosoftAccess
End Sub
Private Sub cmdOutlook_Click()
Application.ActivateMicrosoftApp xlMicrosoftMail
End Sub
Private Sub cmdPowerPoint_Click()
Application.ActivateMicrosoftApp xlMicrosoftPowerPoint
End Sub
Private Sub cmdWord_Click()
Application.ActivateMicrosoftApp xlMicrosoftWord
End Sub
Cela permet de lancer les applications lorsque vous cliquez sur chaque
bouton correspondant.
Imaginons que vous vouliez ouvrir une autre application, essayons avec le
bloc-notes.
Ajoutez ce code à un nouveau bouton :
Private Sub CommandButton1_Click()
Dim Task As Double
Task = Shell("notepad.exe", 1)
End Sub
Le bloc-note s’ouvre !
Essayons quelque chose d’un peu plus interactif :
Envoyer un e-mail Outlook depuis Excel
Ajoutez ce code à un bouton, module ou macro :
Dim OutlookApp As Object
Dim Email As Object
Dim Subject As String
Dim EmailAddress As String
Dim Msg As String
'Create Outlook Object
Set OutlookApp = CreateObject("Outlook.Application")
Subject = "This is my subject"
EmailAddress = "
[email protected]"
Msg = "This is the body message"
'Create email and send it:
Set Email = OutlookApp.CreateItem(0)
With Email
.to = EmailAddress
.Subject = Subject
.body = Msg
.display
End With
Comme vous pouvez le voir, ce code écrit pratiquement un courriel depuis
Excel. Naturellement, il est possible de substituer les valeurs des cases Excel,
ce qui serait bénéfique dans le cas ou vous auriez une base de données d’e-
mails et de messages. Toute ce que vous avez à faire est de réfléchir un
instant à comment effectuer ce dont vous avez besoin.
Dans le cas ou vous aimeriez voir toutes les applications que vous pouvez
ouvrir et faire interagir avec VBA, il vous suffit de cliquer sur Outils, puis
Références.
Vous voici avec la liste de toutes les applications avec lesquelles Excel peut
interagir, mais certaines d’entre elles sont désactivée. Il s’agit simplement
d’une protection. Si cela ne vous suffit pas vous pouvez toujours en Chercher
d’autres.
VBA est un bel outil ainsi qu’un des langages de programmation des plus
puissants utilisés dans le monde de l’Analyse. En apprenant VBA, vous
pourrez réalisez de magnifiques projets.
Vous venez d’apprendre les fondamentaux de VBA et avez même créé des
applications! Maintenant, à vous de jouer et d’utiliser ce savoir.
Expérimentez le code, créez de nouveaux projets, et faites-le bien !
RÉPONSES AUX QUIZ
Réponses chapitre 1
1. Comment accède-t-on à l’onglet développeur?
b. Clique droit sur le Ruban, Personnaliser le ruban, cocher la case
Développeur et valider
Réponses chapitre 2
1. Qu’est-ce qu’une macro?
b. Un raccourci clavier permettant de lancer un processus pré-enregistré
2. Comment créer une macro?
c. Cliquer sur le bouton Enregistreur de Macros
3. À quoi servent les références relatives?
a. À enregistrer une macro sans cellules pré-définies
4. Comment lancer une macro?
a. Cliquer sur le bouton Macros
5. Comment sauvegarder un classeur contenant des macros?
b. La notification devra être refusée pour ensuite enregistrer en tant que
classeur contenant et supportant des macros
Réponses chapitre 3
Qu’est ce qu’une variable?
2. Une valeur changeante.
Qu’est est la capacité de stockage d’un octet variable ainsi que sa
fourchette de valeurs?
3. Il stocke 1 octet et va de 0 à 256.
Quel est l’avantage de déclarer les variables?
1. On consomme moins de RAM, permettant une exécution plus fluide.
Est-ce obligatoire de déclarer les variables?
1. Seulement si Demander la déclaration des variables est activé.
MSGBOX retourne une valeur en fonction du bouton cliqué.
2. Il en retourne une valeur en fonction du bouton cliqué.
Réponses chapitre 4
Qu’est-ce qu’une procédure privée?
3. Il ne peut être appelé par une autre partie du code.
Qu’est-ce qu’une procédure publique?
1. Le code peut être appelé et exécuté depuis n’importe quel endroit du
classeur.
Réponses chapitre 5
Qu’est ce qu’un Userform?
1. L’interface visuelle d’une application
Comment créer un Userform?
2. Visual Basic, Insérer, Userform
Comment insérer des formules Excel dans VBA?
3. Application.WorksheetFunction
Quelle formule permet de rendre Excel invisible?
2. Application.Visible=False
Comment désactiver les Macros dans VBA lorsqu’ils sont activés?
1. Renommer le fichier, le déplacer ou dans l’onglet Développeur puis
Sécurité des Macros
Comment mettre en place un mot de passe pour votre code VBA?
2. Visual Basic, Outils, Propriétés du projet VBA, Protection, Mots de
passe