Vous êtes sur la page 1sur 16

2019

Visual Basic pour Application


VBA dans Excel

François BANCQUART
By ABF
01/02/2019
SOMMAIRE
I/ Généralités ___________________________________________________________________ 2
II/ L’environnement VISUAL BASIC EDITOR ( VBE ) _____________________________________ 3
III/ Enregistrement automatique d’une macro ________________________________________ 3
Exécuter une macro en appuyant sur une touche de raccourci utilisant la touche Ctrl _____________ 7
Exécuter une macro en cliquant sur un bouton de la barre d’outils Accès rapide _________________ 8
Afficher puis exécuter une macro en cliquant sur un bouton de la barre d’outils Accès rapide ______ 9
IV/ Utilisation de l’aide __________________________________________________________ 10
V/ Rajout d’une condition ________________________________________________________ 11
VI /Macro évènementielle _______________________________________________________ 12
VII/ Mise au point des macros ____________________________________________________ 13

By ABF | I/ Généralités 1
I/ Généralités

Le langage macro d’Excel a considérablement évolué dans le temps. Dans un premier temps, il
s’agissait d’un langage de programmation propre au tableur, qui s’appelait Excel Basic, et ceci
jusqu’à Excel 4.
Depuis la version 5, le langage est une déclinaison de Visual Basic, qui s’appuie sur le noyau
Excel. Depuis Office 2000, il est maintenant commun à toutes les applications d’Office : Excel,
Word, Access, Powerpoint, Frontpage …
Autre particularité : son environnement, véritablement professionnel. Jusqu’à Excel 4, les macros
s’affichaient dans des feuilles Excel intitulées Module. Depuis Excel 5, les macros sont
développées dans un environnement dédié, qui s’appelle Visual Basic Editor.

Différents moyens pour y accéder :


✓ Via le menu : Outils - Macro - Visual Basic Editor
✓ Par un raccourci : appuyez sur Alt et F11
Nous pouvons générer des macros de 2 manières :
✓ en enregistrant les actions que nous tapons au clavier ou via la souris,
✓ en écrivant directement le code dans l’environnement dédié.

Les macros usuelles s’écrivent et se créent dans ce que l’on appelle un Module.

Classeur Excel + Environnement Macro = PROJET EXCEL

By ABF | I/ Généralités 2
II/ L’environnement VISUAL BASIC EDITOR ( VBE )

À partir d’un classeur vierge, appuyez sur Alt F11 pour intégrer l’environnement macros. Vous
obtenez alors l’écran suivant :

Cet écran se décompose en 3 fenêtres :

✓ VBA Project : cette fenêtre décrit le contenu des classeurs ouverts et des macros
complémentaires (suffixe xla)
✓ Propriétés : cette fenêtre affiche les propriétés de l’objet sélectionné dans la fenêtre
VBA Project. Ici, les propriétés de Feuil1. On peut ainsi cacher à ce niveau une ou
plusieurs feuilles, en cliquant dans la propriété Visible.
✓ Une fenêtre vide à droite, qui contiendra le code Visual Basic de votre macro.

Ici, nous constatons dans la fenêtre VBA Project que notre classeur intitulé
Intoduction_VBA_I.xlsm se compose de 3 feuilles de calcul. La zone intitulée ThisWorkbook est
une feuille virtuelle dans laquelle nous positionnerons des macros particulières, nommées macros
évènementielles, qui s’exécuteront quelle que soit la feuille active, car nous verrons plus loin que
nous avons la possibilité de dédier des macros spécifiquement à une feuille, et faire en sorte
qu’elles s’exécutent à des moments bien précis : lorsque je sélectionne la feuille par son onglet,
quand je change de cellule, lorsque je change le contenu d’une cellule. C’est ce que l’on appelle un
évènement.

III/ Enregistrement automatique d’une macro


Afin d’appréhender de la manière la plus conviviale qui soit le monde macros, nous allons utiliser
la possibilité qu’offre Excel d’enregistrer une action et de générer ainsi automatiquement une
macro en VBA.
By ABF | II/ L’environnement VISUAL BASIC EDITOR ( VBE ) 3
Pour cela, revenez sur la feuille Excel, via Alt F11 par exemple, ou en cliquant sur la barre de
travail, saisissez 100 en cellule A1 puis positionnez-vous en C1. Nous allons nous enregistrer en
train de copier le contenu de la cellule A1 en A5. Nous allons dans un premier temps utiliser le
menu, via Développeur - Enregistrer une macro.

Pour activer le développeur, cliquez sur Fichier – Options – Personnaliser le ruban – Activez
l’onglet Développeur

Une fois l’onglet Développeur activé, cliquez sur le menu Développeur – Enregistrer une macro.
Excel ouvre alors une boîte de dialogue, comme suit :

By ABF | III/ Enregistrement automatique d’une macro 4


dans laquelle il nous propose un nom de macro (par défaut Macro et un n° d’ordre), d’affecter un
raccourci pour lancer ensuite la macro (attention, le raccourci prendra le pas sur les raccourcis par
défaut d’Excel), et de décrire brièvement la macro, description sur laquelle on peut revenir par la
suite.

Excel nous propose enfin d’enregistrer par défaut cette macro dans le classeur actif, mais aussi dans
un autre classeur, et enfin dans un classeur de macros personnelles. Cette dernière possibilité,
maintenant dépassée (cf. suite du cours), permet de rendre une macro commune à tous les
classeurs, en générant en fait un classeur, intitulé PERSO.xlsx, qui s’ouvrira alors automatiquement
dès que nous irons sur Excel.

Nous allons valider telle quelle ces options en cliquant sur OK. Dorénavant, toutes nos
manipulations vont être enregistrées, bonnes comme mauvaises !! Rassurez-vous, nous aurons la
possibilité d’effectuer par la suite toutes les corrections éventuelles.

Effectuez les manipulations suivantes :

✓ Allez en A1
✓ Copiez
✓ Allez en A5
✓ Collez
✓ Esc pour vider le presse-papier
✓ Revenez en C1

Pour stopper le mode enregistrement, cliquez sur arrêter l’enregistrement.

Vous noterez dans la fenêtre VBA project qu’Excel vous a généré un répertoire Modules, ouvrez-le
et positionnez-vous sur Module1.

Excel vous affiche en plus par rapport à la fois précédente le code VBA dans une fenêtre à droite
des 2 fenêtres VBA Project et Propriétés.

By ABF | III/ Enregistrement automatique d’une macro 5


Vous noterez qu’une macro débute par Sub et se termine par End Sub.

Les expressions sont séparées par des points, et la particularité de VBA, comme tout langage objet,
est de se lire de gauche à droite.

L’enregistreur a généré 6 lignes en VBA.

1ère ligne : sélectionner le champ A1


2° ligne : copier la sélection
3ème ligne : aller en A5
4ème ligne : coller sur la feuille active
5ème ligne : Esc (ça ne s’invente pas !)
6ème ligne : revenir en C1

Il est quelque peu verbeux et nous allons voir que nous pouvons réduire considérablement le code.
Ainsi, lorsqu’une instruction se termine par Select et que la suivante débute par Selection, nous
pouvons résumer les deux instructions en une seule, en éliminant Select et Selection.

De cette manière, les 2 premières lignes se résume en : Range(« A1 »).copy

De même, nous n’avons pas à nous positionner au préalable ni sur A1, ni ensuite sur A5 pour
effectuer notre copier-coller. Positionnez-vous à la fin de votre 1ère instruction, et tapez un espace.
Excel vous propose de taper directement la destination, soit A5.

La 1ère ligne s’écrit ainsi

Toutes les autres lignes sont désormais inutiles, et votre macro se résume ainsi en une seule ligne.

Cette ligne peut même s’écrire de la manière suivante :

Qui a dit que VBA n’était pas concis ?

Pour exécuter cette macro, plusieurs possibilités vous sont offertes :

Exécuter une macro

1. Si l’onglet Développeur n’est pas disponible, affichez-le de la manière suivante :


a. Cliquez sur l’onglet Fichier, sur Options, puis sur la catégorie Personnaliser le
Ruban.
b. Dans la liste Onglets principaux, activez la case à cocher Développeur, puis
cliquez sur OK.
By ABF | III/ Enregistrement automatique d’une macro 6
2. Pour définir temporairement le niveau de sécurité de manière à activer toutes les macros :
a. Sous l’onglet Développeur du groupe Code, cliquez sur Sécurité des macros.

b. Dans la catégorie Paramètres des macros, sous Paramètres des macros, cliquez
sur Activer toutes les macros (non recommandé ; risque d’exécution de code
potentiellement dangereux), puis cliquez sur OK.

Remarque : Pour empêcher du code potentiellement dangereux de s’exécuter, il est


recommandé de revenir aux paramètres qui désactivent toutes les macros une fois
que vous avez fini d’utiliser des macros.

3. Ouvrez le classeur contenant les macros.


4. Sous l’onglet Développeur, dans le groupe Code, cliquez sur Sécurité des macros.

5. Dans la zone Nom de la macro, cliquez sur la macro à exécuter.


6. Effectuez l’une des actions suivantes :
a. Pour exécuter une macro dans un classeur Excel, cliquez sur Exécuter.

Conseil : Vous pouvez également appuyer sur les touches Ctrl+F8 pour exécuter la
macro. Vous pouvez interrompre l’exécution de la macro en appuyant sur Échap.

b. Pour exécuter une macro dans un module touche de raccourci signature numérique
emplacement approuvé VBA (Visual Basic pour Applications), cliquez sur
Modifier, puis, dans le menu Exécution, cliquez sur Exécuter Sub/UserForm
ou appuyez sur la touche F5.

Exécuter une macro en appuyant sur une touche de raccourci utilisant la touche Ctrl

1. Si l’onglet Développeur n’est pas disponible, affichez-le de la manière suivante :


a. Cliquez sur l’onglet Fichier, sur Options, puis sur la catégorie Personnaliser le
Ruban.
b. Dans la liste Onglets principaux, activez la case à cocher Développeur, puis
cliquez sur OK.
2. Sous l’onglet Développeur, dans le groupe Code, cliquez sur Sécurité des macros.

By ABF | III/ Enregistrement automatique d’une macro 7


3. Dans la zone Nom de la macro, cliquez sur la macro à affecter à une touche de raccourci
utilisant la touche Ctrl.
4. Cliquez sur Options.

La boîte de dialogue Options de macro s’affiche.

5. Dans la zone Touche de raccourci, entrez les lettres minuscules ou majuscules que vous
souhaitez utiliser avec la touche Ctrl.

Remarque : La touche de raccourci remplace une touche de raccourci Excel par défaut
lorsque le classeur contenant la macro est ouvert.

Pour obtenir une liste des touches de raccourci utilisant la touche Ctrl qui sont déjà
affectées dans Excel, voir l’article Touches de raccourci et de fonction dans Excel.

6. Dans la zone Description, tapez une description de la macro.


7. Cliquez sur OK pour enregistrer vos modifications, puis cliquez sur Annuler pour fermer
la boîte de dialogue Macro.

Exécuter une macro en cliquant sur un bouton de la barre d’outils Accès rapide

Pour ajouter un bouton à la barre d’outils Accès rapide qui exécutera une macro, procédez comme
suit :

1. Cliquez sur l’onglet Fichier, sur Options, puis sur Barre d’outils Accès rapide.
2. Dans la liste Choisir les commandes dans les catégories suivantes, sélectionnez Macros.
3. Dans la liste, cliquez sur la macro que vous avez créée, puis sur Ajouter.
4. Pour modifier l’image du bouton de la macro, sélectionnez la macro dans la zone à laquelle
elle a été ajoutée, puis cliquez sur Modifier.
5. Sous Symbole, cliquez sur l’image du bouton que vous souhaitez utiliser.
6. Pour modifier le nom de la macro qui s’affiche lorsque vous positionnez le pointeur sur le
bouton, dans la zone Nom complet, tapez le nom que vous souhaitez utiliser.
7. Cliquez sur OK pour ajouter le bouton de macro dans la barre d’outils Accès rapide.
8. Dans la barre d’outils Accès rapide, cliquez sur le bouton de macro que vous venez
d’ajouter.

By ABF | III/ Enregistrement automatique d’une macro 8


Afficher puis exécuter une macro en cliquant sur un bouton de la barre d’outils Accès rapide

1. Cliquez sur l’onglet Fichier, sur Options, puis sur Barre d’outils Accès rapide.
2. Dans la liste Choisir les commandes dans les catégories suivantes, sélectionnez Toutes les
commandes.
3. Dans la liste, cliquez sur la macro que vous avez créée, puis sur Afficher les macros.
4. Une fois l’icône Afficher les macros présente dans la barre d’outils accès rapide, cliquez
sur Afficher les macros puis sur exécuter.

By ABF | III/ Enregistrement automatique d’une macro 9


IV/ Utilisation de l’aide

Une des meilleures façons d’apprendre le langage macro consiste à naviguer dans l’aide. Double-
cliquez sur l’instruction Copy et cliquez sur F1. Excel ouvre l’aide, affiche la page concernée par
l’instruction sélectionnée, vous affiche la syntaxe, et vous propose d’afficher des exemples ou de
naviguer par des lignes hypertextes.

Remarque : cochez dans rechercher – référence du développeur

Nous pouvons utiliser également l’aide en cliquant sur le bouton Explorateur d’objets.

Vous pouvez alors préciser la bibliothèque dans laquelle vous souhaitez circonscrire votre
recherche, et préciser l’expression.

By ABF | IV/ Utilisation de l’aide 10


V/ Rajout d’une condition

Nous allons maintenant compliquer notre macro en précisant que nous ne ferons un copier-coller de
A1 en A5 que si la valeur de A1 est supérieure à 1000, sinon nous effaçons le contenu de A5.

Nous utiliserons l’instruction If… Then… Else…

Cette instruction peut s’écrire sur une seule ligne à condition qu’il n’y ait qu’une seule instruction
après le Then et qu’une seule après le Else, sinon retour à la ligne après le Then ainsi qu’après le
Else. L’instruction If s’achèvera alors par End If.

D’aucuns, dans un souci de clarté, choisiront systématiquement cette dernière solution. Pour suivre
les préconisations de la programmation structurée, nous décalerons les instructions figurant à
l’intérieur du If.
Votre macro devient dès lors :

Vous remarquerez qu’Excel conserve le décalage lors de la saisie

Nous pouvons également lancer une macro depuis un bouton que nous créerons dans la feuille de
travail. Il nous faut ouvrir la barre d’outils Insérer contrôle de formulaire via le menu
Développeur, cliquez sur l’icône Bouton, et dessinez-le sur la feuille.

1001

1001

By ABF | V/ Rajout d’une condition 11


S’ouvre alors une boîte qui propose d’affecter automatiquement une macro. Choisissez Macro1,
puis validez, cliquez hors du bouton puis revenez sur le bouton.

La macro s’exécute alors. Vérifiez son bon fonctionnement en saisissant 2000 en A1.

VI /Macro évènementielle

Ne serait-il pas intéressant de pouvoir exécuter cette macro uniquement du fait de saisir un chiffre
en A1, et non plus en cliquant sur le bouton précédemment créé ? Une fonctionnalité nous le
permet : il s’agit des macros évènementielles.

Revenez dans l’environnement VBA, double-cliquez dans Feuil1 dans la fenêtre VBA Project.
Vous ouvrez ainsi la fenêtre de code propre à cette feuille de travail, fenêtre vide pour le moment.
Tapez le code suivant :

puis Entrée

Vous venez de créer une macro qui va s’exécuter lorsque nous cliquerons sur l’onglet de la feuille,
c'est-à-dire lorsque nous activerons la feuille. Il s’agit de l’évènement ACTIVATE.

Vous noterez que le haut de la fenêtre de code intègre 2 combo boxes, et que celle de droite intègre
maintenant tous les évènements liés à l’objet WORKSHEET. Ouvrez-la.

By ABF | VI /Macro évènementielle 12


Il suffit maintenant de sélectionner un évènement pour générer l’entête et la fin de la macro. Pour
notre part, nous allons sélectionner le fait qu’après avoir saisi un nombre en A1, nous validons par
Entrée et qu’ainsi nous changeons de cellule, soit l’évènement SelectionChange.

Vous constaterez que la syntaxe n’est pas forcément intuitive.

Pour éviter de retaper le code contenu dans la Macro1, nous allons appeler cette Macro1. Notre
macro évènementielle devient alors :

Testez-la et admirez !

À noter que telle quelle, cette macro va s’exécuter à chaque changement de cellule.

VII/ Mise au point des macros

Nous avons développé ici une macro relativement courte, dont la mise au point ne pose pas de
problème particulier. Il peut néanmoins être intéressant, dans le cas d’une macro beaucoup plus
longue, de conserver la maîtrise de l’exécution de la macro, autrement dit faire en sorte que les
différentes instructions s’exécutent sur ordre ou à l’initiative du développeur. C’est ce que nous
permet de faire le mode pas à pas, ainsi que le point d’arrêt.

By ABF | VII/ Mise au point des macros 13


Retournez dans l’environnement macro, dans le module1, positionnez le curseur à l’intérieur de
Macro1, et appuyez sur la touche F5. Vous venez d’exécuter cette macro. On aurait pu arriver au
même résultat via le menu Macro - Exécuter.

Pour conserver la maîtrise du déroulement, appuyez sur la touche F8, en ayant toujours le curseur à
l’intérieur de Macro1. La 1ère ligne est alors surlignée de jaune, avec un repère dans la marge.
Appuyez sur F8 et constatez ce qui se passe, ceci jusqu’à la fin de la macro.

Vous pouvez ainsi suivre visuellement le bon fonctionnement de votre macro, en particulier au
niveau de la condition If. Nous aurions pu procéder de même par le menu Débogage - Pas à pas
détaillé.
Il est possible d’attraper la flèche jaune dans la marge et de la remonter à l’instruction de votre
choix, après avoir modifié interactivement du code ou une valeur dans votre feuille de travail.

On a également la possibilité d’exécuter automatiquement la macro jusqu’au curseur, puis de


prendre la main ensuite, en positionnant bien évidemment votre curseur à l’instruction souhaitée,
puis en faisant Ctrl F8.

Une dernière possibilité consiste à déposer un point d’arrêt : la macro s’exécutera


automatiquement jusqu’à ce point, puis vous prendrez la main. Pour ce faire, cliquez dans la marge
face à l’instruction désirée. Utilisez le menu Débogage – Basculer le point d’arrêt. Un repère
visuel s’inscrit alors. Pour l’effacer, cliquez de nouveau dans le menu Débogage – Effacer tous les
points d’arrêts. Cette technique est très pratique dans le cadre d’une mise au point d’une macro un
peu longue, sur laquelle il n’y a pas de problème particulier sur toute une portion du code.

By ABF | VII/ Mise au point des macros 14


By ABF | VII/ Mise au point des macros 15

Vous aimerez peut-être aussi