Tutorial Débutant VBA - Comment créer un programme sans connaissance en VBA
Dans ce tutorial nous allons voir comment créer simplement une petite application VBA en réalisant une calculatrice. Ce premier tutorial est volontairement très basic et s'adresse en particulier à ceux qui n'ont jamais utilisé le langage de programmation VBA.
1 - Construction de la feuille de calcul
Pour commencer, créez une nouvelle feuille de calcul (CTRL + N) et enregistrez là où le souhaitez, sous le nom « Calculatrice VBA - Excel Formation.xlsm »
L'enregistrement en « *.xlsm » permet d'enregistrer les macros directement dans le fichier.
Ensuite, créez votre calculatrice, en tenant compte de ce qui suit :
- Sur la première ligne nous afficherons le résultat
- Sur la seconde le calcul
- Nous laisserons la troisième ligne vide
- À partir de la quatrième ligne nous allons saisir le clavier
Vous devriez assez facilement parvenir au résultat suivant :
Si lors de la saisie des symboles [/,*,-,+,=] un message d'erreur appraît, échappez le avec un apostrophe, comme sur l'image.
2 - Mise en forme de la calculatrice
Ensuite, mettez en forme votre calculatrice comme bon vous semble.
Pour obtenir des touches de clavier carrées, sélectionnez les colonnes A à D, puis clique droit, largeur de colonne et dans la fenêtre qui s'affiche, saisissez 8.
Recommencez l'opération pour les lignes 4 à 8, mais cette fois-ci saisissez 48.
Pour l'exemple le clavier de la calculatrice reprend les caractéristiques de format suivantes :
- Taille de caractère : 36
- Police : Calibri
- Centrage horizontal et vertical
Les écrans de calculs sont fusionnés, alignés à droite et en taille 14.
Pour fusionner les écrans, selectionnez les cellules A1 à D1 et cliquez sur le bouton « Fusionner et centrer », puis cliquez sur le bouton « Aligner à droite »
Continuez de personnaliser votre calculatrice pour obtenir le résultat qui vous convienne.
3 - Un peu de code VBA
Avant d'attaquer le code, prenez le temps de nommer vos zones afin d'en rendre leur utilisation plus simples.
Nous allons avoir trois zones :
- Cellules A1 à D1 : ecran_resultat
- Cellules A2 à D2 : ecran_calcul
- Cellules A4 à D4 : clavier
Pour nommer une zone, selectionnez les cellules et saisissez son nom dans la zone de nommage en haut à gauche, juste avant la barre de formule
Et voilà, le travail préparatoire est maintenant terminé, nous allons pouvoir écrire quelques lignes de code.
Le code que nous allons voir est à insérer dans le code de la feuille afin d'utiliser directement les évennements provoquées par celle-ci. Pour afficher cette page de code, faites un clique gauche sur l'onget en bas à gauche de la fenêtre, puis « Visualiser le code »
Dans la fenêtre qui s'affiche saisissez le code suivant :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Ici nous allons lancer notre programme
msgbox "Hello, vous avez cliqué sur une cellule"
End sub
Ce que nous venons de taper indique à Excel d'afficher le message « Hello, vous avez cliqué sur une cellule » à chaque fois que vous cliquerez quelque part.
La première ligne permet de capter l'évenement « La cellule selectionnée a changé », ce qui veux dire que chaque fois que nous cliquerons sur une nouvelle cellule, Excel lancera la procédure comprise entre cette ligne et la fin de la procédure (ligne 4 : « End sub »). En prime Excel renvoie la ou les cellules concernées, en les stockant dans une variable de type Range (ensemble de cellules) et ayant pour nom « Target », cette information nous servira par la suite.
La deuxième ligne correspond à un commentaire VBA. Excel n'executera pas cette ligne, qui permet juste au developpeur de documenter son application afin de mieux s'y retrouver.
Enfin, la troisième ligne lance l'instruction VBA qui permet d'afficher un message. Entre les guillements, le paramètre permet de définir le texte de ce message.
Revenez sur votre feuille de calcul et cliquez n'importe où. Si tout se passe bien, vous verrez alors que le message s'affichera.
Maintenant, plutôt que d'afficher un message, nous allons dire à Excel « Affiche la valeur de la cellule selectionnée dans la cellule de calcul »
Pour ce faire remplacez la ligne contenant l'instruction msgbox par ce qui suit :
[ecran_calcul].Value = [ecran_calcul].Value & Target.Value
Souvenez-vous, juste avant nous avions nommé les plages de cellules. La cellule « ecran_calcul » correspond à la cellule A2, nous aurions ainsi très bien pu saisir Range("A2"), mais utiliser les noms rend le code bien plus clair, et surtout si la cellule venait à changer de coordonnées (par exemple si nous ajoutions une ligne au dessus), le lien ne serait pas rompu entre la feuille de calcul et le code VBA.
Dans cette instruction, nous ajoutons simplement la valeur de la cellule selectionnée à la fin de l'écran de calcul.
Cette instruction est executée à chaque fois que nous cliquons sur une nouvelle cellule. Nous allons maintenant vouloir nous limiter au clavier de la calculatrice. Pour ce faire, remplacez l'instruction par celle-ci :
If Not Application.Intersect(Target, [clavier]) Is Nothing Then
[ecran_calcul].Value = [ecran_calcul].Value & Target.Value
End If
Pour contrôler que la cellule selectionnée se situe sur le clavier, nous utilisons l'instruction Application.Intersect qui renvoie les cellules contenue dans les plages données en argument. Lorsqu'il n'y a aucune cellule existante à l'intersection des deux plages, l'instruction renvoie comme résultat « Nothing ». L'utilisation du « Not » juste avant Application.Intersect permet de valider que le résultat renvoyé n'est pas « Nothing », et donc qu'il existe bien une intersection entre le clavier de la calculatrice et la cellule selectionnée.
« If … Then » est une condition, ce qui signifie que si l'élément testé après le « If » est vrai, alors on peut executer le code situé entre le « Then » et le « End If »
Vous pouvez desormais tester la calculatrice, l'écran ne se changera que lorsque vous cliquerez sur le clavier.
Enfin, pour effectuer les calculs, remplacez l'ensemble de votre code par les lignes suivantes :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Si la cellule selectionnée est sur le clavier
If Not Application.Intersect(Target, [clavier]) Is Nothing Then
' Nous voulons le résultat
If Target.Value = "=" Then
[ecran_resultat].FormulaR1C1 = "=" & [ecran_calcul].Value
[ecran_resultat].Value = [ecran_resultat].Value
[ecran_calcul].Value = [ecran_resultat].Value
' Ou nous voulons réinitialiser les calculs
ElseIf Target.Value = "C" Then
[ecran_calcul].Value = ""
[ecran_resultat].Value = ""
' On nous voulons saisir des informations
Else
[ecran_calcul].Value = [ecran_calcul].Value & Target.Value
End If
' On remet le focus hors du clavier
[ecran_resultat].Select
End If
End Sub
Les commentaires sur le code parlent d'eux-mêmes : lorsque que nous cliquons sur le clavier (ligne 4) :
- on regarde si la cellule selectionnée est le « = », et dans ce cas on effectue le calcul (nous verrons si dessous le détail),
- sinon on regarde si la cellule selectionnée est le « C », dans ce cas on efface le calcul en insérant un vide dans l'ecran_calcul et dans l'ecran_resultat.
- sinon lance l'instruction que nous avons vue juste au dessus pour alimenter l'ecran_calcul
Enfin, on selectionne une cellule hors du clavier. En effet, vous aviez peut-être remarqué un petit bug dans notre programme : lorsque nous voulions saisir deux fois le même chiffre (par exemple « 11 »), seul le premier était inséré dans l'ecran_calcul. Cela vient du fait que nous changions pas de cellule. En selectionnant une cellule hors du clavier après chaque clique sur ce dernier nous cliquerons desormais sur : « 1 », puis « ecran_calcul », puis à nouveau « 1 » et le calcul s'alimente correctement.
Pour effectuer notre calcul, lorsque l'on touche la cellule « = », nous procédons en trois étapes :
- On affiche la formule dans l'ecran_resultat, en ajoutant simplement un « = » devant grace à l'utilisation de « & » qui permet de former une chaînes de caractères à partir de deux autres chaînes (l' « = » et la valeur de l'ecran_calcul)
- Lorsque le calcul est réalisé, on le remplace par la valeur de ce calcul, toujours dans ecran_resultat
- On affiche également la valeur du calcul dans ecran_calcul, afin de pourvoir réutiliser ce résultat dans un nouveau calcul
Et voilà, notre première application VBA est desormais terminée. Vous avez ainsi pu vous rendre compte qu'en seulement quelques lignes de codes simplistes, il est possible de réaliser une application qui tient la route et qui est parfaitement fonctionnelle.
Dans un prochain tuto, nous tâcherons de l'améliorer en ajoutant quelques fonctionnalités utiles.