You are on page 1of 36

Initiation VBA pour Excel

Philippe Bernard Ingnierie Economique et Financire Universit Paris-Dauphine Septembre 2008

Chapitre 1 Rfrences
F. Riva Applications nancires sous Excel en Visual Basic, Economica 2me dition (ouvrage qui en 200 pages russit la performance de prsenter de manire trs complte le langage VBA, puis de faire des applications la gestion de portefeuille, l valuation des options, l assurance de portefeuille et l e cience des marchs - les notes ci-dessous suivent souvent trs troitement la prsentation de VBA de cet ouvrage) pour d autres ouvrages ou rfrences consultez les pages ressources en nance et en conomie du master Ingnierie Economique et Financire http ://www.dauphine.fr/dfrea/master_ace/plan.html parmi les ouvrages trs complets consacrs VBA sous Excel, B. Jelen & T. Syrstad VBA and macros for Microsoft Excel (ou J. Walkenbach VBA pour Excel 2003 ) On peut se rfrer l ouvrage de C. Albright VBA for modelers, Thomson, 2nd dition

CHAPITRE 1. RFRENCES

Chapitre 2 VBA un langage objet


Depuis Excel 97, un diteur Visual Basic rside sous Excel et permet d crires des programmes complexes. En fait, cette proprit est vraie pour toutes les applications (Word, Excel, Power Point, Access ) de Microsoft Ofce. VBA, Visual Basic for Applications, le langage utilis peut tre vu comme l application d un langage, Visual Basic, un ensemble d applications, une collection d objets, qu il manie. Il ne faut pas confondre a priori le langage Visual Basic, qui est un langage complexe opramment indpendamment, de VBA en gnral, de VBA pour Excel en particulier.

2.1

Le VBE

Pour activer l diteur de Visual Basic depuis Excel, dans la barre de menu Excel : A chage ! Barre d outils ! VisualBasic et on clique ensuite sur l icne Visual Basic Editor (VBE ). La fentre apparat alors par dfaut dispose comme dans la gure 2.2. On peut faire apparatre la fentre des codes en cliquant bouton droit sur This Workbook, situ dans la fentre Explorateur de projets (en haut gauche), puis en cliquant en choisissant dans les menus Insertion puis Module. Dans la fentre de code (en haut droite), on peut crire le code mais aussi des commentaires. Ceux-ci sont le texte qui apparat droite d un guillemet 0 simple . Une organisation classique de la fentre de code du VBE sera de spcier tout d abord les options (par exemple ici l option d expliciter la nature de toutes les variables utilises, la spcication du type de fonctions (procdure ou fonction proprement dite), la dclaration des variables l aide de la variable dim. Ci dessous on construit une fonction simpliste calculant le carr 5

CHAPITRE 2. VBA UN LANGAGE OBJET

Fig. 2.1 La fentre du VBA Basic Editor (VBE)

Fig. 2.2 La fentre du Visual Basic Editor (VBE)

2.1. LE VBE Fig. 2.3 L tat du VBE pour la fonction simple d lvation au carr

d un nombre : Option Explicit Function fnSquare(x As Double) As Double Dim y As Double y=x*x fnSquare=y End Function Dim y As Double est simplement la dclaration que la variable est de type Double, c est--dire un rel. De mme l argument de la fonction fnSquare, x, est galement un rel comme le souligne la dclaration x As Double. Le rsultat de la fonction est lui aussi dclar tant un rel par la syntaxe Function fonction As Double. La dclaration de la nature des variables, des arguments des fonctions ou du rsultat de celles-ci n est nullement obligatoire (en l absence de l option explicit) mais est gnralement conseill.

CHAPITRE 2. VBA UN LANGAGE OBJET Fig. 2.4 L aspect du VBE pour une procdure de tirage alatoire.

Un autre exemple de programme est celui de la procdure reprsente sur la gure 2.4 : L option explicit est encore une fois spcie. La premire ligne, aprs le trait horizon (automatiquement introduit par VBA) spcie la nature de la fonction (une procdure de type Sub) et son nom (procTitrageAlatoire). La ligne suivante est en vert car elle constitue un commentaire (tant introduite par un guillemet). Puis viennent la dclaration des variables : la premire variable, appele nom, est une chane de caractres (et donc son type est string ) ; la seconde variable, appele i, est un entier naturel. Puis on fait pointer l ordinateur vers une feuille appele tirage que l on dsigne comme tant la feuille active, c est--dire celle que l ordinateur doit utiliser par dfaut. A la variable nom est aecte ensuite la chane de caractres tirages (la nature de chane de caractres tant atteste par les guillements). On procde ensuite aux 10 tirages alatoires (par l usage de la boucle For ... Next, en utilisant la fonction alatoire Rnd ) et en stockant chaque rsultat dans la cellule de la ligne i et de la 1re colonne (Cells(i,1)). Puis la plage (Range ) ainsi dnie, on aecte le nom contenu par la variable nom par l criture : Range(\A1 : A10"):N ame = nom

2.2. LES OBJETS DE VISUAL BASIC

En utilisant la fonction Excel (WorksheetFunction ) de la moyenne (Average ), on calcule la valeur moyenne des tirages alatoires stockes dans la plage nom, valeur que l on aecte la cellule de la ligne 12, colonne 1 : Range(\A12"):V alue = W orksheetF unction:Average(Range(nom)) Pour enclencher la procdure, il su t alors de cliquer sur le premier bouton (triangle) du sous-menu :

tandis que le second bouton (double traits) est le bouton d arrt, le carr le bouton de rinitialisation.

2.2

Les objets de Visual Basic

VBA est un langage orient objet. Son code ne part donc pas comme dans les langages procduraux des actions (par exemple l impression) pour pointer vers les objets (par exemple une quation). Au contraire, ce langage dnit d abord des objets pour ensuite soit pointer vers certaines de leurs proprits, soit leurs appliquer des actions. Ainsi l on dsigne l action de conduire une voiture, on n crira pas conduire(voiture), comme par exemple dans un langage comme le basic, mais on crira voiture.conduire o voiture est l objet auquel s applique l action de conduire. De mme si l on dsire obtenir la proprit de la voiture qu est sa couleur on crira en VBA voiture.couleur. Objets, proprits, actions sont les principaux lments que l on manie dans ce langage.

2.2.1

Les objets et les collections

Le premier objet est Excel lui-mme (appel Application ) puis viennent dirents objets souvent organiss en collection et notamment : Objet chier feuille de travail feuille graphique plage (de cellules) cellule fonctions Excel macro complmentaire Nom workbook worksheet chart range cell worksheetFunction addIn Collection workbooks worksheets charts cells addIns

10

CHAPITRE 2. VBA UN LANGAGE OBJET

Remarque 1 Visual Basic ne fait pas de dirence entre minuscule et majuscule. Les noms prcdents peuvent donc tre crits de multiples manires selon que l on recourt ou non aux majuscules. Une collection se dnit comme un ensemble d objets possdant les mmes caractristiques : la collection des chiers (workbooks ), la collection des feuilles de travail (worksheets ), la collection des graphiques (charts ), etc. La rgle (comportant des exceptions) est que les collections se distinguent de leurs lments par le s par lequel elles se terminent. L lment d une collection peut tre notamment identie soit par un nombre ou par un nom. Ainsi les feuilles de travail sont la fois numrotes et ont un nom. Si l on veut pointer vers la 10e feuille du classeur dont le nom est stat , on peut indiremment taper : worksheets(10) ou worksheets(stat ) les guillemets tant ncessaires pour que stat soit trait comme une chane de caractres et non comme une variable.

2.2.2

La hirarchie des objets

Les objets sont organiss hirarchiquement : au sommet rside Excel elle-mme, l objet Application ; puis vient notamment la collection des classeurs (workbooks ) ; les feuilles de travail des classeurs (worksheets ), la collection des graphiques (charts ) ; .... Les plages de cellules (range ) constituent l exception selon laquelle chaque objet correspond une collection. Par contre la cellule (cell ) correspond la collection des cellules (cells ). Le point . permet de spcier la hirarchie des objets. Ainsi si l on veut faire pointer l ordinateur vers la plage A1 :B10de la feuille appele travaildu classeur nomm essai , on peut crire : Application.Workbooks(essai ).Worksheets(travail ).Range(A1 :B10 ) Par dfaut, l ordinateur a une hirarchie dnie par dfaut. Elle correspond au dernier chier utilis sous Excel, la dernire feuille active, etc. Aussi c est cette hirarchie qui sera utilise si on utilise une spcication incomplte, par exemple si on ne spcie dans notre exemple que la plage en crivant seulement Range(A1 :B10 ). Si le dernier chier activ, la dernire feuille utilise sont bien respectivement essaiet travail , cela n aura donc pas de

2.3. LE MODLE OBJET D EXCEL

11

consquence. Par contre si cela n est pas le cas, le programmeur aura des surprises ! Il est donc important d tre prudent dans les racourcis d criture. On pourra toujours faire l conomie du premier terme et donc crire seulement : Workbooks(essai ).Worksheets(travail ).Range(A1 :B10 ) Mais pour les autres niveaux, tout dpend encore une fois des objets actifs sous Excel. Ainsi si chier essai est le chier par dfaut (peut-tre parce qu il a t antrieurement activ par une commande : Workbooks(essai ).Activate) alors la chane se rduira : Worksheets(travail ).Range(A1 :B10 ) Remarque 2 Le point est galement utilis non seulement pour passer d un objet vers un de ses subordonns mais aussi pour pointer vers une proprit ou vers une action. Ainsi, si l on veut colorier la plage A1 :B10 en gris, on crira : Range(A1 :B10 ).Interior.Color=vbGrey o Interior est l intrieur des cellules de la plage (un objet donc), Color est videmment une proprit de l intrieur, vbGrey est la constante dsignant sous Visual Basic le gris (ou plus exactement une manire de dnir un gris sous VBA). Si l on veut aussi supprimer la feuille travail , on utilisera aussi la syntaxe suivante : Worksheets(travail ).Delete Dans ce dernier exemple, comme dans le prcdent, on n a pas explicit toute la hirarchie des objets en supposant que les objets suprieurs taient par dfaut correctement dnis - ce qui assure par exemple dans notre dernier exemple que notre criture simplie est quivalente Application.Workbooks(essai ).Worksheets(travail ).Delete

2.3

Le modle objet d Excel

A chaque application d O ce (et O ce lui-mme) correspond un modle objet, hirarchie de collections d objets. Comme ce modle objet dire par exemple entre Excel et Word, matriser VBA pour Excel n assure pas de pouvoir sans di cult programmer VBA sous Word, le langage commun s appliquant des objets parfois dirents. Pour avoir un aperu du modle objet de VBA pour Excel, il su t dans l diteur de VBA de solliciter l aide

12

CHAPITRE 2. VBA UN LANGAGE OBJET

Fig. 2.5 Le modle objet d Excel

2.3. LE MODLE OBJET D EXCEL

13

Fig. 2.6 Le modle objet d Excel (suite)

14

CHAPITRE 2. VBA UN LANGAGE OBJET

Fig. 2.7 Le modle objet d Excel (n)

2.3. LE MODLE OBJET D EXCEL Fig. 2.8 L explorateur d objets

15

en y tapant Objets Microsoft Excel. On y obtient l aperu reprsent sur les gures 2.5, 2.6 et 2.7. On retrouve sur ces graphiques certains objets dj voqus ct de nombreux autres. Le modle objet d Excel est en eet riche et complexe. Connatre tous ces objets est naturellement impossible. D autant que d une version l autre, le modle s enrichit progressivement. Heureusement, sous le VBE, on a accs un outil fort utile : l explorateur d objets que l on peut obtenir soit via le menu Edition, soit en tapant F2. L explorateur d objets permet d avoir accs l ensemble des libraries simultanment ou d en cibler pour limiter la masse des objets explorer. Les principales librairies sont celles d Excel et de VBA. Pour avoir de l aide sur une fonction (par exemple Abs dans la gure ci-dessous), il su t alors de pointer sur la fonction choisie, puis cliquer sur l icne de l aide (le point d intrrogation jaune) Une autre source d information trs utile est celle de l Info Express Automatique. Pour l objet, sous le VBE, il faut aller dans le menu Outils ! Options et cocher Info Express Automatique (cf gure 2.10).

16

CHAPITRE 2. VBA UN LANGAGE OBJET

Fig. 2.9 L aide sous l explorateur d objets

2.4. PROPRITS ET MTHODES Fig. 2.10 Le menu des options d information du VBE

17

2.4

Proprits et mthodes

Les proprits d un objet font rfrences ses direntes caractristiques. Par exemple pour une cellule : sa couleur, sa hauteur, sa largeur, sa police, etc. On peut : modier les proprits d un objet en utilisant une syntaxe de la forme Expression.Proprit=Valeur Par exemple si l on veut que la valeur de la cellule A1 soit 150, on utilisera l instruction suivante Cells(1,1).Value=150 ou de manire quivalente : Range(A1 ).Value=150 interroger un objet pour rcuprer sa proprit, par exemple sa valeur ; ainsi on pourra stocker la valeur de la valeur de la cellule A1 dans une variable Contenu_A1 en tapant l instruction suivante Contenu_A1=Range(A1 ).Value

18

CHAPITRE 2. VBA UN LANGAGE OBJET

Les mthodes d un objet sont les actions que l on peut entreprendre sur un objet, par exemple le copier, le couper, le dplacer, le slectionner, etc. De manire gnrale l instruction est alors de la forme : Expression.Mthode Ainsi, si l on veut copier le contenu la cellule A1, on crira par exemple : Range(A1 ).Copy Ou si l on veut la transfrer son contenu la cellule A2 on pourra crire : Range(A1 ).Cut Destination :=Range(A2 ) Si l on veut eacer le contenu d une cellule ou d une place on peut utiliser l instruction ClearContents : Range(A1 ).ClearContents On peut aussi ajouter des lments la collection des feuilles (Worksheets) ou celle des classeurs ouverts (Workbooks), les fermer, les sauver l aide des mthodes Add, Close, Save par des instructions du type : W orksheets:Add W orkbooks:Add W orkbooks:Close W orkbooks:Save On peut aussi bouger la position d une feuille l intrieur du classeur, notamment aprs une autre feuille, soit en indiquant les indices des feuilles, soit leur noms par des instructions du type : Worksheets(1).Move After :=Worksheets(3)

Worksheets(feuille1 ).Move After :=Worksheets(feuille3 )

Chapitre 3 Premiers pas


3.1 L enregistreur de macros

Excel comprend un enregistreur de macros susceptible d enregistrer la plupart des actions que l on excute sous Excel et donc de gnrer des programmes. Pour dclencher l enregistreur de macros, on excute la squence suivante dans le menu Excel : Outils ! Macro ! Nouvelle Macro La fentre de l enregistreur (gure 3.1) permet de choisir le nom de la macro, le chier dans lequel elle va rsider (le chier courant, un autre classeur ou un classeur cach appel classeur des macros personnelles ). Enn, la fentre permet de dcrire la procdure enregistre. Cette action cre si ncessaire un module o une procdure de type Sub est enregistre. Dans l interface Excel, vient se placer un bouton d enregistrement de la macro sur lequel on doit cliquer pour arrter le processus. L enregistreur de macros permet donc aux novices de VBA de disposer de procdures qu il peuvent rutiliser plus tard, dans le chier voire dans un autre chier. En eet, il est possible d enregister la macro dans le classeur cach dit de macros personnelles (cf gure 3.1). Ce chier est disponible tout instant ds lors qu Excel est ouvert et ses procdures peuvent donc tre sollicites partir de n importe quel autre chier. A ces multiples avantages de l enregistreur correspondent des inconvnients notoires souvent mis en avant par les programmeurs. Le code gnr par cet outil est en eet souvent excessif par la taille. En eet, si par exemple, on change une proprit du format des cellules (par exemple la couleur de la bordure), l enregisteur dtaille l ensemble des proprits de celles-ci y compris celles qui n ont pas t aectes. 19

20

CHAPITRE 3. PREMIERS PAS

Fig. 3.1 La fentre de l enregistreur de macros

Fig. 3.2 Le bouton d arrt de l enregistrement de la macro

3.1. L ENREGISTREUR DE MACROS

21

Ainsi le code gnr pour une modication de la police de caractres pour pour qu elle soit du type Times New Roman, sa taille 12 points, en gras, et en rouge : With selection.Font .Name=Roman .Size=12 .Strikethrough=False .SubScript=False .Outlinefront=False .Sahdow=False .Underline=xlNone .ColorIndex=xlAutomatic End With With Selection.Font .Name=Times New Roman .Size=12 .Strikethrough=False .SubScript=False .Outlinefront=False .Shadow=False .Underline=xlNone .ColorIndex=xlAutomatic End With Selection.Font.Bold=True Selection.Font.ColorIndex=3 Ceci rpliqu sur des dizaines d actions entrane naturellement une explosion du nombre de lignes de code. Aussi est-il souvent conseill si l on veut utiliser l enregistreur de nettoyer le code des lignes inutiles avant de l enregistrer dnitivement. Ainsi dans notre exemple, le code se simplie drastiquement : With selection.Font .Name=Times New Roman .Size=12 .Bold=True .ColorIndex=3 End With Remarque 3 Dans le code ci-dessus, pour viter de rcrire 4 fois selection.Font, on utilise la construction with. Avec celle-ci, on spcie d abord l objet ou la proprit que l on veut manipuler rptitivement (ici selection.font),

22

CHAPITRE 3. PREMIERS PAS

puis aux lignes suivantes on prcise les proprits ou actions (aprsl oprateur . ). La n de la construction est signale par End With . Cette construction est trs souvent utile notamment dans la mise en forme des feuilles Excel. Cependant mme pour les dveloppeurs, l enregistreur de macros est utile, notamment comme systme d aide. Certains objets (comme par exemple les graphiques) sont en eet trs complexes par leurs options. Plutt que s astreindre connatre tous ces lments, il est souvent plus facile de mettre en place manuellement un objet en dclenchant l enregisteur, puis de retrouver l ensemble des proprits de l objet recherch (le graphique en l occurence), de copier le code obtenue en en faisant une correction.

3.2

Types de variables et procdures

VBA pour Excel utilise non seulement les ressources d Excel (en maniant les cellules notamment) mais peut galement, comme la plupart des logiciels, manier des variables qui lui sont propres pour eectuer des oprations sur celles-ci.

3.2.1

Les principaux types de variables

Outre les types usuels (chanes de caractre, entiers naturels, rels, etc.), VBA utilise aussi un type de variables extrmement souple : les variables de type variant. Naturellement la contrepartie d une plus grande souplesse de la variable est l espace qu elle occupe dans la mmoire de l ordinateur. Dclarer une variable permet de dnir les actions et oprations qu elle est susceptible de subir : impossible par exemple d eectuer des oprations algbriques (addition, multiplication, etc.) sur des variables dclares comme des chanes de caractres. Dclarer une variable permet aussi d viter les doublons. Les principaux types de variables utilises sont donc les suivants : String - chanes de caractres ; Integer - entiers relatifs compris entre 32 768 et 32 767 ; une variable de type Integer occupe 2 octets de mmoire ; Long - entiers relatifs compris entre 2 147 483 648 et 2 147 483 647 ; en contrepartie, elle occupe 4 octets de mmoire ; Boolean - variables de type booleenne, prenant comme valeurs soit T rue, soit F alse ; Double - variables relles virgule ottante double prcision dont les valeurs peuvent aller de 1; 79769313486231E 308 et 4; 94065645841247E 324 pour les nombres ngatifs et entre 4; 94065645841247E 324 et

3.2. TYPES DE VARIABLES ET PROCDURES

23

1; 79769313486231E 308 pour les positifs ; en mmoire une variable de type Double occupe 8 octets de mmoire ; Variant - Variant est un type de donnes spcial pouvant contenir des donnes de toutes sortes ; sa contrepartie est d tre la variable la plus coteuse en mmoire. Sous VBA, la dclaration du type des variables n est pas obligatoire : en l absence de toute dclaration, la variable est rpute en eet de type variant (et dans ce cas tout se passe comme si l ordinateur dtectait si la variable est numrique, boolenne, ou autres). Evidemment ceci est coteux en mmoire. Nanmoins, l explosion de la puissance des ordinateurs a considrablement rduit cet inconvnient. Aujourd hui l intrt de dclarer une variable rside essentiellement dans le fait qu elle permet d viter des erreurs. Pour dclarer les variables, la commande la plus communment utilise est Dim (pour dimension). Pour que la variable x soit dclare comme un entier relatif, on crira ainsi : Dim x As Integer Si l on a plusieurs variables du mme type dclarer, par exemple x et y, on peut naturellement soit les lister les unes derrires les autres (avec un saut de ligne) : Dim x As Integer Dim y As Integer

Evidemment la tentation est alors de racourcir la dclaration. Par exemple en tapant : Dim x, y As Integer Mais dans cette criture, seule y sera dclare comme un Integer, x sera considre comme non dclare et donc assimile une variable de type variant. La seule dclaration en ligne correcte suppose l utilisation de la dclaration As pour chacune des variables : Dim x As Integer, y As Integer

3.2.2

Les procdures

Les procdures principales utilises sous Excel sont de deux types : les procdures de type Sub les procdures de type Function.

24

CHAPITRE 3. PREMIERS PAS

Chaque procdure est construite de la mme manire avec une dclaration du type, du nom (et des arguments possibles), et une n marque par la prsence des dclarations End Sub ou End Function. Ainsi la procdure Sub aura la structure suivante :

Sub nom(argument 1 As type de variable, ...) < declaration des variables avec Dim > < lignes d0 instruction > End Sub

La dclaration d arguments est facultative. Ainsi dans la procdure ci-dessous, aucune variable n est dclare. La procdure se contente de prendre la valeur (suppose numrique) des cellules A1 et A2, de les multiplier et de reporter le rsultat dans la cellule B1 : Sub procMult() Dim x As Double, y As Double, z As Double x=Range(A1).Value y=Range(A2).Value z=x*y Range(B1).Value=z End Sub On remarque dans cette procdure simple, la dclaration squentielle des variables x, y, z, puis l aectation x et y de la valeur des deux cellules A1 et A2. z est bien obtenue par le produit (symbole *) des deux variables. Enn, on aecte la cellule B1 la valeur de z. Naturellement, cette programmation n est ni trs rapide, ni trs conome en mmoire. On aurait pu trs directement crire : Sub procMult() Range(B1).Value=Range(A1).Value*Range(B1).Value End Sub Les procdures de type Function sont trs similaires aux procdures Sub dans leurs constructions. Elles n en dirent que par le fait qu elles sont supposs retourns directement un rsultat (comme une fonction mathmatique). En consquence, le rsultat de la fonction elle-mme peut avoir un

3.2. TYPES DE VARIABLES ET PROCDURES

25

type et la dernire ligne est l aectation au nom de la fonction d un rsultat : Function nom(argument 1 As type de variable, ...) As type de variable < declaration des variables avec Dim > < lignes d0 instruction > nom = < resultat > End Functiion Ainsi la fonction fnMult combinant deux rels x et y pour en faire le produit s crira par exemple : Function fnMult(x As Double, y As Double) As Double Dim z As Double z=x*y fnMult=z End Function La fonction fnMult utilise une variable intermdiaire (de type Double ) pour enregistrer le rsultat de la multiplication des deux variables. Le rsultat est dclar de type Double comme le montre la premire ligne. Evidemment, comme pour la procdure plus haut, il est possible de faire l conomie des variables intermdiaires en crivant directement : Function fnMult(x As Double, y As Double) As Double fnMult=x*y End Function

3.2.3

Les variables objet

A ct des variables prcdentes, les objets du modle Excel (notamment les classeurs, les feuilles de travail et les graphiques, les plages de cellules) peuvent tre dclars comme des variables. La dclaration se fait aussi avec Dim. Ainsi, si l on crit : Dim ws As Worksheet La variable ws sera interprt comme tant un objet worksheet. Si l on veut que ws renvoie une feuille particulire (par exemple une feuille dont le nom est calcul ) alors on pourra raliser cette aectation par la commande suivante :

26

CHAPITRE 3. PREMIERS PAS Set ws=Worksheets(calcul)

La mme procdure (avec Dim puis Set ) est galement utilisable pour les plages (range ), les graphiques (chart ), les classeurs (workbook ). Ceci est notamment trs utile lorsque l on manie des feuilles appartenant des chiers dirents en allgeant considrablement l criture.

3.2.4

Les constantes et les constantes pr-dnies

Au cours de l excution d un programme, la valeur d une variable peut tre rednie. Si l on veut maintenir constante la valeur d un paramtre, il est alors souhaitable de la dnir comme une constante. Elle se dclare l aide de la dclaration Const. Ainsi par exemple si le taux sans risque du march est suppos avoir une valeur constante gale 2%, on pourra au dbut du programme crire par exemple : Cst riskFree=0.02 Dans l excution du programme il sera alors impossible d excuter une nouvelle aectation de valeur la variable riskFree. Il existe aussi des constantes pr-dnies. Selon qu elles sont des constantes d Excel, de VBA ou d O ce, elles comportent le prxe xl, vb ou mso. Ainsi, sous VBA, les couleurs sont dnies par les constantes vbRed, vbGreen, vbGrey, etc. . Sous Excel, les directions des dplacements verticaux vers le haut ou vers le bas sont dnies par les constantes xlUp et xlDown, tandis que les directions horizontales vers la gauche et vers la droite sont dnies par les constantes xlToLeft et xlToRight.

3.3

Outils d interaction

Dans l excution d un programme, il est parfois ncessaire que l utilisateur xe la valeur de certains paramtres. Pour raliser cette interaction entre l ordinateur et l utilisateur, Visual Basic sous Excel met la disposition plusieurs outils d interaction dont les deux plus simples sont : la MsgBox ; l InputBox.

3.3.1

La MsgBox

MsgBox est une boite de dialogue qui permet en rponse une question d apporter direntes rponses codes (oui, non, etc.). Les arguments sous VBA de la commande MsgBox sont notamment :

3.3. OUTILS D INTERACTION le message lui-mme (seul argument obligatoire) ; les boutons a cher ; le titre de la bote de dialogue ; La disposition pour ces trois lments est :

27

MsgBox(message,[boutons],[titre],[autresvariables]) o les variables entre crochets sont optionnelles. Le message est une variable de type string (chane de caractres) qui peut simplement tre une question entre guillemets. Les boutons sont codis et peuvent notamment prendre les valeurs suivantes :1 vbYesOnly (la bote de dialogue comprend un seul bouton) ; vbYesNo (la bote de dialogue comprend deux boutons oui et non) ; vbYesNoCancel (la bote de dialogue comprend trois boutons oui, non et annulation). Le titre est une variable de type string prciser. Les direntes apparences de la bote de dialogue selon les arguments de MsgBox sont : MsgBox(message )

MsgBox(message ,slection )

Se rfrer l aide de VBA pour avoir plus d information sur MsgBox.

28

CHAPITRE 3. PREMIERS PAS MsgBox(message ,vbYesNo,slection )

MsgBox(message ,vbYesNoCancel,slection )

Lorsque les boutons comportent un choix, i.e. par exemple pour vbYesNo ou vbYesNoCancel, il est ncessaire de stocker la rponse dans un objet (soit une variable de type string, soit de type variant ). La valeur stocke sera alors soit vbYes, soit vbNo, soit vbCancel et on peut alors utiliser cette valeur pour construire une boucle de contrle conditionnellement cette valeur dans le programme.

3.3.2

L InputBox

MsgBox permet seulement des rponses codes binaires (oui/non) ou ternaires (oui/non/annulation). Parfois il est ncessaire de renvoyer une rponse qui soit un nombre ou un mot. Pour donner ces rponses, on peut utiliser l autre bote de dialogue qu est l inputBox (voir l aide de VBA). Un exemple utilisant l InputBox est celui reprsent sur la gure cidessous :

3.4. FONCTIONS EXCEL DANS VBA

29

L input comporte un titre ( nom de la feuille ), un contenu ( Entrez le nom de la feuille et que vous voulez activer ), une zone o l on peut taper la rponse souhaite, enn deux boutons pour terminer l utilisation de l inputBox (avec les deux boutons OK, annuler). Mme si d autres arguments peuvent tre dnis, ceux cits peuvent su re pour la plupart des applications. Pour obtenir l inputBox de la feuille, on a tap : q=InputBox( Entrez le nom de la feuille que vous voulez activer , nom de la feuille ) q est la variable dans laquelle on va stocker la rponse. Elle peut tre soit une variable de type variant, soit selon la nature de la rponse une variable de type string (pour les chanes de caractre), de type integer, double pour les nombres, etc.

3.4

Fonctions Excel dans VBA

VBA comporte des fonctions nancires et mathmatiques, etc dont on peut trouver la liste dans l explorateur d objets, l intrieur de la librairie VBA. Nanmoins comme le montre la gure 3.3 pour les fonctions mathmatiques, le nombre de fonctions peut tre trs modeste. Ceci est videmment la consquence du fait que l on a dj notre disposition l ensemble des fonctions mathmatiques, statistiques, nancires, etc. d Excel. Pour faire appel ces fonctions sous VBA, il convient soit de taper Application.WorksheetFunction ou plus simplement WorksheetFunction en appliquant ceci soit un nombre, soit une variable, soit une plage. Ainsi pour calculer la racine carre de 25, on pourra si l on utilise la fonction Racine (Sqrt en anglais) d Excel soit taper directement : WorksheetFunction.Sqrt(25) soit si 25 est par exemple la valeur de la cellule B 4 : WorksheetFunction.Sqrt(Range(B4)) ou encore : WorksheetFunction.Sqrt(Cells(4,2)) soit si 25 est la valeur aecte une variable de type Double appele x : WorksheetFunction.Sqrt(x)

30

CHAPITRE 3. PREMIERS PAS

Fig. 3.3 La collection des fonctions mathmatiques de VBA dans l explorateur d objets

3.5
3.5.1

Quelques astuces
Mise en forme du projet VBA

Les programmes raliss en VBA, dans le cadre de projets, ne sont pas ncessairement courts. La gure 3.4 donne ainsi un aperu sur les fentres du VBE d un projet visant rcuprer les informations relatives aux mutual funds amricains sous Yahoo ! Finance. Comme on peut le voir dans la fentre de l explorateur de projet (en haut gauche VBA project ), le classeur mutualFundsPerf.xls comporte 7 feuilles de travail dont les noms sont requete, intro, etc.. Le rpertoire des modules comporte lui-mme 8 rpertoires : contenu, fnProcDivers, etc. . Lorsque le projet devient su samment important il est alors conseill tout d abord de multiplier les commentaires au sein de chaque procdure, comme le montre la gure 3.5, pour rappeler la version du programme et rendre aussi lisible que possible les direntes tapes du programme. Ensuite il est souvent souhaitable d expliciter les direntes parties de chaque programme, voire de sparer le programme en plusieurs procdures. Enn, si le projet comporte de multiples procdures, il est conseill de les

3.5. QUELQUES ASTUCES

31

Fig. 3.4 Un exemple de projet comportant plusieurs modules et plusieurs procdures.

32

CHAPITRE 3. PREMIERS PAS Fig. 3.5 Un exemple de commentaires au sein d un programme.

lister dans un module (appel par exemple contenu) en y prcisant l objet de chaque procdure et sa place dans la hirarchie du programme, comme le montre la gure 3.6.

3.5.2

L excution du programme

La vitesse d excution n est pas un des points forts de VBA pour Excel compar d autres logiciels que l on peut utilis en nance (par exemple Matlab, Gauss ). Encore une fois, l intrt de ce logiciel vient de la facilit de son langage et surtout de l utilisation quasi-universelle du tableur Excel. Pour grer la lenteur d excution de VBA, au surplus, il est possible d augmenter substantiellement celle-ci en empchant l incessant rafraichissement de l cran d Excel par la commande : Application.ScreenUpdating=False laquelle correspondra la n du programme la commande inverse : Application.ScreenUpdating=True Comme ce gel de l image peut enlever l utilisateur des repres au cours de l excution, il convient parfois de susbstituer l image des messages apparaissant sur la barre de statut d Excel en utilisant des syntaxes du genre :

3.5. QUELQUES ASTUCES

33

Fig. 3.6 Un exemple de module dtaillant les fonctions et procdures d un projet

34

CHAPITRE 3. PREMIERS PAS Fig. 3.7 Une fentre d erreur

Application.StatusBar=dbut de la premire partie du programme Il est ncessaire la n de l excution de rendre la main l ordinateur sur la barre d tat en crivant la n du programme : Application.StatusBar=False Enn, pour grer la possible absence de la barre d tat l cran, il peut tre utile de la faire apparatre en codant au dbut du programme : Application.DisplayStatusBar=True

3.5.3

Debuggage

Sauf miracle, la rdaction de chaque programme comportera des erreurs qui provoqueront des erreurs lors des premires excutions, et l a chage d agaantes fentres comme celle de la gure 3.7. Comme on peut le voir sur cet exemple, elle ore la possibilit d un debugage. L activation de cette option conduira l ordinateur faire pointer une che jaune sur la ligne comportant l erreur (gure 3.8). Si l on pointe sur les lments de cette ligne, la bulle information donnera alors soit la valeur des lments, soit l erreur l origine du bug. Ainsi dans l exemple, la variable y est un vecteur colonne comportant 5 composantes alors que la boucle For...Next itre sur 6 composantes. Aussi pour i = 6, il est impossible d aecter sin(22 i=56) au vecteur y . D o le message : <L indice n appartient la slection>, qui tait galement le message de la fentre d erreur initiale (mais sans avoir l information qu elle s appliquait la variable y .

3.5. QUELQUES ASTUCES

35

Fig. 3.8 Un exemple d information lors de la procdure de debuggage

Pour acclrer la dtection des bugs, il est cependant conseill avant tout lancement du programme de procder un debugage. Le menu de debugage (gure 3.9) ore la possibilit entre plusieurs options. Le debugage pas pas dtaill permet d itrer le programme ligne par ligne. En utilisant le racourci de la touche F8, on passe ainsi de ligne en ligne, en vriant que le code s excute correctement ou non. Si le programme est trop long, ou s il comporte des boucles longues, il convient alors d introduire des points d arrt qui permettront l excution normale jusqu au point d arrt. Ainsi sur la gure 3.10, en cliquant sur le bord de la fentre de code au niveau du dbut de la seconde boucle, on a introduit un point d arrt (en rouge). Si l on dclenche normalement le programme il s excutera (sauf prsence d erreurs) jusqu ce point puis s arrtera on pourra alors soit le relancer normalement, soit en cliquant la touche F8 passer en debugage au pas par pas dtaill.

36

CHAPITRE 3. PREMIERS PAS

Fig. 3.9 Le menu de debugage du VBE

Fig. 3.10 Un exemple de point d arrt