You are on page 1of 46

AGROPARISTECH

PROGRAMMATION EN VBA(*) POUR EXCEL


U.F.R. DINFORMATIQUE
Christine MARTIN
Anne 2012-2013

Document inspir du cours de Juliette Dibie-Barthelemy (Janvier 2008) * Visual Basic pour Applications

Introduction

Le VBA (Visual Basic pour Application) est un langage de programmation permettant dutiliser du code dont la syntaxe est proche du langage Visual Basic pour excuter les nombreuses fonctionnalits notamment des applications Microsoft Office et par exemple de lApplication EXCEL que vous tes amens utiliser frquemment dans votre spcialit.

Crer des programmes en VBA permet notamment dautomatiser des tches rptitives ralises sous EXCEL grce la possibilit de manipuler les objets propres Excel (Classeurs, feuilles, cellules, ), de stocker de linformation, deffectuer des instructions sous conditions et, ventuellement, plusieurs reprises en fonction dun ou plusieurs critres. Le langage VBA permet galement de contrler la quasi-totalit de l'IHM1 notamment dExcel, ce qui inclut la possibilit de manipuler les fonctionnalits de l'interface utilisateur comme les menus, les barres d'outils et le fait de pouvoir personnaliser les botes de dialogue et les formulaires utilisateurs. Cela permet notamment de rendre une application dveloppe sous EXCEL plus conviviale. Il permet enfin de contrler une application partir d'une autre (par exemple, crer automatiquement un document WORD partir de donnes sous EXCEL).

Ce document organis en sections constitue une synthse des possibilits offertes par la programmation en VBA sous Excel.

Interface Homme-Machine : c'est--dire tous les mdias qui permettent un utilisateur dinteragir avec la machine

Excel VBA AgroParisTech Christine Martin

Page 1

Table des matires


1 Prise en main de lenvironnement de dveloppement ............................................................ 5 1.1
1.1.1 1.1.2 1.1.3

Premire macros utilisation de lenregistreur de macros ............................................ 5


Enregistrer une macro ..................................................................................................................... 5 Excuter une macro ........................................................................................................................ 7 Supprimer une macro ...................................................................................................................... 8

1.2
1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7

Lenvironnement de dveloppement Visual Basic Editor ................................................ 8


Accs lenvironnement Visual Basic Editor (VBE) ......................................................................... 8 Fentre de lecture, criture et modification dun programme ....................................................... 9 Affichage et modification des proprits dun module de code ................................................... 11 Sauvegarde .................................................................................................................................... 12 Retrouver un programme enregistr : lexplorateur de projets ................................................... 12 Excuter directement dans VBE une procdure sans argument ................................................... 13 Fermeture de lenvironnement VBE.............................................................................................. 14

Accs aux fonctionnalits dExcel depuis VBA ...................................................................... 14 2.1 2.2 2.3 2.4 2.5
2.5.1

Les objets ................................................................................................................... 14 Les collections ............................................................................................................ 14 Laccs aux objets ....................................................................................................... 14 Les proprits des objets ............................................................................................ 15 Les mthodes des objets............................................................................................. 16
Utiliser les fonctions intgres dExcel .......................................................................................... 16

2.6 2.7
2.7.1 2.7.2

Les vnements ......................................................................................................... 16 Lexplorateur dobjets ................................................................................................ 17


Ouverture de lexplorateur dobjets ............................................................................................. 17 Utilisation de lexplorateur dobjets .............................................................................................. 17

2.8 3

Comment obtenir de laide : quelques astuces ............................................................ 19

Vers la programmation avance ......................................................................................... 20

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 2

3.1 3.2
3.2.1 3.2.2 3.2.3

Stocker de linformation : les variables et les constantes ............................................. 20 Dfinir ses propres fonctions ...................................................................................... 23
Dfinition ....................................................................................................................................... 23 Utilisation sous Excel ..................................................................................................................... 24 Utilisation dans un programme VBA ............................................................................................. 25

3.3 3.4 3.5

Prendre en compte des conditions .............................................................................. 25 Rpter les mmes actions ......................................................................................... 26 Rgles de bonne conduite en programmation ............................................................. 28 .................................................................................................. 30 ............................................................................. 32

Tutoriel : Les vnements

Tutoriel : Les entres et sorties standards Tutoriel : Les Objets UserForm

........................................................................................... 37

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 3

Table des figures


Figure 1 : Fentre de paramtrage et lancement de l'enregistrement d'une macro ............................. 5 Figure 2 : Fentre d'arrt de l'enregistrement d'une macro (Excel 2003) .............................................. 6 Figure 3 : Fentre d'excution d'une macro ........................................................................................... 7 Figure 4 : Barre d'Outils Visual Basic (licne entoure permet de lancer VBE) ..................................... 8 Figure 5 : Fentre principale de Visual Basic Editor (VBE) ...................................................................... 9 Figure 6 : Fentre d'affichage d'un module de code............................................................................... 9 Figure 7 : Rsultat de l'excution de la macro Macro1 ......................................................................... 10 Figure 8 : Fentre de proprit d'un module de code .......................................................................... 12 Figure 9 : Fentre "Explorateur de projets" dans VBE .......................................................................... 12 Figure 10 : Fentre ouverte par clic droit sur l'explorateur de projets dans VBE ................................. 13 Figure 11 : Fentre de l'explorateur d'objets ........................................................................................ 17 Figure 12 : Rsultat de la recherche de fonctions intgres d'Excel..................................................... 19 Figure 13 : Fentre d'erreur de compilation ......................................................................................... 21

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 4

1 Prise en main de lenvironnement de dveloppement


1.1 Premires macros utilisation de lenregistreur de macros
Un programme crit en VBA est souvent appel, par abus de langage, une macro. Dans un premier temps, une macro peut tre cre en utilisant l'enregistreur de macros, qui ne ncessite aucune connaissance du langage VBA. Lenregistreur de macro est un outil accessible notamment sous Excel et permettant dcrire du code VBA partir doprations effectues manuellement dans lapplication. A limage dune camra, toute la squence d'actions effectues entre le dbut et la fin de l'enregistrement est traduite en instructions VBA et stocke dans une procdure VBA sans arguments, qui pourra tre excute nouveau l'identique. Une procdure est un ensemble dinstructions VBA identifis par un nom et ne renvoyant pas de valeur. L'enregistreur de macro sous Excel (Outils / Macro / Nouvelle Macro) permet donc de gnrer facilement du code VBA et de dcouvrir les mots cls et syntaxes employer pour crire ensuite directement ses propres programmes. 1.1.1 Enregistrer une macro

1) Paramtrage de la macro
Activer la commande Outils Macro Nouvelle macro.

Figure 1 : Fentre de paramtrage et lancement de l'enregistrement d'une macro

La fentre prsente en

Figure 1 apparat lcran et vous permet de paramtrer la macro qui va tre cre c'est--dire : de prciser son nom dans le champ : Nom de la macro, de prciser quel classeur elle sera rattache par lintermdiaire du menu droulant Enregistrer la macro dans, dy associer si besoin un raccourci clavier afin de faciliter son lancement futur : Touche de raccourci
Excel VBA DA GIA AgroParisTech Christine MARTIN Page 5

et enfin dy associer une note explicative Description.

Le menu droulant Enregistrer la macro dans vous propose trois options : Ce classeur, Nouveau classeur, Classeur de macros personnelles.

En slectionnant, l'option Classeur de macros personnelles, la macro est enregistre dans un classeur spcial appel PERSO.XLS. Ce classeur est ouvert automatiquement lors du lancement dEXCEL et ses macros sont disponibles dans tous les classeurs ouverts. La commande FENETRE AFFICHER permet dafficher ce classeur et la commande FENETRE MASQUER de le masquer. Loption Nouveau classeur permet denregistrer la macro dans un nouveau classeur. Enfin, loption Ce classeur permet denregistrer la macro dans le classeur actif.

2) Lancement de lenregistrement
Une fois votre macro paramtre suivant vos besoins, Cliquer sur le bouton OK. Lenregistrement est alors lanc et partir de l tout les actions que vous fates dans Excel sont enregistres, traduites en code VBA puis sauvegardes dans une procdure portant le nom que vous avez spcifi ltape prcdente. Par exemple Macro1 comme indiqu dans la Figure 1. La barre d'outils ARRET DE L'ENREGISTREMENT apparat, ce qui marque le dbut de l'enregistrement.

Figure 2 : Fentre d'arrt de l'enregistrement d'une macro (Excel 2003)

Cette fentre permet galement de dterminer le mode suivant lequel les cellules seront considres dans le programme final. Il existe en effet deux moyens de voir les choses : Soit on a une vision absolue : par exemple on considre la cellule A1 qui a une position dtermine dans une page de calcul Excel Soit on a une vision relative : on veut par exemple quune action soit faite toujours 2 cellules en dessous de celle slectionne ce moment l.

Le bouton de droite de la fentre darrt de lenregistrement (Figure 2) permet de faire un choix entre ces deux modes. Ce choix dpend bien entendu des proprits attendues de la macro que lon est en train denregistrer.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 6

Attention : Vrifier toujours le mode dans lequel vous vous trouvez au lancement de lenregistrement et avant deffectuer la moindre action sans quoi votre macro pourrait avoir un comportement diffrent de celui que vous attendiez car non enregistre dans le mode adquate. Par ailleurs, les cellules dans une macro sont identifies laide dune lettre (colonne) suivie dun chiffre (ligne), comme par exemple la cellule A1. Aussi et afin de faciliter la lecture du code VBA gnr, il est prfrable de choisir la mme identification des cellules dans le classeur dans lequel est enregistr la macro. Si tel nest pas le cas, activer la commande OUTILS OPTIONS, cliquer sur l'onglet GENERAL et dcocher la case STYLE DE REFERENCE L1C1.

3) Arrt de l'enregistrement
Une fois que vous avez ralis toutes les actions que vous souhaitiez enregistrer pour les rejouer ultrieurement, larrt de lenregistrement se fait en cliquant sur le carr bleu de la barre d'outils ARRET DE L'ENREGISTREMENT (Figure 2). Attention : noubliez pas darrter lenregistrement dune macro ! Dans le cas contraire vos actions continueraient tre enregistres et vous ne seriez pas en mesure de relancer cette macro. Lenregistreur de macro permet de manire rapide et simple de crer des macros. Cependant une macro ainsi cre ne sexcutera que sur un ensemble de cellules donnes et possdera des fonctionnalits limites. Pour pouvoir crer des macros propres ses besoins, efficaces et interactives, la connaissance du langage VBA est ncessaire et il sera prsent dans les sections suivantes. 1.1.2 Excuter une macro Pour excuter une macro dj enregistre, donc connue du systme, il faut : 1) Activer la commande OUTILS MACRO/MACROS. La fentre prsente en Figure 3 souvre.

Figure 3 : Fentre d'excution d'une macro

2) Slectionner dans la liste la macro dsire et cliquer sur le bouton EXECUTER. Dans lexemple prsent en Figure 3, seule la macro nomme Macro1 est disponible.
Excel VBA DA GIA AgroParisTech Christine MARTIN Page 7

Le menu droulant Macros dans vous permet de faire un tri dans les macros disponibles et de nafficher par exemple que celles enregistres dans votre classeur personnel. 1.1.3 Supprimer une macro Si vous devez supprimer une macro dj cre, suivez les instructions suivantes : 1) Activer la commande Outils Macro macros. La fentre prsente en Figure 3 souvre. 2) Slectionner dans la liste la macro dsire et cliquer sur le bouton SUPPRIMER.

1.2 Lenvironnement de dveloppement Visual Basic Editor


Comme indiqu prcdemment, lenregistreur de macros permet de crer rapidement des programmes VBA simples. Pour aller plus loin, il faut connatre le langage VBA et apprendre crire soi-mme les instructions qui correspondent aux actions que lon souhaite faire raliser par notre programme. Pour cela on dispose sous Excel dun environnement spcifique appel Visual Basic Editor qui sexcute dans une fentre diffrente de celle dEXCEL. Cet environnement permet de modifier des codes existants (produits par exemple par lenregistreur de macros), de crer de nouveaux programmes from scratch (ex nihilo, partir de rien), dorganiser ses programmes suivants leurs rles dans des modules, de crer des procdures et fonctions (ensemble dinstructions identifies par un nom unique et renvoyant une valeur, qui pourront tre communes diffrents programmes ou utilisables directement dans les feuilles de calcul, (cf. section 3.2) 1.2.1 Accs lenvironnement Visual Basic Editor (VBE)

Lenvironnement souvre : Soit, en activant la commande : Outils / Macro / Visual Basic Editor Soit, en activant la commande AFFICHAGE BARRE D'OUTILS VISUAL BASIC et en cliquant sur l'objet VISUAL BASIC EDITOR (cf. Figure 4).

Figure 4 : Barre d'Outils Visual Basic (licne entoure permet de lancer VBE)

Dans les deux cas de figure, la fentre prsente en Figure 5 souvre et vous donne accs de nouvelles fonctionnalits.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 8

Figure 5 : Fentre principale de Visual Basic Editor (VBE)

Cette fentre se dcompose notamment en trois parties : affichage, criture et modification des fichiers de programmes disponibles ou modules de codes affichage des proprits du module de code slectionn explorateur de lensemble des modules de codes

Les particularits de ces zones sont dtailles dans les sections suivantes. 1.2.2 Fentre de lecture, criture et modification dun programme Toutes les instructions VBA sont enregistres dans un module de code qui est affich dans la fentre principale de VBE droite (cf. Figure 5 et Figure 6).

Figure 6 : Fentre d'affichage d'un module de code

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 9

Cette fentre se comporte comme un diteur de texte classique avec quelques fonctionnalits supplmentaires telles que la coloration du texte en fonction de la nature de ce qui est crit : Les mots cls du langage sont affichs en bleu o par exemple : Sub (mot cl de dbut de procdure), True (constante boolenne), Les commentaires (texte non interprt, utile pour comprendre ce que fait le programme) sont affichs en vert o Par exemple : Macro enregistre le .

Un programme est une suite dinstructions. Une instruction excute une tche prcise. Elle est gnralement crite sur une seule ligne. Exemple : Range("A1").Select Cette instruction permet de slectionner la cellule nomme A1 dans le classeur courant. Lenregistreur de macro ne gnre que des procdures sans arguments. Une procdure commence par le mot cl Sub suivi du nom de la procdure et dune liste darguments entre parenthses, qui peut tre vide. Elle se termine par le mot cl End Sub. Une procdure a la syntaxe suivante :
Sub NomProcdure([argument_1,..., argument_n]) Instructions ... End Sub

Remarque : Les crochets [ ] signifient que les arguments sont facultatifs.

Par exemple, dans la Figure 6, la fentre daffichage de modules de codes affiche le module nomm Module1 (cf. bandeau de la fentre). Ce module contient une seule macro nomme Macro1 (terme suivant le mot cl Sub). Dans cette macro, il y a 5 lignes de commentaires (commenant par un ) puis 6 instructions. L'instruction Range("A1").Select slectionne (Select) une cellule (Range) dsigne par sa ligne (1) et sa colonne (A). L'instruction ActiveCell.FormulaR1C1 affecte une formule la cellule active (ActiveCell). L'instruction Selection.Font permet dappliquer un format de police (Font.Bold ou Font.Italic) la cellule slectionne (Selection). Lorsque cette macro est lance on observe donc dans Excel le rsultat suivant :

Figure 7 : Rsultat de l'excution de la macro Macro1

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 10

Les macros produites par lintermdiaire de lenregistreur de macro sont galement stockes dans des modules de codes. Un module de code peut contenir plusieurs macros ou fonctions.

Crer une procdure directement dans VBE


Compte tenu de la syntaxe fournie ci-dessus, pour crer une nouvelle procdure directement dans VBE (sans passer par lenregistreur de macros), il suffit de taper dans lditeur de texte de VBE, dans un module de code et en dehors de toute autre procdure, le mot cl Sub suivi du nom que vous voulez attribuer votre macro, par exemple PrintValue, puis des parenthses avec lintrieur les paramtres associs cette procdure. Lorsque vous passez la ligne, le mot cl End Sub de fin de procdure est automatique rajout. Vous navez alors plus qu la complter en fonctions de la tche quelle doit remplir.

Utiliser une procdure dans une autre


Pour utiliser une procdure dans une autre, il faut utiliser le mot cl Call suivi du nom de la procdure que lon souhaite utiliser. Par exemple, ci-dessous, la procdure PrintValue est utilise dans la procdure TestPrintValue.
Sub PrintValue(Value As Double) Range("B1").Value = Value End Sub

Sub TestPrintValue() Call PrintValue(1.22) End Sub

Remarque : Seules les procdures sans arguments sont excutables directement par les menus ou icnes. Toute procdure ayant des arguments devra donc tre appele dans une autre procdure pour pouvoir tre excute. Dans lexemple prcdent et en labsence dautres procdures, la procdure PrintValue ne pourra tre excute que par lintermdiaire de la procdure TestPrintValue.

Supprimer une procdure directement dans VBE


Pour supprimer une procdure directement dans VBE, il vous suffit dans lditeur de slectionner le texte correspondant depuis le mot cl Sub jusquau mot cl End Sub et de le supprimer.

1.2.3 Affichage et modification des proprits dun module de code La fentre en bas gauche de lenvironnement VBE, permet dafficher et de modifier les proprits du module slectionn.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 11

Figure 8 : Fentre de proprit d'un module de code

Dans la Figure 8, on peut constater quun module est uniquement caractris par un nom que lon peut modifier par simple saisie dans cas se situant droite du mot cl (Name). 1.2.4 Sauvegarde Pour que les programmes produits soient conservs, il faut les sauvegarder laide de la commande : FICHIER/ENREGISTRER ou le raccourci clavier CTRL+S. 1.2.5 Retrouver un programme enregistr : lexplorateur de projets A chaque classeur EXCEL ouvert est associ un projet VBA. L'explorateur de projets (partie en haut gauche de la fentre VBE (cf. Figure 5) affiche une liste hirarchise des diffrents projets VBA associs aux classeurs EXCEL ouverts (cf. Figure 9). Un projet VBA associ un classeur regroupe les lments du classeur, comme ses feuilles de calcul, les procdures et les fonctions associes ce classeur et stockes dans un ou plusieurs modules de code.

Figure 9 : Fentre "Explorateur de projets" dans VBE

Par exemple, le projet VBA associ au classeur TEST-MACRO.XLS visible en Figure 9 est compos de deux dossiers : le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au projet : le classeur TESTMACRO.XLS (THISWORKBOOK) et ses feuilles de calcul FEUIL1, FEUIL2 et FEUIL3 ; le dossier MODULES qui contient les modules de code du projet : le module MODULE1 qui contient la macro MACRO1.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 12

Lexplorateur de projets permet, laide du clic droit de la souris, douvrir un module de code (option CODE), dinsrer un nouveau module de code (option INSERTION) ou den supprimer un (option SUPPRIMER <NOMMODULE>).

Figure 10 : Fentre ouverte par clic droit sur l'explorateur de projets dans VBE

Louverture dun module de code peut galement se faire par double-click sur celui-ci dans lexplorateur de projets. La commande INSERTION MODULE permet galement dinsrer un nouveau module de code. On peut insrer autant de modules de code quon le dsire en fonction des besoins recenss. Dans la pratique, on cherche regrouper dans un mme module tous les lments de programmes qui se rapportent un ensemble de fonctionnalits donn. Par exemple, si lon cre des fonctions de calcul mathmatiques, on les regroupera dans un mme module que lon pourrait nommer Maths. 1.2.6 Excuter directement dans VBE une procdure sans argument Attention : Seules les procdures sans argument peuvent tre excutes directement ! Les procdures avec arguments et les fonctions ne peuvent tre excutes que par dautres procdures ou fonctions et n'apparaissent pas dans la liste des macros de la bote de dialogue MACRO (commande OUTILS MACRO MACROS de EXCEL). Pour excuter une procdure sans argument, positionner le curseur dessus et activer la commande EXECUTION EXECUTER SUB/USERFORM ou cliquer sur licne Pour arrter l'excution dune procdure sans argument si une erreur survient, utiliser la commande EXECUTION REINITIALISER ou cliquer sur licne

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 13

1.2.7 Fermeture de lenvironnement VBE La commande Fichier/Fermer et retourner Microsoft Excel permet de fermer VBE et de retourner dans Excel.

2 Accs aux fonctionnalits dExcel depuis VBA


Le langage de programmation VBA dpend de lapplication MICROSOFT OFFICE laquelle il est attach (WORD, EXCEL, ACCESS...). Chaque application de MICROSOFT OFFICE possde un ensemble dobjets clairement dfinis, organiss en fonction des relations qui les unissent. Cette organisation sappelle le modle objet de lapplication. Comme nous le dtaillerons dans les sections suivantes, dans EXCEL, les objets manipuls sont des classeurs, des feuilles de calcul, des plages, des cellules...

2.1 Les objets


VBA est un langage de programmation oriente objet attach une application. Tout est objet. En informatique, un objet est une entit nomme possdant des caractres propres (des proprits) et actions propres (des mthodes). Exemple dobjets : EXCEL est un objet Application ; un classeur est un objet Workbook ; une feuille de calcul est un objet Worksheet ; une plage de cellules (qui peut se limiter une cellule) est un objet Range.

2.2 Les collections


De nombreux objets appartiennent une collection d'objets, la collection tant elle-mme un objet. Exemple de collections : Dans lobjet Application, il existe une collection Workbooks qui contient tous les objets Workbook ouverts. Chaque objet Workbook comporte une collection Worksheets qui contient tous les objets Worksheet de ce classeur. Chaque objet Worksheet contient des objets Range.

2.3 Laccs aux objets


VBA permet de faire rfrence un objet de diffrentes faons. Par exemple, pour faire rfrence une plage de cellules donne, il faut utiliser lobjet Range.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 14

Exemple : Range("A1:B4") permet de faire rfrence la plage de cellules A1:B4 et renvoie un objet Range. Pour faire rfrence un objet dans une collection, on peut soit utiliser le numro de sa position dans la collection, soit son nom. Exemple : Worksheets(1) permet de faire rfrence la premire feuille de calcul du classeur actif et renvoie un objet Worksheet. Workbooks("Classeur1.xls").Worksheets("Feuil1") permet de faire rfrence la feuille de calcul de nom Feuil1 du classeur de nom Classeur1.xls et renvoie un objet Worksheet. Workbooks("Anne2006").Sheets("Mars").Range("B2") dsigne la cellule B2 de la feuille Mars du classeur Anne2006 Sheets("Mars").Range("B2") du classeur actif (ouvert et affiche) Range("B2") de la feuille active

Remarque : La notation Workbooks("Classeur1.xls").Worksheets("Feuil1") est une notation raccourcie pour Application.Workbooks("Classeur1.xls"). Worksheets("Feuil1"). Lobjet Application peut, en effet, en gnral tre omis. Les rfrences aux cellules peuvent tre :

absolues : Range("B2") dsigne la cellule B2 de la feuille active relatives la cellule d'origine : ActiveCell.Offset (2,-1) dsigne la cellule situe 2 lignes plus bas (- pour plus haut) et une colonne gauche (+ pour droite) de la cellule active.

2.4

Les proprits des objets

Chaque objet est dfini par un ensemble de proprits, qui reprsentent les caractristiques de lobjet. Pour faire rfrence une proprit dun objet donn, il faut utiliser la syntaxe Objet.Proprit. Exemple : La proprit Value de lobjet Range dsigne la valeur de lobjet spcifi. Range("A1").Value = "AgroParisTech" affecte la valeur AgroParisTech la cellule A1. La proprit ActiveCell de lobjet Application renvoie un objet Range, qui fait rfrence la cellule active de la feuille de calcul. ActiveCell.Font.Bold = True permet daffecter le style gras la cellule slectionne (Font est une proprit de lobjet Range qui retourne un objet Font contenant les attributs de police (taille, couleur, style, ...) de lobjet Range. Bold est une proprit boolenne de lobjet Font qui correspond au style gras).

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 15

La proprit Selection de lobjet Application renvoie lobjet slectionn dans la fentre active. Le type de l'objet renvoy dpend de la slection en cours.

Remarque : La proprit ActiveCell ne permet de faire rfrence qu une seule cellule, alors que la proprit Selection permet de faire rfrence une plage de cellules.

2.5 Les mthodes des objets


Les mthodes reprsentent les actions qui peuvent tre effectues par un objet. Pour faire rfrence une mthode dun objet donn, il faut utiliser la syntaxe Objet.Mthode analogue la syntaxe daccs aux proprits des objets. Exemple : La mthode Select de lobjet Range permet de slectionner une cellule ou une plage de cellules. Range("A1").Select slectionne la cellule A1. 2.5.1 Utiliser les fonctions intgres dExcel Toutes les fonctions intgres dExcel utilisable depuis VBA sont en fait des mthodes dObjets particuliers pour VBA. Pour utiliser une fonction intgre dEXCEL dans VBA, il faut prciser VBA o peut tre trouve cette fonction. Pour cela, il faut donc comme indiqu prcdemment faire prcder le nom de la fonction de lobjet sur lequel elle va sappliquer. Par exemple, lobjet WorkSheetFunction permet daccder de nombreuses fonctions courantes telles que la fonction Min. Le code correspondant est donc :
WorkSheetFunction.Min()

Attention : Toutes les fonctions intgres dEXCEL ne sont pas disponibles dans VBA ! Nanmoins, il est fortement conseill dutiliser une fonction intgre dEXCEL pour faire un calcul donn, si cette dernire existe, plutt que de dfinir sa propre fonction, qui serait moins efficace en terme de temps de calcul.

2.6 Les vnements


Un vnement est une action reconnue par un objet. La reconnaissance dun vnement par un objet permet de dclencher lexcution dune procdure lorsque cet vnement survient. Un clic souris ou la frappe dune touche au clavier sont des exemples dvnements qui peuvent tre interprts par du code VBA. Pour quun objet rponde un vnement, il faut crire du code VBA dans la procdure associe lvnement considr. Ces procdures sont stockes dans les modules de codes associs aux objets concerns. Cf. Tutoriel : Gestion des vnements en VBA.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 16

2.7 Lexplorateur dobjets


Compte tenu du nombre important dobjets, proprits, mthodes et vnements disponibles pour Excel en VBA, on ne connat par cur dans la pratique quun petit sous ensemble. Il faut en revanche savoir retrouver les lments dont on a besoin lorsquon dveloppe un programme. Pour cela, lexplorateur dobjets recense lensemble des objets disponible dans VBA, leurs proprits, leurs mthodes et les vnements qui leur sont associs. On appelle membres dun objet ses proprits, mthodes et vnements associs. 2.7.1 Ouverture de lexplorateur dobjets Pour ouvrir lexplorateur dobjets, aller dans lditeur de Visual Basic et activer la commande AFFICHAGE EXPLORATEUR D'OBJETS.

Figure 11 : Fentre de l'explorateur d'objets

La fentre prsente en Figure 11 : Fentre de l'explorateur d'objetsFigure 11 saffiche.

2.7.2

Utilisation de lexplorateur dobjets

Slection du champ de recherche


Le premier menu droulant (cf. Figure 11) en haut gauche (zone PROJET/BIBLIOTHEQUE) permet de slectionner le projet ou la bibliothque dobjets de son choix pour restreindre le champ des recherches. Vous pouvez par exemple ne slectionner que la bibliothque EXCEL afin de ne

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 17

rechercher que dans les fonctionnalits spcifiques Excel et non dans celles communes toutes les applications VBA par exemple.

Recherche par mots cls


La zone de saisie qui se situe juste en dessous (RECHERCHER TEXTE) permet de rechercher un lment (objet, proprit, fonction, vnement) dans lespace dfini dans le menu prcdent. Taper llment recherch et appuyer sur la touche ENTREE. Le rsultat de la recherche saffiche dans la zone RESULTATS DE LA RECHERCHE qui se situe dans la partie basse de la fentre.

Affichage et lecture des rsultats


Double cliquer sur lobjet voulu dans la colonne CLASS (le membre dans la colonne MEMBRE) de la zone RESULTATS DE LA RECHERCHE, pour le voir apparatre dans la zone CLASSES (la zone MEMBRES) situe en dessous. La zone CLASSES affiche lensemble des objets disponibles dans la bibliothque slectionne. La zone MEMBRES contient lensemble des membres de lobjet slectionn dans la zone CLASSES. Les membres dun objet sont par dfaut classs par ordre alphabtique. Pour les classer par catgorie (proprits, mthodes et vnements), cliquer sur le bouton droit de la souris dans la zone MEMBRES et choisir loption MEMBRES DU GROUPE. Des icnes permettent de distinguer les objets, les proprits, les mthodes et les vnements. icne dsignant un objet icne dsignant une proprit icne dsignant une mthode icne dsignant un vnement

La zone DETAILS situe en dessous de la zone CLASSES affiche un bref descriptif de llment slectionn dans la zone CLASSES ou dans la zone MEMBRES. Pour obtenir de laide sur un objet ou un membre, slectionner cet objet dans la zone CLASSES ou ce membre dans la zone MEMBRES et cliquer sur la touche F1. Pour connatre, par exemple les fonctions intgres dEXCEL lies lobjet Feuille de calcul et disponibles dans VBA (cf. section 2.5.1), activer la commande AFFICHAGE EXPLORATEUR D'OBJETS dans lditeur de Visual Basic et rechercher parmi les membres de lobjet WorkSheetFunction.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 18

Figure 12 : Rsultat de la recherche de fonctions intgres d'Excel

La Figure 12 prsente une vue des rsultats propos par lexplorateur dobjets pour cette recherche.

2.8 Comment obtenir de laide : quelques astuces


1) Utiliser lenregistreur de macro pour dcouvrir les instructions VBA ncessaires pour accomplir une opration donne. Une bonne mthode pour apprendre se servir de VBA et dcouvrir de nouvelles instructions est de : tout d'abord enregistrer la squence des actions dont on souhaite connatre les instructions correspondantes (cf. section 1.1.1) puis excuter pas pas (touche F8) dans l'outil VBA afin de savoir les actions effectues par chacune des lignes de code et de sen servir par exemple pour crire, modifier ou complter un programme.

2)

Utiliser lexplorateur dobjets pour dcouvrir les objets disponibles dans VBA et les proprits, mthodes et vnements qui leur sont associs. Utiliser la touche F1 pour obtenir de laide sur un objet, une proprit, une mthode ou un vnement, dans un module de code ou dans lexplorateur dobjets.

3)

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 19

Vers la programmation avance

Cette section a pour but de prsenter ou rappeler suivant les cas les lments du langage VBA qui sont communs toutes les applications MICROSOFT OFFICE voire dans certains cas tout langage de programmation.

3.1 Stocker de linformation : les variables et les constantes


La dclaration des variables
Une variable permet de stocker une valeur pouvant tre modifie au cours de lexcution dun programme. Le mot cl Dim permet de dclarer explicitement une variable. Syntaxe :
Dim NomVariable

o NomVariable est une suite de caractres forms avec des lettres, des chiffres et le caractre soulign _. Le premier caractre est obligatoirement une lettre. Les minuscules sont distingues des majuscules. En VBA la dclaration des variables nest, par dfaut, pas obligatoire. Nanmoins, il est prfrable de forcer la dclaration explicite des variables notamment pour faciliter le contrle du comportement du programme et traquer les erreurs de frappe trs frquentes en programmation. Exemple :
Sub MacroTestVariable() valeur = Range("A1").Value Range("B1").Value = valleur End Sub

En effet, dans lexemple prcdent, quelle que soit la valeur de la cellule A1, cette macro ncrira rien dans la cellule B1. Pourtant VBA ne dtecte aucune erreur dans le code. Il considre quil y a deux variables distinctes valeur et valleur. Il est donc prfrable de forcer la dclaration explicite des variables en VBA. Pour ce faire, il suffit de placer linstruction Option Explicit en haut (en premire ligne) des modules de code avant toutes procdures et toutes fonctions. Si maintenant on reprend lexemple prcdent en forant la dclaration des variables :
Option Explicit Sub MacroTestVariable() valeur = Range("A1").Value Range("B1").Value = valleur End Sub Excel VBA DA GIA AgroParisTech Christine MARTIN Page 20

Maintenant, VBA dtecte une erreur la compilation car la variable valleur nest pas dfinie (cf. Figure 13).

Figure 13 : Fentre d'erreur de compilation

Pour ajouter automatiquement linstruction Option Explicit tous les nouveaux modules de code crs, activer la commande OUTILS OPTIONS..., cliquer sur longlet EDITEUR et cocher la case DECLARATION DES VARIABLES OBLIGATOIRE.

Le type des variables


La plupart des langages de programmation imposent de dterminer le type de donnes qui peut tre stocke dans une variable lors de sa dclaration. En VBA, ce nest pas obligatoire. Par dfaut, une variable non type est du type Variant, qui permet de stocker nimporte quel type de donnes. Dans un souci defficacit du code, il est prfrable de typer ses variables. Une variable de type Variant prend, en effet, plus de mmoire que nimporte quel autre type et utilise plus de ressource systme pour son traitement (identification du type effectif de la variable et ventuellement conversion). La dclaration du type dune variable se fait comme suit : Dim NomVariable As Type o Type dtermine le type de la valeur qui peut tre stocke dans la variable. Les diffrents types de donnes disponibles en VBA sont les suivants (cf. aide en ligne de VBA, commande ? SOMMAIRE ET INDEX, onglet SOMMAIRE, option REFERENCE DU LANGAGE VISUAL BASIC) : Byte, Integer et Long pour les entiers ; Single, Double et Currency pour les rels ; Boolean pour les boolens (True ou False) ; String pour les chanes de caractres ; Date pour les dates ; Object pour faire rfrence un objet ; Variant pour nimporte quel type.

Exemple :
Dim Nom As String Excel VBA DA GIA AgroParisTech Christine MARTIN Page 21

Nom = "Jean " & "Dupond" Dim Age As Byte Age = 23

& : concatne les chanes de caractres

Dim MaPlage As Object variable de type Object Set MaPlage = Range("A1:B5") Set : pour affecter un objet

Remarque sur linitialisation des variables : Selon leur type, les variables ne sont pas initialises avec la mme valeur : les variables de type Byte, Integer ou Long sont initialises 0 ; les variables de type Single, Double ou Currency sont initialises 0 ; les variables de type Boolean sont initialises False ; les variables de type String sont initialises "" (la chane vide) ; les variables de type Date sont initialises 00:00:00 ; les variables de type Variant sont initialises "" (la chane vide) (il en est de mme pour les variables dclares implicitement).

La porte des variables


La porte dune variable dfinit quelles procdures ou fonctions peuvent utiliser cette variable. Les variables dclares lintrieur dune procdure ou dune fonction ne sont accessibles qu lintrieur de cette procdure ou de cette fonction. Exemple :
Sub InitialiseAge() Dim Age As Integer Age = 25 End Sub

La variable Age nest accessible que dans la procdure InitialiseAge. Pour quune variable soit accessible lensemble des procdures et des fonctions dun module, elle doit tre dclare au dbut du module lextrieur de toute procdure et de toute fonction. Pour quune variable soit accessible lensemble des procdures et des fonctions dun projet, elle doit tre dclare au dbut dun module lextrieur de toute procdure et de toute fonction, laide du mot cl Public. Exemple :
Public Age As Integer Sub ModifieAge() Age = 27 End Sub

La dclaration des constantes


Excel VBA DA GIA AgroParisTech Christine MARTIN Page 22

Une constante permet dattribuer un nom une valeur fixe. La dclaration dune constante se fait laide du mot cl Const comme suit :
Const NomConstante [As Type] = valeur

Une constante a la mme porte quune variable. Exemple :


Public Const Pi As Single = 3.14159265358979

Linstruction With...End With


Linstruction With...End With est utile lorsque les rfrences un objet sont rptes plusieurs fois dans une petite section de code. Exemple :
Sub ModifiePolice(MaPlage As Range) MaPlage.Select Selection.Font.Size = 12 Selection.Font.ColorIndex = 3 Selection.Font.Italic = True End Sub

La macro ModifiePolice peut tre rcrite plus simplement comme suit :


Sub ModifiePolice(MaPlage As Range) MaPlage.Select With Selection.Font .Size = 12 .ColorIndex = 3 .Italic = True End With End Sub

Tout ce qui commence par un point dans un bloc dinstructions With...End With est une proprit ou une mthode de lobjet qui suit linstruction With.

3.2 Dfinir ses propres fonctions


VBA offre la possibilit de crer ses propres fonctions, qui peuvent tre utilises dans EXCEL comme nimporte quelle fonction intgre. 3.2.1 Dfinition Une fonction est une suite d'instructions qui retourne une valeur. Elle commence par le mot cl Function suivi du nom de la fonction et dune liste darguments entre parenthses, qui peut tre vide. Elle se termine par le mot cl End Function. Une fonction a donc la syntaxe suivante :
Function NomFonction([argument_1,..., argument_n]) Instructions ... NomFonction = Expression valeur de retour Excel VBA DA GIA AgroParisTech Christine MARTIN Page 23

... End Function

Remarque : Les crochets [ ] signifient que les arguments sont facultatifs. Attention : Dans VBA, les arguments dune fonction sont spars par des virgules, alors que dans EXCEL ils sont spars par des points-virgules. Une fonction indique la valeur retourner en initialisant son nom avec la valeur de retour (cf. commentaire dans le cadre prcdent). Par exemple, une fonction fournissant la surface dun cercle tant donn son rayon pourrait scrire comme suit :
Function SurfaceCercle(Rayon As Double) As Double SurfaceCercle = WorksheetFunction.Pi() * Rayon * Rayon End Function

Remarque : On peut typer les arguments dune procdure ou dune fonction et la valeur de retour dune fonction.
Ici, SurfaceCercle est une fonction ayant un argument : le rayon du cercle Rayon, qui est une variable de type rel. Elle renvoie la surface du cercle de rayon Rayon, qui est de type rel. Pi est une fonction intgre dEXCEL. Attention : Dans VBA les rels sont crits avec des points, alors quils sont crits avec des virgules dans EXCEL. 3.2.2 Utilisation sous Excel Lutilisation dune fonction dfinie par lutilisateur se fait dans Excel comme toute fonction intgre. Par exemple, pour la feuille de calcul suivante :

Si lon note dans la cellule B6, la formule =SurfaceCercle(A6), et que lon procde de manire analogue pour les cellules suivantes, on obtient le rsultat suivant :

Lorsquon crit =SurfaceCercle(A6) dans la cellule B6 la valeur de la cellule A6 est transmise la fonction SurfaceCercle par le biais de largument Rayon. La fonction SurfaceCercle initialise

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 24

alors son propre nom avec le rsultat calcul (WorksheetFunction.Pi() * Rayon * Rayon). Le rsultat est ensuite retourn la cellule B6. La fonction SurfaceCercle peut tre utilise comme nimporte quelle fonction intgre dEXCEL (commande INSERTION FONCTION... puis CATEGORIE DE FONCTIONS : PERSONNALISEES). Par contre, elle n'apparat pas dans la liste des macros dEXCEL (commande OUTILS MACRO MACROS). 3.2.3 Utilisation dans un programme VBA Contrairement une procdure, une fonction retourne une valeur qui lorsquon utilise cette fonction dans une autre fonction ou une autre procdure doit tre sauvegarde dans une variable. Par exemple, la fonction SurfaceCercle telle que dfinie en section 3.2.1 peut tre utilise dans la procdure MacroTestFonction dont le code est fourni ci-dessous.
Sub MacroTestFonction() Dim valeur As Double valeur = SurfaceCercle(1.5) Range("B1").Value = valeur End Sub

Ici la variable valeur reoit le rsultat de la function SurfaceCercle pour un rayon donn gal 1.5.

3.3 Prendre en compte des conditions


Frquemment dans un programme on souhaite que certaines tches (instructions) soient ralises dans certains cas et pas den dautres. Ceci se fait en VBA par lintermdiaire des mots cls If, Then, Else et ElseIf. Syntaxes :
If condition Then Instructions_si_vrai [Else Instructions_si_faux] End If If condition_1 Then Instructions_1 ElseIf condition_2 Then Instructions_2 ElseIf condition_3 Then Instructions_3 ... Else Instructions_n End If

Dans une structure de bloc If, il faut imprativement aller la ligne aprs le Then. Remarque : Les crochets [ ] signifient que le bloc Else est facultatif. Lorsque le bloc If contient une ou plusieurs sections ElseIf, les diffrentes conditions sont testes jusqu ce quune soit value vraie. Si aucune condition nest vrifie, les instructions de la section Else, si elle existe, sont excutes. Si aucune condition nest vrifie et si la section Else nexiste pas, le bloc If ne fait rien. VBA offre la possibilit dutiliser les oprateurs logiques suivants : Or, Xor (ou exclusif), And, Not. Exemple :
Excel VBA DA GIA AgroParisTech Christine MARTIN Page 25

Sub BonjourHeureIf() Dim heure As Integer Dim mes As String heure = Left(Time, 2) 'rcupration de l'heure (2 caractres gauche de la valeur de retour de la fonction Time If heure > 7 And heure < 12 Then mes = "Bonjour" ElseIf heure >= 12 And heure < 18 Then mes = "Bon aprs-midi" ElseIf heure >= 18 And heure < 22 Then mes = "Bonne soire" Else mes = "Bonne nuit" End If Range("A1").Value = mes End Sub

3.4 Rpter les mmes actions


VBA fournit deux structures pour rpter en boucle les mmes instructions : linstruction Do...Loop et linstruction For...Next.

La boucle Do...Loop
La boucle Do...Loop est utilise lorsque lon veut que la rptition des instructions sarrte quand une condition donne est vrifie. On distingue plusieurs syntaxes possibles.
Do While condition Instructions Loop Tant que la condition est vraie, les instructions sont excutes

Do Until condition Instructions Loop

Jusqu' ce que la condition devienne vraie, les instructions sont excutes

Avec ces deux boucles, les instructions peuvent ne jamais tre excutes. Pour quelles soient excutes au moins une fois, on peut utiliser lune des deux syntaxes suivantes :
Do Instructions Loop While condition les instructions sont excutes tant que la condition reste vraie

Do Instructions Loop Until condition

les instructions sont excutes jusqu ce que la condition devienne vraie

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 26

La boucle For...Next
La boucle For...Next est utilise lorsque lon connait lavance le nombre de fois o lon veut que les instructions soient rptes.
For compteur = nbdbut To nbfin [Step nbpas] Instructions instructions excutes un nombre dtermin de fois Next compteur

Les instructions de la boucle For...Next sont excutes un nombre dtermin de fois. Lorsque loption Step nest pas renseigne, le compteur est incrment de 1 chaque itration et les instructions sont excutes nbdbut - nbfin fois. Exemple : La procdure suivante calcule la somme des n premiers entiers :
Sub SommeEntiers() Dim somme As Integer Dim compteur As Integer Dim n As Integer n = Range("A1").Value For compteur = 1 To n somme = somme + compteur Next compteur Range("A2").Value = "Somme des " & n & " premiers entiers : " Range("B2").Value = somme End Sub

Le compteur peut tre, chaque itration, incrment de la valeur de nbpas. Exemple :


For compteur = 21 To 1 Step -2 Range("A"&compteur).Value = compteur 1 Next compteur

La boucle For EachNext La boucle For EachNext permet daccder aux objets dune collection. Exemple :
Sub ColorieCellule() Dim MaPlage As Range Dim Cellule As Range Dim i As Integer Set MaPlage = Range(A1:B5) For Each Cellule In MaPlage Cellule.Interior.ColorIndex = i i = i + 1 Next Cellule End Sub Excel VBA DA GIA AgroParisTech Christine MARTIN Page 27

Interrompre une boucle Linstruction Exit permet de quitter un bloc DoLoop, ForNext, Function, ou Sub. Sa syntaxe est la suivante : Exit + mot_cl_dbut_de_bloc Exemples : Exit Do, Exit For, Exit Function, Exit Sub, La boucle suivante sarrte lorsque la rponse rep est n ou N :
Do Rep = InputBox( Voulez-vous continuer ? (O/N) ) If Lcase(rep) = n Then Exit Do Loop

La fonction InputBox permet de crer une bote de dialogue. Pour plus dinformations ce sujet reportez-vous au Tutoriel : Les entres et sorties standards page 32.

3.5 Rgles de bonne conduite en programmation


Afin que vos programmes soient lisibles et rutilisables, il est important de : Commenter vos codes Donner des noms explicites vos variables, fonctions, procdures, Regrouper les ensembles dinstructions qui rpondent une fonctionnalit donne soit : o dans une procdure : suites dinstructions identifies par un nom unique et ne renvoyant pas de valeur ; o dans une fonction : une suite d'instructions identifies par un nom unique et qui retourne une valeur. Rutiliser vos fonctions et procdures ou les fonctions intgres dExcel dans tout programme qui rclame les fonctionnalits correspondantes. o Autant que possible ne jamais dupliquer une mme ligne de code ! Regrouper vos fonctions et procdures en diffrents modules, nomms de manire explicite, suivant leurs finalits.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 28

Excel-VBA et lIHM
Sont prsentes dans ce qui suit sous forme de tutoriels des fonctionnalits de VBA spcifiques linterfaage entre lutilisateur et Excel.

Tutoriel : Les vnements Tutoriel : Les entres et sorties standards Tutoriel : Les Objets UserForm

30 32 37

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 29

Tutoriel : Les vnements


Un vnement, comme dfini en section 2.6, est une action reconnue par un objet. La reconnaissance dun vnement par un objet permet de dclencher lexcution dune procdure lorsque cet vnement survient. Un clic souris ou la frappe dune touche au clavier sont des exemples dvnements qui peuvent tre interprts par du code VBA. Nous verrons plus loin que les contrles placs dans une bote de dialogue (boutons de commande, zones de texte, ...) peuvent rpondre des vnements. Les classeurs et les feuilles de calcul peuvent galement rpondre des vnements. Pour quun objet rponde un vnement, il faut crire du code VBA dans la procdure associe lvnement considr. Lobjectif de ce tutoriel est dcrire une procdure qui dtecte chaque nouvelle plage de cellules ou cellule slectionne par lutilisateur dans la feuille de calcul FEUIL1 du classeur nomm ici pour lexemple TEST-MACRO.XLS et colorie son fond en bleu. Avant dcrire cette procdure, il faut : identifier lobjet dont on veut traiter lvnement. Dans notre cas, il sagit de la feuille de calcul FEUIL1 qui est un objet Worksheet ; puis identifier lvnement traiter dans la liste des vnements associs lobjet considr. Dans notre cas, on sintresse chaque nouvelle slection dune plage de cellules ou cellule dans la feuille de calcul, ce qui correspond lvnement SelectionChange ; enfin, crire le code VBA appropri dans la procdure associe lvnement choisi.

Pour cela, nous allons : 1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic (activer la commande AFFICHAGE BARRE D'OUTILS VISUAL BASIC et cliquer sur l'objet VISUAL BASIC EDITOR). 2) Dans lexplorateur de projets, slectionner la feuille de calcul FEUIL1 et ouvrir son module de code laide du clic droit de la souris et de loption CODE. 3) Dans la liste de gauche au sommet du module de code, slectionner loption WORKSHEET. Dans la liste de droite au sommet du module de code, slectionner lvnement SELECTIONCHANGE.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 30

On voit alors apparatre dans le module de code len-tte de procdure suivant : Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On veut prsent crire les instructions VBA permettant de colorier le fond dune cellule ou dune plage de cellules en bleue. Pour trouver ces instructions, il existe deux possibilits : utiliser lenregistreur de macro, ou explorer les proprits de lobjet Range pour trouver comment modifier sa couleur de fond.

Le moyen le plus facile pour dcouvrir les instructions ncessaires pour accomplir une opration donne consiste utiliser lenregistreur de macro.

4) Aller dans EXCEL et enregistrer une nouvelle macro MacroCouleurFond qui permet de modifier la couleur de fond dune cellule. 5) Retourner dans lditeur de Visual Basic et tudier le code de la macro MacroCouleurFond. Linstruction Selection.Interior.ColorIndex = 41 semble intressante puisquelle parle de couleur. Pour obtenir de laide sur cette instruction, slectionner dans le code la proprit ColorIndex et appuyer sur la touche F1. Laide en ligne de lditeur de Visual Basic permet dobtenir les informations suivantes : La proprit Interior dun objet Range renvoie un objet Interior qui correspond la couleur de fond dune plage de cellules. La proprit ColorIndex dun objet Interior permet de dterminer la couleur de fond.

Pour obtenir de laide sur un objet, une proprit ou une mthode donne, slectionner dans le code cet objet, cette proprit ou cette mthode et appuyer sur la touche F1. 6) Retourner dans le module de code associ la feuille de calcul FEUIL1 et complter la procdure Worksheet_SelectionChange comme suit : Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 41 End Sub La variable Target qui est un objet Range reprsente la plage de cellules ou cellule slectionne par lutilisateur dans la feuille de calcul FEUIL1. 7) Enregistrer la procdure et retourner dans EXCEL pour la tester (slectionner une plage de cellules ou cellule et vrifier que sa couleur de fond devient bleue).

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 31

Tutoriel : Les entres et sorties standards


Dans ce tutoriel sont prsentes deux fonctions dentres/sorties standards de VBA : la fonction MsgBox et la fonction InputBox.

1 La fonction MsgBox
La fonction MsgBox affiche un message dans une bote de dialogue, attend que l'utilisateur clique sur un bouton, puis renvoie un entier indiquant le bouton choisi par l'utilisateur. Elle a la syntaxe suivante (les arguments entre crochets sont facultatifs) : MsgBox(prompt[,buttons][,title][,helpfile, context]) o prompt est le message affich dans la bote de dialogue, buttons correspond au type de boutons de la bote de dialogue et title est le titre de la bote de dialogue (cf. aide en ligne de lditeur de Visual Basic laide de la touche F1.). 1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic.

2) Insrer un nouveau module de code laide de la commande INSERTION MODULE et saisir la macro suivante :
Sub MacroTestMessage() Call MsgBox("Bonjour ! ", , "Accueil") End Sub

3) Excuter la macro laide de la commande EXECUTION EXECUTER SUB/USERFORM ou cliquer sur licne

Les valeurs des arguments de la fonction MsgBox peuvent tre spcifies de deux manires : par position ou par nom. Exemple :

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 32

Dans linstruction Call MsgBox("Bonjour ! ", , "Accueil"), les valeurs des arguments sont spcifies par position : les arguments doivent alors tre saisis dans le bon ordre et des virgules supplmentaires doivent tre inclues pour les arguments manquants. Cette instruction peut tre rcrite par nom en spcifiant les valeurs des arguments par nom comme suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil"). Dans ce cas, comme dans lexemple prcdent, il faut utiliser le signe := entre le nom de largument et sa valeur. Lordre entre les arguments na alors plus dimportance et il ny a pas besoin de virgules supplmentaires pour les arguments manquants.

4) Saisir la macro suivante et lexcuter. Sub MacroTestMessage2() Call MsgBox(prompt:="Avez-vous pass une bonne journe? ", Buttons:=4, Title:="Accueil !") End Sub

Largument Buttons:=4 permet dafficher les boutons Oui et Non. Au lieu dutiliser la valeur numrique 4 pour largument Buttons, on aurait pu utiliser la constante associe vbYesNo (cf. aide en ligne de lditeur de Visual Basic), qui rend le code plus lisible. Call MsgBox(prompt:="Avez-vous pass une bonne journe? ", Buttons:=vbYesNo, Title:="Accueil !") Lutilisation de constantes VBA intgres rend le code plus lisible. Dans lexemple prcdent, une question est pose lutilisateur, mais sa rponse nest pas rcupre : on ne sait pas sil a pass une bonne journe. Il se pose alors le problme de rcuprer la valeur de retour de la fonction MsgBox. Pour ce faire, il ne faut pas utiliser linstruction Call pour appeler MsgBox mais la syntaxe suivante : reponse = MsgBox(prompt:="Avez-vous pass une bonne journe?") o reponse est une variable dans laquelle on va stocker temporairement le rsultat. On peut tester la valeur de retour de la fonction MsgBox (cf. aide en ligne de lditeur de Visual Basic), comme suit :
Sub MacroTestMessage3() Dim reponse As String reponse = MsgBox(prompt:="Avez-vous pass une bonne journe? ", Buttons:=vbYesNo, Title:="Accueil !") If reponse = vbYes Then Call MsgBox("Bonjour ! ", , "Accueil") Else

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 33

Call MsgBox("Bonsoir ! ", , "Accueil") End If End Sub

2 La fonction InputBox
La fonction InputBox affiche une invite dans une bote de dialogue, attend que l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la zone de texte sous la forme d'une chane de caractre. Elle a la syntaxe suivante (les arguments entre crochets sont facultatifs) :
InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])

o prompt est le message affich dans la bote de dialogue et title est le titre de la bote de dialogue (cf. aide en ligne de lditeur de Visual Basic). Si lutilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoie la chane de caractres vide "".

5) Saisir la macro suivante et lexcuter.


Sub MacroTestDialogue() Dim reponse As String reponse = InputBox("Quel age avez-vous ?", "Saisie age") If reponse = "" Then Call MsgBox("Vous n'avez pas rpondu la question !", , "Erreur") Else Call MsgBox("Vous avez " & reponse & " ans", , "Age") End If End Sub

Loprateur & permet de concatner des chanes de caractres. Par exemple, si la rponse donne par lutilisateur est 22, alors on a : "Vous avez " & reponse & " ans" = "Vous avez 22 ans"

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 34

3 Rcapitulatif sur les parenthses et les listes darguments


Les procdures et les fonctions peuvent avoir des arguments. Voici un petit rcapitulatif sur leur appel avec arguments. Pour rcuprer la valeur de retour dune fonction, il ne faut pas utiliser linstruction Call pour lappeler. Exemple : reponse = InputBox("Quel age avez-vous ?", "Saisie age") Pour appeler une procdure ou ne pas rcuprer la valeur de retour dune fonction, il faut utiliser linstruction Call. Exemple : Call MsgBox("Bonjour ! ", , "Accueil")

Attention : Il ne faut pas mettre despace entre le nom dune fonction ou dune procdure et la liste de ses arguments placs entre parenthses. Il existe un autre moyen pour appeler une procdure ou une fonction dont on ne veut pas rcuprer la valeur de retour : ne pas utiliser linstruction Call et ne pas placer ses arguments entre parenthses. Exemple : MsgBox "Bonjour ! ", , "Accueil" Lors de lappel dune procdure ou dune fonction, les valeurs de ses arguments peuvent tre spcifies par position ou par nom. Exemple : arguments spcifis par position Call MsgBox("Bonjour ! ", , "Accueil")

arguments spcifis par nom Call MsgBox(prompt :="Bonjour ! ", Title :="Accueil")

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 35

Tutoriel : Les Objets UserForm


Introduction
Les objets UserForm sont des botes de dialogue dfinies par lutilisateur. Ce tutoriel explique comment crer une bote de dialogue permettant de saisir les clients dune entreprise, comme le montre la capture dcran suivante :

1) Ouvrir un nouveau classeur et lenregistrer sous SAISIECLIENTS.XLS. 2) Pour renommer la feuille de calcul FEUIL1, cliquer avec le bouton droit sur l'onglet FEUIL1, activer la commande RENOMMER et taper CLIENTS.

3) Saisir dans la feuille de calcul CLIENTS, les donnes suivantes :

4) Renommer DIVERS la feuille de calcul FEUIL2 et saisir les donnes suivantes : On peut distinguer deux phases dans la cration dun objet UserForm : le dessin de lobjet UserForm Le dessin dun objet UserForm consiste placer des contrles sur lobjet. Les contrles sont les lments constitutifs dun objet UserForm tels quune case cocher, une zone de texte, une zone de liste modifiable ou un bouton de commande permettant une intervention de lutilisateur. Un contrle est un objet : il possde des proprits, des mthodes et des vnements dfinis. lassociation de code lobjet UserForm et ses diffrents contrles
Page 36

Excel VBA DA GIA AgroParisTech Christine MARTIN

Il sagit de dterminer le comportement de lobjet UserForm et de ses contrles face aux diffrents vnements utilisateur pouvant laffecter et dcrire le code permettant dexploiter les actions effectues par lutilisateur.

1 Crer un objet UserForm


1) Ouvrir lditeur de Visual Basic et activer la commande INSERTION USERFORM. Un objet UserForm1 apparat, ainsi qu'une bote outils permettant d'ajouter des contrles lobjet. Dans lexplorateur de projets, les botes de dialogue sont regroupes dans un dossier FEUILLES

objet USERFORM1 qui est un objet de type FEUILLE et qui permet de dessiner une bote de dialogue

fentre objet associe lobjet USERFORM1

bote outils qui apparat lorsque la fentre objet associe lobjet USERFORM1 est slectionne

proprits de l'objet USERFORM1

Lexplorateur de projets permet dafficher le code dun objet USERFORM laide du clic droit de la souris et de loption CODE ; ou dafficher lobjet lui-mme laide du clic droit de la souris et de loption AFFICHER LOBJET. 2) Modifier le nom de lobjet UserForm par dfaut, UserForm1, en FenetreSaisieClients dans la proprit NAME de la fentre PROPRIETES. Ce nom est le nom qui sera utilis dans le code pour faire rfrence lobjet UserForm.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 37

3) La proprit CAPTION de lobjet UserForm correspond au libell qui apparat dans sa barre de titre. Modifier cette proprit en Saisie Clients.

Zone de texte Intitul

Zone de liste modifiable

bouton de commande

On veut crer lobjet UserForm suivant : Cet objet est compos des contrles suivants : un INTITULE et une ZONE DE LISTE MODIFIABLE pou saisir le titre du client (Madame, Mademoiselle ou Monsieur), trois INTITULES et trois ZONES DE TEXTE pour saisir le nom, le prnom et le tlphone du client et deux BOUTONS DE COMMANDE OK et Annuler. Pour placer un contrle dans lobjet UserForm, cliquer sur lobjet voulu de la BOITE A OUTILS et le faire glisser vers lobjet UserForm. Ds quun contrle a t plac sur lobjet UserForm, dfinir son nom grce la proprit NAME. Attention : Il est recommand dutiliser des noms vocateurs pour ses contrles, qui permettent didentifier le type dobjet quils reprsentent et leur utilit.

4) Placer les diffrents contrles de lobjet UserForm et modifier leurs proprits comme suit : Contrle proprit NAME proprit CAPTION INTITUL IntitulTitre Titre : ZONE DE LISTE MODIFIABLE ComboBoxTitre INTITUL IntitulNom Nom : ZONE DE TEXTE TextBoxNom INTITUL IntitulPrnom Prnom : ZONE DE TEXTE TextBoxPrnom INTITUL IntitulTl Tlphone : ZONE DE TEXTE TextBoxTl BOUTON DE COMMANDE ButtonOK OK BOUTON DE COMMANDE ButtonAnnuler Annuler Remarque : Il est possible de copier/coller des contrles. proprit FONT police TIMES NEW ROMAN, taille 10 " " " " " " "

Afficher et fermer un objet UserForm

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 38

2.1 Afficher un objet UserForm


Linstruction Load permet de charger un objet UserForm en mmoire sans lafficher. La mthode Show de lobjet UserForm permet dafficher un objet UserForm et de le charger en mmoire, si cela na pas dj t fait. Ecrire la procdure qui permet dafficher la bote de dialogue de saisie dun client. 1) Dans lditeur de Visual Basic, activer la commande INSERTION MODULE. Un module de code MODULE1 souvre. Renommer le ModuleSaisieClients laide de la proprit NAME. 2) Saisir la procdure suivante dans le module de code :
Sub ProgPrincSaisieClients() Sheets("Clients").Activate Clients FenetreSaisieClients.Show End Sub activation de la feuille

3) Excuter cette procdure (pour fermer la bote de dialogue FenetreSaisieClients, cliquer sur son bouton de fermeture).

2.2 Fermer ou masquer un objet UserForm


Linstruction Unload permet de fermer un objet UserForm et de leffacer de la mmoire, les valeurs de ses contrles sont alors perdues. La mthode Hide de lobjet UserForm permet de faire disparatre un objet UserForm de lcran sans le supprimer de la mmoire. Linstruction Unload ou la mthode Hide sont gnralement places dans les procdures vnementielles attaches aux boutons de validation de lobjet UserForm, comme par exemple les boutons de commande OK et Annuler.

3 Associer du code un objet UserForm


Les contrles placs sur un objet UserForm et lobjet UserForm lui mme sont rceptifs aux vnements utilisateurs qui les affectent (clic souris sur un bouton de commande, saisie d'une valeur dans une zone de texte). On peut ainsi crer des procdures dites procdures vnementielles, qui se dclencheront lorsque lvnement correspondant sera repr. La syntaxe dune procdure vnementielle attache un contrle de nom NomContrle (proprit NAME) et dclenche par un vnement NomEvnement est la suivante :
Private Sub NomContrle_NomEvnement() ... End Sub

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 39

Dans le cas dune procdure vnementielle attache un objet UserForm, le nom de lobjet UserForm (proprit NAME) napparat pas dans les instructions de dclaration de la procdure. Il est remplac par le mot cl UserForm comme suit :
Private Sub UserForm_Nomvnement () ... End Sub

Les vnements sont nombreux et varient dun contrle lautre. En voici, quelques uns : vnement Change : dtect lors de la modification de la valeur (proprit VALUE) dun contrle (par exemple une zone de texte). vnement Click : dtect lorsque lutilisateur clique sur un contrle (par exemple un bouton de commande). vnement dblClick : dtect lorsque lutilisateur double-clique sur un contrle.

3.1 Associer du code un bouton de commande


Associer le code ncessaire au bouton de commande OK pour que la bote de dialogue soit ferme lorsque lon clique dessus. 1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, slectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir son module de code laide du clic droit de la souris et de loption CODE (ou en double-cliquant dessus). 2) Dans la liste de gauche au sommet du module de code, slectionner loption ButtonOK. Dans la liste de droite au sommet du module de code, slectionner lvnement Click.

3) Complter la procdure vnementielle ButtonOK_Click qui apparat comme suit :


Private Sub ButtonOK_Click() Call Unload(Me) End Sub

La proprit Me de lobjet UserForm renvoie lobjet UserForm actif. 4) Pour tester cette procdure, excuter la procdure ProgPrincSaisieClients du module de code ModuleSaisieClients. 5) Associer le code ncessaire au bouton Annuler pour que la bote de dialogue soit ferme lorsque lon clique dessus.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 40

3.2 Initialiser un objet UserForm


Lvnement Initialize dun objet UserForm est dtect lorsque lobjet UserForm est charg, laide de la mthode Show ou de linstruction Load. Attention : Lorsque la mthode Show est applique un objet UserForm masqu par la mthode Hide, lobjet UserForm nest pas recharg mais uniquement affich. Lvnement Initialize nest alors pas dclench. La procdure vnementielle associe lvnement Initialize dun objet UserForm sexcute avant laffichage de lobjet et a la syntaxe suivante :
Private Sub UserForm_Initialize() ... End Sub

Cette procdure permet deffectuer des rglages dans lobjet UserForm avant son chargement. Ecrire le code ncessaire pour affecter les valeurs Madame, Mademoiselle et Monsieur la zone de liste modifiable ComboBoxTitre, en utilisant les valeurs qui se trouvent dans la plage de cellule A1:A3 de la feuillle de calcul DIVERS.

1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, selectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir son module de code laide du clic droit de la souris et de loption CODE. 2) Dans la liste de gauche au sommet du module de code, slectionner loption UserForm. Dans la liste de droite au sommet du module de code, slectionner lvnement Initialize. 3) Complter la procdure vnementielle UserForm_Initialize qui apparat comme suit :
Private Sub UserForm_Initialize() Dim i As Integer i = 1 Do Until IsEmpty(Worksheets("Divers").Range("A" & i)) Call Me.ComboBoxTitre.AddItem(Worksheets("Divers"). _ Range("A" & i).Value) i = i + 1 Loop End Sub

Remarque : Pour crire une instruction sur plusieurs lignes, il faut, la fin de chaque ligne, taper sur la barre despace et sur le trait continu (_). 4) Pour tester cette procdure, excuter la procdure ProgPrincSaisieClients du module de code ModuleSaisieClients.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 41

Pour information : Il existe une autre mthode pour initialiser la zone de liste modifiable ComboBoxTitre avec les valeurs Madame, Mademoiselle et Monsieur, en la liant la plage de cellule A1:A3 de la feuillle de calcul DIVERS. Pour lier un contrle une plage de cellules, il faut renseigner la proprit ROWSOURCE du contrle avec la plage de cellules voulue (dans notre cas, Divers!A1:A3) ou encore mieux avec le nom de la plage de cellules voulue, ce qui suppose de nommer cette plage de cellules. Remarque : La proprit CONTROLSOURCE permet de lier un contrle une seule cellule. Attention: Cette mthode, contrairement la prcdente, ne pourra pas prendre en compte les ventuelles modifications faites sur le titre dun client (ajout ou suppression dun titre). La zone de liste modifiable ComboBoxTitre est lie la plage de cellule fixe A1:A3 de la feuille de calcul DIVERS.

3.3 Accder aux contrles dun objet UserForm


Jusqu prsent, nous avons cr un objet UserForm pour saisir de nouveaux clients, et, ouvert et ferm cet objet. Cependant, si lutilisateur saisit des donnes dans lobjet UserForm, ces dernires ne sont pas recopies dans liste de donnes EXCEL correspondante.

La mise jour de la liste de donnes EXCEL correspondant aux donnes du client doit tre faite lorsque lutilisateur clique sur le bouton OK. Elle consiste insrer une nouvelle ligne dans la liste de donnes et recopier les valeurs des contrles de lobjet UserForm dans les bonnes cellules de la nouvelle ligne. 1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, slectionner lobjet UserForm de nom FenetreSaisieClients, ouvrir son module de code et complter la procdure vnementielle ButtonOK_Click comme suit :
Private Sub ButtonOK_Click() Sheets("Clients").Rows(2).Insert Range("A2:D2").Font.Bold = False Sheets("Clients").Range("A2").Value=Me.ComboBoxTitre.Text Sheets("Clients").Range("B2").Value = Me.TextBoxNom.Text Sheets("Clients").Range("C2").Value=Me.TextBoxPrnom.Text Sheets("Clients").Range("D2").Value = Me.TextBoxTl.Text

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 42

'tri de la liste de donnes dans l'ordre croissant des noms (deuxime colonne). Call Sheets("Clients").Range("A1"). _ Sort(Key1:= Sheets ("Clients").Columns("B"), Header:=xlYes) Call Unload(Me) End Sub

Attention : Si, dans les procdures vnementielles ButtonOK_Click et ButtonAnnuler_Click, on utilise la mthode Hide pour masquer lobjet UserForm la place de linstruction Unload, les ressources mmoires de lobjet UserForm ne sont pas libres. Lors dun nouvel affichage de lobjet UserForm avec la mthode Show, les diffrents contrles de lobjet ont alors les mmes valeurs que lorsquil a t masqu.

4 Afficher un objet UserForm partir dun bouton dune feuille de calcul


On veut pouvoir afficher la bote de dialogue FenetreSaisieClients partir d'un bouton de commande de la feuille de calcul CLIENTS. 1) Aller dans EXCEL et cliquer sur longlet CLIENTS. Positionner le curseur sur une cellule vide de la feuille de calcul CLIENTS et activer la commande AFFICHAGE BARRE D'OUTILS FORMULAIRES. 2) Une barre d'outils FORMULAIRES apparat. Cliquer sur l'objet BOUTON, puis cliquer sur la feuille de calcul CLIENTS. 3) Dans la nouvelle fentre AFFECTER UNE MACRO qui apparat, slectionner la macro ProgPrincSaisieClients et cliquer sur le bouton OK. 4) Cliquer sur le bouton BOUTON 1 et renommer le SAISIE CLIENTS.

5) Fermer la barre d'outils FORMULAIRES et tester le bouton SAISIE CLIENTS.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 43

Ponts entre applications


Il est possible avec VBA de programmer des fonctionnalits avances pour lensemble des applications Office et de ce fait de crer des ponts entre ces diffrentes applications. Par exemple, on peut retranscrire automatiquement dans un document Word le contenu dun fichier Excel.

Pour cela dans une Macro Excel, il vous faudra : accder lapplication Word : rendre la fentre visible : ouvrir un document : ajouter un document : sauvegarder le document : crire du texte : CreateObject("Word.Application") ObjetWord.Visible = True ObjetWord.Documents.Open ObjetWord.Documents.Add ObjetWord.Documents.Save ObjetWord.Selection.TypeText Text:="le texte"

Le code suivant est fourni en exemple :


Sub CopieWord() Dim AppWord As Object Set AppWord = CreateObject("Word.Application") With AppWord .Documents.Add .Selection.TypeText Text:="Liste des Clients" .Selection.TypeParagraph sauter une ligne on copie le contenu de A1 dans le document Word .Selection.TypeText Text:="" & Range("A1").Value .Documents.Save .Visible = True End With End Sub

Lenregistreur de macro existe galement sous Word et vous permettra de dcouvrir les instructions utiles vos besoins.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 44

Actions par URL


Dans un programme VBA on peut accder des outils extrieurs tels que des requtes internet par lintermdiaire de la fonction suivante : ActiveWorkbook.FollowHyperlink(Url) Url reprsente ici des donnes concernant le service auquel on souhaite se rfrer. Cette fonction envoie alors une requte travers le navigateur par dfaut.

Interrogation dun service web


Url du type : http://nom_du_service?requete-eventuelle Si lon considre par exemple lUrl : http://www.google.com/search?q=ege+agroparistech on pourra grce la fonction prcdente lancer depuis une macro VBA dans Excel une recherche sur internet par le service Google pour les mots cls ege et agroparistech . Tout site internet est accessible par ce biais. Le format des requtes dpend de chaque service notamment au niveau des mots cls utiliss (pour google q reprsente la recherche formule).

Envoie de mails
Grce linstruction fournie prcdemment, on peut galement dclencher lenvoie dun mail par lintermdiaire dune url du type : mailto:adresse_mail?subject=le_sujet&body=le_contenu_du_message Par exemple, pour lurl suivante mailto:edgar.poe@gmail.com?subject=Oh&body=ca va ?, edgar.poe@gmail.com reprsente ladresse mail laquelle on souhaite envoyer le message, Oh reprsente le titre du message et ca va ? son contenu.

Excel VBA DA GIA AgroParisTech Christine MARTIN

Page 45

You might also like