Support de Cours VBA Excel

download Support de Cours VBA Excel

of 42

description

Un support de cours VBA Excel

Transcript of Support de Cours VBA Excel

DELTALOG

MACROS ET PROGRAMMATION VBA SOUS EXCEL

Macros et Programmation VBA sous Excel

SommaireI. Introduction A EXCEL VBA ........................................................................................................................ 5 II. L'enregistreur DE Macro ............................................................................................................................ 5 II.1. Enregistrer une Macro ......................................................................................................................... 5 II.2. Excuter une Macro .............................................................................................................................. 6 II.3. Atelier .................................................................................................................................................... 6 III. Lenvironnement Visual Basic Editor ...................................................................................................... 7 III.1 Lexplorateur de projets ....................................................................................................................... 7 III.2 La fentre proprits............................................................................................................................ 8 III.3 La fentre Code .................................................................................................................................... 8 III.4 La fentre Excution ............................................................................................................................ 9 III.5 La fentre Espions ............................................................................................................................... 9 III.6 Lexplorateur dobjets ......................................................................................................................... 10 III.7 La bote outis ................................................................................................................................... 10 IV.Le langage VBA ......................................................................................................................................... 11 IV.1. Les variables et les constantes ......................................................................................................... 11 IV.1.1 Dclaration de variables .............................................................................................................. 11 IV.1.2 Les types des variables ................................................................................................................ 11 IV.1.3 Dfinition dun type utilisateur .................................................................................................. 13 IV.1.4 La porte des variables ................................................................................................................ 13 IV.2 La dclaration des constantes............................................................................................................ 14 IV.3 L'instruction With...End With ........................................................................................................... 14 IV.4. Les noncs conditionnels ................................................................................................................. 15 IV.4.1 L'instruction If crite sur une seule ligne .................................................................................. 15 IV.4.2 Le bloc If ....................................................................................................................................... 15 IV.5 Les noncs itratifs ........................................................................................................................... 16 IV.5.1 Utilisation d'instructions Do...Loop ............................................................................................ 16 IV.5.2 La boucle For...Next ..................................................................................................................... 17 IV.5.3 Linstruction Exit ......................................................................................................................... 17 IV.6 Travailler avec les tableaux ............................................................................................................... 18 IV.6.1 Dclaration dun tableau ............................................................................................................. 18 IV.6.2 Laccs aux lments du tableau................................................................................................. 18 IV.7 Les Entres et Sorties Standards ...................................................................................................... 18 IV.7.1 La fonction MsgBox ..................................................................................................................... 18 IV.7.2 La Fonction InputBox .................................................................................................................. 19

Conseil et Ingnierie des systmes dinformation

2

Macros et Programmation VBA sous ExcelIV.8 Procdures et Fonctions ..................................................................................................................... 20 IV.8.1 Les Fonctions ............................................................................................................................... 20 IV.8.2 Les procdures (Sub) ................................................................................................................... 20 IV.8.3 Utiliser le VBE pour insrer une procdure/fonction ................................................................ 20 V. Le modle Objet dExcel ............................................................................................................................ 21 V.1 Manipulation dobjets .......................................................................................................................... 23 V.1.1 Cration dun objet ........................................................................................................................ 23 IV.1.2 Le scope dun objet ....................................................................................................................... 23 V.2 La base, l'objet Application ................................................................................................................. 24 V.2.1 Evnements ................................................................................................................................... 24 V.2.2 Proprits ....................................................................................................................................... 24 V.2.3 Mthodes ........................................................................................................................................ 25 V.3 La collection WorkBooks ..................................................................................................................... 26 V.4 Lobjet workbook (classeur) ................................................................................................................. 26 V.4.1 Mthodes de lobjet Workbook ...................................................................................................... 26 V.4.2 Evnements de lobjet Workbook.................................................................................................. 27 V.5 La collection Sheets (Les Feuilles) ...................................................................................................... 27 V.6 La collection Worksheets (Feuilles de calculs) ................................................................................... 27 V.6.1 Mthodes de la collection Worksheets ......................................................................................... 27 V.7 Feuille de calculs (WorkSheet) ............................................................................................................ 28 V.7.1 Proprits de lobjet Worksheet .................................................................................................... 28 V.8 Lobjet Range (Plage ou cellule) .......................................................................................................... 29 V.8.1 Proprits de lobjet Range ........................................................................................................... 29 V.8.2 Mthodes de lobjet Range ............................................................................................................ 31 V.9 Conclusion ............................................................................................................................................ 32 VI. Dbogage et gestion des erreurs.............................................................................................................. 33 VI.1 Les erreurs de compilation et d'excution ........................................................................................ 33 VI.2 Les erreurs logiques ........................................................................................................................... 33 VI.3 Exemple pratique de dbogage .......................................................................................................... 34 VI.4 Gestion des Erreurs ............................................................................................................................ 35 VII. Les objets Userform ................................................................................................................................ 37 VII.1 Crer un Objet UserForm ................................................................................................................. 37 VII.2 Afficher et fermer un objet UserForm ............................................................................................. 39 VII.2.1 Afficher un objet UserForm ....................................................................................................... 39 VII.2.2 Fermer ou masquer un objet UserForm ................................................................................... 40 VII.3 Associer du Code Un Objet UserForm .......................................................................................... 40

Conseil et Ingnierie des systmes dinformation

3

Macros et Programmation VBA sous ExcelListe des Figures ............................................................................................................................................ 42 Liste des Tableaux ......................................................................................................................................... 42

Conseil et Ingnierie des systmes dinformation

4

Macros et Programmation VBA sous Excel I. INTRODUCTION A EXCEL VBAExcel VBA (Visual Basic pour Application) est un langage de programmation permettant d'utiliser du code Visual Basic pour excuter les nombreuses fonctionnalits de l 'application EXCEL. Un programme crit en VBA est souvent appel une macro. Les macros permettent notamment d'automatiser des tches rptitives ralises sous EXCEL. Elles peuvent aussi tre utilises pour crer des botes de dialogue afin de rendre une application dveloppe sous EXCEL plus conviviale. Une macro peut tre cre en utilisant l'enregistreur de macros , qui ne ncessite aucune connaissance du langage VBA. Cependant une macro ainsi cre ne s'excutera que sur un ensemble de cellules donnes et le code produit ne sera pas toujours trs efficace. Pour pouvoir crer des macros propres ses besoins, efficaces et interactives, il faut apprendre programmer en VBA.

II. L'ENREGISTREUR DE MACROL'enregistreur de macro permet d'crire du code VBA partir d'oprations effectues manuellement sous EXCEL. II.1. ENREGISTRER UNE MACRO On va crer une macro qui va qui crit dans la cellule A1 le texte "DELTALOG" en caractres gras 1. Ouvrez un nouveau classeur et enregistrez-le sous le nom Test-Macro.xlsx. 2. Les cellules dans une macro sont identifies laide dune lettre (colonne) suivie dun chiffre (ligne), comme par exemple la cellule A1. 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 enregistre la macro. Si tel nest pas le cas, cliquez sur le bouton office et choisissez la commande option Excel. Et dans Formules, dcochez loption style de rfrence L1C1 . 3. Positionner le curseur sur une autre cellule que la cellule A1 de la feuille de calcul FEUIL1. 4. Dans longlet Dveloppeur , choisissez la commande enregistrer une nouvelle macro . 5. Tapez DELTALOG dans la zone Nom de macro et d dans la zone raccourcis clavier . 6. Dans la zone Enregistrer la macro dans , slectionner loption ce classeur . 7. Dans la zone Description , saisissez une description de ce que la macro est cense faire. 8. Cliquez sur le bouton OK Remarque: La zone ENREGISTRER LA MACRO DANS permet de dterminer l'endroit o la macro DELTALOG sera enregistre. Il existe trois options : Avec 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 d'Excel et ses macros sont donc disponibles dans tous les classeurs ouverts. La commande Fentre

Afficher permet d'afficher ce classeur et la commande Fentre Masquer de le masquer. L'option Nouveau classeur permet d'enregistrer la macro dans un nouveau classeur. L'option Ce classeur permet d'enregistrer la macro dans le classeur actif.

Conseil et Ingnierie des systmes dinformation

5

Macros et Programmation VBA sous Excel9. La commande Arrter lenregistrement apparat dans le ruban, onglet dveloppeur , ce qui marque le dbut de l'enregistrement. Par dfaut, l'enregistrement d'une macro s'effectue en utilisant des rfrences absolues aux cellules. 10. Positionner le curseur sur la cellule

A1, taper le texte "DELTALOG" et validez. Revenez dans

la cellule A1 et slectionner le style gras. 11. Arrter l'enregistrement en cliquant sur le carr bleu du ruban. Il ne faut jamais oublier darrter lenregistrement dune macro. II.2. EXCUTER UNE MACRO 1. Effacer le contenu de la cellule A1. 2. Positionner le curseur sur une autre cellule que la cellule

A1

de la feuille de calcul

FEUIL1.3. Dans longlet dveloppeur, cliquer sur la

commande

slectionner DELTALOG et appuyer sur excuter .4. Vous pouvez galement excuter la macro en utilisant le raccourci que vous avez dfini lors de la cration de la macro. 5. Vrifier que la chane de caractres DELTALOG sinsre dans la cellule A1.

macro,

II.3. ATELIER Crer une macro MACROMOIS qui crit les noms de mois Janvier, Fvrier et Mars en colonne partir de la cellule active. Utiliser l'enregistreur de macro avec rfrence relative aux cellules.

Conseil et Ingnierie des systmes dinformation

6

Macros et Programmation VBA sous Excel III. LENVIRONNEMENT VISUAL BASIC EDITORNous avons vu comment crer une macro l'aide de l'enregistreur de macro. Nous allons maintenant examiner le code VBA produit. Pour ce faire, il faut utiliser l'diteur de Visual Basic, Visual Basic Editor (VBE), qui s'excute dans une fentre diffrente de celle d'E xcel. Ouvrir VBE en cliquant sur la commande Visual Basic de longlet dveloppeur .

Figure 1 Lenvironnement VBE

III.1 LEXPLORATEUR DE PRO JETS A chaque classeur EXCEL ouvert est associ un projet VBA. L'explorateur de projets affiche une liste hirarchise des diffrents projets VBA associs aux classeurs EXCEL ouverts. Un projet VBA associ un classeur regroupe les lments du classeur, comme ses feuilles de calcul ou des botes de dialogue, et les procdures et les fonctions associes au classeur et stockes dans un ou plusieurs modules de code. Le projet VBA associ au classeur TEST-MACRO.XLS est compos de deux dossiers : le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au projet : le classeur TEST-MACRO.XLS (THISWORKBOOK) et ses feuilles de calcul FEUILI, FEUIL2 et FEUIL3 ; le dossier MODULES qui contient les modules de code du projet : le module MODULEI qui contient la macro DELTALOG .

Conseil et Ingnierie des systmes dinformation

7

Macros et Programmation VBA sous ExcelIII.2 LA FENETRE PROPRIETES A chaque fois que vous slectionnez un module, une feuille ou des contrles, La fentre proprit affiche ses proprits. Cette fentre nous sera trs utile pour changer les proprits des objets. Nous pouvons par exemple changer le nom de la feuille de calcul feuil1 pour lui donner un nom plus significatif. Dans lexemple ci-dessous, nous avons chang le nom de la premire feuille du classeur Feuil1 par Tarifs . Vous verrez par la suite que cette fentre nous sera trs utile lorsque lon cre linterface utilisateur.

Figure2. La fentre proprit de VBE III.3 LA FENETRE CODE La fentre Code permet d'crire, d'afficher et de modifier le code Visual Basic. Vous pouvez ouvrir autant de fentres Code que vous avez de modules, ce qui vous permet d'afficher facilement le code des diffrentes feuilles ou modules et d'effectuer des oprations de copier-coller de l'un l'autre. Vous pouvez ouvrir une fentre Code partir de : la fentre Projet, en slectionnant une feuille ou un module, et en choisissant le bouton Afficher le code ; une fentre UserForm, en double-cliquant sur un contrle ou sur une feuille, en choisissant Code dans le menu Affichage ou en appuyant sur F7.

Figure3. Fentre code de VBE

Conseil et Ingnierie des systmes dinformation

8

Macros et Programmation VBA sous ExcelIII.4 LA FENETRE EXECUTION La fentre excution permet la saisie de commande et de les excuter directement. Cette fentre ne sera trs utile lors du dbogage

Figure4. La fentre excution de VBE Vous pouvez galement copier le code de la fentre Excution pour le coller dans la fentre Code une fois assur que le code fait bien ce quil est cens faire. Vous pouvez faire glisser et dplacer la fentre Excution n'importe o sur votre cran, sauf si vous en faites une fentre ancrable l'aide de l'onglet Ancrage de la bote de dialogue Options. Pour fermer la fentre, cliquez sur la case de fermeture. Si celle-ci n'est pas visible, double-cliquez sur la barre de titre pour qu'elle apparaisse, puis cliquez sur la case de fermeture. III.5 LA FENETRE ESPIONS La fentre Espion est utilise pour inspecter les valeurs de variable et est trs utilise pour debugger le code. Nous reviendrons en dtail sur cette fentre lorsquon abordera le dbogage.

Figure5. La fentre Espions de VBE

Conseil et Ingnierie des systmes dinformation

9

Macros et Programmation VBA sous ExcelIII.6 LEXPLORATEUR DOBJE TS

Figure 6. L'explorateur d'objets de VBE Lexplorateur dobjets affiche les classes, proprits, mthodes, vnements et constantes disponibles dans les bibliothques d'objets et les procdures de votre projet. Il vous permet de rechercher et d'utiliser des objets que vous crez ainsi que des objets provenant d'autres applications. Cet outil sera votre ami durant le dveloppement (lcriture de codes). Nous reviendrons plus en dtails sur lexplorateur dobjets lorsque nous aborderons le modle objets dExcel. III.7 LA BOITE A OUTIS Affiche les contrles Visual Basic standard ainsi que les contrles ActiveX et les objets insrables placs dans votre projet. Pour personnaliser la bote outils en y ajoutant des pages ou des contrles, utilisez la commande Contrles supplmentaires du menu Outils. Lorsque vous insrez une page, l'outil Slectionner des objets est toujours disponible sur cette page.

Conseil et Ingnierie des systmes dinformation

10

Macros et Programmation VBA sous Excel IV.LE LANGAGE VBANous prsentons dans ce chapitre les lments du langage VBA qui sont communs toutes les applications MICROSOFT OFFICE et plus largement aux langages de programmation, mme si la syntaxe et les mots cls varient d'un langage l'autre. IV.1. LES VARIABLES ET LES CONSTANTES Une variable est un emplacement de stockage nomm contenant des donnes pouvant tre modifies au cours de l'excution du programme. Chaque variable possde un nom qui l'identifie de manire univoque au sein de sa porte.

IV.1.1 Dclaration de variablesLe mot cl dim permet de dclarer explicitement une variable, on crira par exemple : 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. Le langage VBA permet de ne pas dclarer explicitement les variables. Un des intrts de la dclaration explicite des variables est d'viter les erreurs de frappes malheureusement trs frquentes en programmation. Pour viter ces erreurs, Il est prfrable de forcer la dclaration explicite des variables en VBA. Pour ce faire, il suffit de placer l'instruction Option Explicit en haut des modules de code avant toutes procdures et toutes fonctions. Option Explicit

IV.1.2 Les types des variablesLa 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 n'est pas obligatoire. Par dfaut, une variable non type est du type Variant, qui permet de stocker n'importe quel type de donnes. Dans un souci d'efficacit du code, il est prfrable de typer ses variables. Une variable de type Variant prend, en effet, plus de mmoire que n'importe 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 d'une variable se fait comme suit: Dim NomVariable as Type o type dtermine le type de la valeur (voir tableau ci-dessous)

Conseil et Ingnierie des systmes dinformation

11

Macros et Programmation VBA sous ExcelLes diffrents types disponibles en VBA sont rsums dans le tableau suivant : Type de donnes Taille d'enregistrement 1 octet 2 octets 2 octets 4 octets 4 octets Plage 0 255 True ou False -32 768 32 767 -2 147 483 648 2 147 483 647 -3,402823E38 -1,401298E-45 pour les valeurs ngatives ; 1,401298E-45 3,402823E38 pour les valeurs positives -1,79769313486231E308 -4,94065645841247E-324 pour les valeurs ngatives ; 4,94065645841247E324 1,79769313486232E308 pour les valeurs positives -922 337 203 685 477,5808 922 337 203 685 477,5807 +/79 228 162 514 264 337 593 543 950 335 sans sparateur dcimal ; +/-7,9228162514264337593543950335 avec 28 chiffres droite du sparateur dcimal ; le plus petit nombre diffrent de zro est +/0.0000000000000000000000000001. 1er janvier 100 au 31 dcembre 9999 Toute rfrence des donnes de type Object 0 environ 2 milliards 1 environ 65 400 Toute valeur numrique, avec la mme plage de valeurs qu'une donne de type Double Mme plage de valeurs qu'une donne de type String de longueur variable La plage de valeurs de chaque lment correspond celle de son type de donnes.

Byte Boolean Integer Long (entier long) Single ( virgule flottante en simple prcision) Double ( virgule flottante en double prcision)

8 octets

Currency (entier dcalage) Decimal

8 octets 14 octets

Date Object String (longueur variable) String (longueur fixe) Variant (nombres) Variant (caractres) Type dfini par l'utilisateur (avec Type)Exemples :

8 octets 4 octets 10 octets + longueur de la chane Longueur de la chane 16 octets

22 octets + longueur de la chane En fonction des lments

Tableau 1. Les types de donnes VBA

Conseil et Ingnierie des systmes dinformation

12

Macros et Programmation VBA sous Excel

IV.1.3 Dfinition dun type utilisateurEn plus des types de donnes disponibles dans VBA, vous pouvez galement dfinir de nouveaux types si besoin y est, et ce en utilisant le mot cl Type Dans lexemple suivant, on dfinit le type Personne pour reprsenter les personnes du monde rel.

IV.1.4 La porte des variablesLa porte d'une variable dfinit quelles procdures ou fonctions peuvent utiliser cette variable. Les variables dclares l'intrieur d'une procdure ou d'une fonction ne sont accessibles qu' l'intrieur de cette procdure ou de cette fonction. Exemple:

Pour qu'une variable soit accessible l'ensemble des procdures et des fonctions d'un module, elle doit tre dclare au dbut du module l'extrieur de toute procdure et de toute fonction. Pour qu'une variable soit accessible l'ensemble des procdures et des fonctions d'un projet, elle doit tre dclare au dbut d'un module l'extrieur de toute procdure et de toute fonction, l'aide du mot cl Public. Exemple :

Conseil et Ingnierie des systmes dinformation

13

Macros et Programmation VBA sous Excel

IV.2 LA DECLARATION DES CONSTANTES Une constante permet d'attribuer un nom une valeur fixe. La dclaration d'une constante se fait l'aide du mot cl Const comme suit : Const NomConstante as [type] =valeur Une constante a la mme porte qu'une variable. Exemple :

IV.3 L'INSTRUCTION WITH...END WITH L'instruction With .End With est utile lorsque les rfrences un objet sont rptes plusieurs fois dans une petite section de code. Exemple:

Tout ce qui commence par un point dans un bloc d'instructions With. End With est une proprit ou une mthode de l'objet qui suit l'instruction With.

Conseil et Ingnierie des systmes dinformation

14

Macros et Programmation VBA sous ExcelIV.4. LES ENONCES CONDITIONNELS VBA permet de traiter les noncs conditionnels l'aide de l'instruction If. On distingue l'instruction If crite sur une seule ligne et le bloc If.

IV.4.1 L'instruction If crite sur une seule ligneL'instruction If crite sur une seule ligne a la syntaxe suivante : If (condition) Then Else Les sections Then et else d'une instruction If ne peuvent contenir qu'une seule instruction et doivent tre crites sur une seule ligne.

Exemple :

IV.4.2 Le bloc IfLa structure de bloc If permet aux sections Then et Else de contenir plusieurs instructions. Le bloc If peut avoir plusieurs sections ElseIf.

Exemple :

Conseil et Ingnierie des systmes dinformation

15

Macros et Programmation VBA sous ExcelIV.5 LES ENONCES ITERATIF S VBA fournit deux structures pour rpter en boucle les mmes instructions: l'instruction Do.Loop et l'instruction For.Next.

IV.5.1 Utilisation d'instructions Do...LoopLes instructions Do...Loop permettent d'excuter un bloc d'instructions un nombre de fois indfini, tant qu'une condition a la valeur True ou jusqu' ce qu'elle prenne la valeur True. Vous pouvez utiliser le mot cl While de deux manires pour vrifier une condition dans une instruction Do...Loop. Vous pouvez contrler la condition avant d'entrer dans la boucle, ou le faire aprs au moins une excution de la boucle. Exemple :

Dans la procdure WhileAuDebut, vous vrifiez la condition avant d'entrer dans la boucle. Si numro prend la valeur 9 et non 20, les instructions l'intrieur de la boucle ne sont jamais excutes. Dans la procdure WhileALaFin, les instructions l'intrieur de la boucle ne sont excutes qu'une seule fois avant que la condition prenne la valeur False. Vous pouvez utiliser la place du mot cl While, le mot cl Until qui s'utilise lui aussi de deux manires pour vrifier une condition dans une instruction Do...Loop. Vous pouvez contrler la condition avant d'entrer dans la boucle (comme dans la procdure WhileAuDebut), ou le faire aprs au moins une excution de la boucle (comme dans la procdure WhileALaFin). La boucle se poursuit tant que la condition conserve la valeur False. Il existe galement une structure pour lexcution dinstructions itratives (la structure While..Wend) mais on lui prfrera la structure (Do.Loop).

Conseil et Ingnierie des systmes dinformation

16

Macros et Programmation VBA sous ExcelIV.5.2 La boucle For...NextLa boucle For...Next est utilise lorsque l'on connait l'avance le nombre de fois o l'on veut que les instructions soient rptes. Les instructions de la boucle For...Next sont excutes un nombre dtermin de fois. Lorsque l'option Step (pas) n'est pas renseigne, le compteur est incrment de 1 chaque itration. Exemple : La procdure suivante calcule la somme des 10 premiers entiers et affiche le rsultat.

NB : Pour itrer dans les collections, on utilisera la structure For Each..Next

IV.5.3 Linstruction ExitIl est parfois inutile de continuer boucler ds quune condition se ralise. On utilisera linstruction Exit chaque fois que ce cas de figure se prsente. Lexemple suivant teste si le nombre (10) est premier ou pas, ds quon dcouvre que 2 devise 10, on arrte ditrer et on annonce que 10 nest pas premier.

NB : Vous pouvez galement sortir dune fonction (Exit Function), dune procdure (Exit Sub) et dune boucle For (Exit For).Conseil et Ingnierie des systmes dinformation 17

Macros et Programmation VBA sous ExcelIV.6 TRAVAILLER AVEC LES TABLEAUX Vous pouvez dclarer un tableau pour traiter un ensemble de valeurs du mme type de donnes. Un tableau est une variable simple comportant de nombreux compartiments permettant de stocker autant de valeurs, par opposition une variable classique dote d'un compartiment destin une seule valeur.

IV.6.1 Dclaration dun tableauL'instruction suivante dclare la variable de tableau Tarifs avec 365 lments. Par dfaut, un tableau tant index partir de zro, la limite suprieure de ce tableau est 364 et non 365. Dim Tarifs(364) As Currency Vous pouvez changer lindex par dfaut comme suit : Dim Tarifs(1 to 365) As Currency Enfin, vous pouvez galement dclarer un tableau en utilisant la fonction Array() et une variable de type Variant. Exemple : Dim ListeJours As Variant ListeJours = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")

IV.6.2 Laccs aux lments du tableauOn accde aux lments du tableau en utilisant leurs index. Lexemple suivant dclare une variable de type tableau nomme ListeJours et affiche llment qui est dans la 1re position (index =0)

IV.7 LES ENTREES ET SORTIES STANDARDS Nous prsentons deux fonctions d'entres/sorties standards de VBA : la fonction MsgBox et la fonction InputBox.

IV.7.1 La fonction MsgBoxLa 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 l'diteur de Visual Basic l'aide de la touche F1.).

Conseil et Ingnierie des systmes dinformation

18

Macros et Programmation VBA sous ExcelExemple :

IV.7.2 La Fonction InputBoxLa 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 l'diteur de Visual Basic). Si l'utilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoie la chane de caractres vide "". Dans lexemple suivant, on demande lutilisateur de saisir son age ; ensuite on laffiche dans une autre bote de dialogue.

Conseil et Ingnierie des systmes dinformation

19

Macros et Programmation VBA sous ExcelIV.8 PROCEDURES ET FONCTIONS Tous les exemples utiliss dans ce manuel utilisent soit des fonctions ou des procdures. Lobjectif de cette partie du manuel est de vous montrer comment utiliser lIDE pour insrer une fonction ou une procdure dans vos modules.

IV.8.1 Les FonctionsVBA offre la possibilit de crer ses propres fonctions, qui peuvent tre utilises dans EXCEL comme nimporte quelle fonction intgre. 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 la syntaxe suivante : Function NomFonction([argument_1,..., argument_n]) Instructions NomFonction = Expression End Function Une fonction indique la valeur retourner en initialisant son nom avec la valeur de retour. valeur de retour, on doit utiliser le nom de la fonction dans laffectation

IV.8.2 Les procdures (Sub)A linverse des fonctions, les procdures peuvent tre utilises pour excuter une suite dinstructions sans pour autant retourner une valeur au programme appelant. Pour dvelopper des procdures (Sub), utiliser la syntaxe suivante Sub NomProcdure(Argument1, Argument2,,Argument2) Instructions End Sub Rfrez vous aux exemples dvelopps dans les sections prcdentes pour des exemples pratiques.

IV.8.3 Utiliser le VBE pour insrer une procdure/fonctionAu lieu de saisir la dclaration dune fonction/procdure, vous pouvez utiliser le menu Insertion de VBE pour saisir son squelette. Vous naurez par la suite qu ajouter du code dans son corps. Cela vous permettra de gagner beaucoup de temps. Cliquez sur le menu Insertion et choisissez lentre Procdure. Une bote de dialogue vous permettant de spcifier le nom de la procdure/Fonction apparat. Vous aurez galement spcifier le type (fonction, procdure ou proprit) et la porte (public ou prive)

Conseil et Ingnierie des systmes dinformation

20

Macros et Programmation VBA sous Excel V. LE MODELE OBJET DEXCELNous allons partir de maintenant travailler sur le modle objet dExcel. Contrairement ce que lon croit gnralement, cette partie ne prsente aucune difficult par rapport aux bases du langage que nous avons vu prcdemment. Lors de ltude des objets, la liste des proprits et mthodes que nous verrons sera limite une programmation de base dExcel. Sachez quil existe dans chaque objet dautres proprits et mthodes que nous ne verrons pas dans ce cours mais qui peuvent vous tre utiles. Le modle objet dExcel est un monstre norme lorsquon le considre dans sa globalit. La documentation de chez Microsoft (MSDN library) le reprsente sous une forme conventionnelle darborescence. La figure ci-dessous prsente une partie de ladite reprsentation :

Figure 7.Une partie du modle Objet d'Excel 2007 Il nest pas question ici de dtailler lensemble de ce modle objet. Nous allons nous intresser ltude des principaux objets utiles dans des macros classiques. Plus explicitement, on dtaillera lobjet Application, lobjet Workbook (classeur), lobjet worksheet (feuille de calcul) et lobjet Range (plage), en plus de quelques collections importantes.

Conseil et Ingnierie des systmes dinformation

21

Macros et Programmation VBA sous ExcelAvant de procder la prsentation de ces objets, un petit glossaire simpose Terme Objet Explications Groupe de code et de donnes ragissant comme une entit. La plupart des objets que nous allons aborder dans le modle Excel ont une reprsentation graphique, ce qui les rends plus facile apprhender. Dans la thorie Objet, tous les membres dun objet sont des mthodes. Dans le jargon courant, les mthodes sont les fonctions ou les procdures dun objet influant sur celui-ci. Un vnement est un signal mis par un objet gnralement lors dune interaction ou dun changement dtat de celui-ci. Ce signal peut tre intercept par des procdures ayant une signature dfinie par lvnement. En VBA, cest lensemble des membres publics dun objet. On entend par membre, les mthodes, proprits et vnement dun objet. Une collection est un jeu dlments (objets) indexs. Ces objets sont gnralement tous du mme type ( lexception de la collection Sheets)

Mthode

Evnement

Interface Collection

Vu la densit du modle objet dExcel, il serait presque impossible davoir une vision simple des interfaces de chaque objet. Le rle de lexplorateur dobjet est justement de mettre notre disposition ces diffrentes interfaces. Ainsi le dveloppeur peut nimporte quel moment explorer les objets susceptibles dtre utiliss dans son code. Le tableau suivant prsente toutes les icnes qui sont utilises par lexplorateur dobjets.

Icne :

Reprsentant un/une/des :

Icnes

Reprsentant un/une/des

Proprit

Module

Proprit par dfaut

Classe

Mthode

Type dfini par l'utilisateur

Mthode par dfaut

Global

vnement

Bibliothque

Constante

Projet

Types et mots cls intgrs

numration

Tableau 2. Icnes utilises dans l'explorateur d'objets

Conseil et Ingnierie des systmes dinformation

22

Macros et Programmation VBA sous ExcelV.1 MANIPULATION DOBJETS Un objet doit toujours tre cre (instanci) et dtruit (finalis). Le moment entre ses deux vnements est la dure de vie. Vous ne pouvez utiliser un objet que pendant sa dure de vie et uniquement dans sa porte, c'est--dire dun endroit o il est visible.

V.1.1 Cration dun objetPour crer un objet, on utilise soit le mot cl New ou la fonction CreateObject dfinie dans le module Interraction qui fait parti de la bibliothque VBA. 1. Avec New Dans lexemple suivant, on dclare une variable objet de type lve et on linstancie en utilisant le mot cl New.

2. Avec la fonction CreateObject Le code suivant va crer une nouvelle instance de lobjet Sheet.

Il faut comprendre que dans le modle Objet Excel et en utilisant VBA, vous naurez quasiment jamais instancier les objets Excel, Il existe presque toujours une mthode Add o Excel prends le mcanisme de cration de lobjet en charge. Autrement dit, vous navez pas grer linstanciation ni la finalisation des objets Excel. Si lon revient lexemple prcdent, La ligne de code ci-aprs permet dajouter une feuille de calcul au classeur actif,

IV.1.2 Le scope dun objetLe scope dun objet est similaire au scope des variables, rfrez vous au chapitre prcdent pour plus de dtails.

Conseil et Ingnierie des systmes dinformation

23

Macros et Programmation VBA sous ExcelV.2 LA BASE, L'OBJET APP LICATION Cet objet reprsente l'application Excel. Il est l'objet parent de tous les autres, et contient des proprits mthodes et vnements trs intressants, que nous allons regarder maintenant.

V.2.1 EvnementsOn utilise rarement les vnements au niveau de l'application, pour la raison simple qu'ils ne sont pas accessibles directement. Pour pouvoir les utiliser, il faut dans le projet crer un module de classe dans lequel on met le code suivant : Public WithEvents App As Application Comme la plupart des vnements grs se retrouvent dans les objets classeur et feuille, nous les utiliseront plutt ce niveau.

V.2.2 PropritsEn voici quelques proprits trs utiles de l'objet application Proprit AskToUpdateLinks Calculation Explication Si sa valeur est False la mise jour des liaisons se fait sans appel d'une boite de dialogue, qui sinon apparat automatiquement Dfinit le mode de recalcul d'Excel. Il s'agit d'une proprit trs importante pour l'optimisation du temps d'excution. En effet, pour les feuilles contenant des formules de calcul, le mode de calcul automatique peut tre trs coteux en temps. Excel recalcule intgralement une feuille de calcul chaque modification ou suppression. C'est pourquoi, en gnral on bloque le mode de calcul au dpart. Dfinit si on utilise un mode par dfaut copier ou couper. En fait, on l'utilise souvent sous la forme Application.CutCopyMode=False pour vider le presse papier Si sa valeur est False, les messages d'avertissements d'Excel ne seront pas affichs Il faut toujours remettre la valeur True en fin d'excution Interactive Dsactive toutes les interactions entre Excel et le clavier/souris Il faut toujours remettre la valeur True en fin d'excution International Renvoie des informations relatives aux paramtres rgionaux et internationaux en cours. Cette proprit est en lecture seule. On s'en sert gnralement pour connatre les sparateurs Permet de basculer entre les modes L1C1 et A1. Il est noter que cela change l'affichage des feuilles mais que cela peut aussi avoir une influence sur le code. En effet certaines formules comme les rgles de validations doivent tre crites dans le mme systme de rfrence que celui de l'application. Permet de dsactiver la mise jour d'cran. Pour des raisons de vitesse d'excution il est conseill de toujours la dsactiver Il faut toujours remettre la valeur True en fin d'excution, sous peine de rcuprer un cran fig.

CutCopyMode

DisplayAlerts

ReferenceStyle

ScreenUpdating

Conseil et Ingnierie des systmes dinformation

24

Macros et Programmation VBA sous ExcelV.2.3 Mthodes

Mthode Calculate

Explication Permet de forcer le calcul. La syntaxe Application.Calculate est peu utilise. On l'utilise principalement sous la forme MaFeuille.Calculate. Sachez toutefois que l'on peut restreindre le calcul une plage des fins de performance. Exemple : Worksheets(1).Rows(2:3).Calculate ne fait les calculs que sur les lignes 2 et 3.

Evaluate

Permet de convertir une chane en sa valeur ou en l'objet auquel elle fait rfrence. En voici quelques exemples : Interprtation de formule de calcul : Imaginons que ma cellule A1 contient le texte (12*3) +4, crire : Range("A2").Value = Application.Evaluate(Range("A1").Value) Renverra 40 en A2. De mme on pourra crire : Resultat= Application.Evaluate("(12*3)+4") La mthode permet aussi d'valuer une formule respectant la syntaxe Excel (en anglais) ; on peut crire Resultat= Application.Evaluate("Sum(A1:E5)") Interprtation d'une adresse : Si ma cellule A1 contient B1:B2 je peux crire Application.Evaluate(Range("A1").Value).Font.Bold=True

FindFile GetOpenFileName Intersect

Permet de lancer une recherche de fichier dans laquelle on spcifie les critres. La collection FoundFiles contient les fichiers trouvs correspondant. Ouvre la boite de dialogue "Ouvrir un fichier" mais n'ouvre pas le fichier. La mthode renvoie juste le nom complet du fichier slectionn. Renvoie une plage qui est l'intersection de n plages. Bien que les plages appartiennent des objets feuilles, la mthode Intersect appartient directement l'objet Application. Permet l'excution d'une macro lors de l'appui sur une touche ou sur une combinaison de touches. Application.OnKey "^{A}", "MaProc" lance la procdure MaProc sur l'appui de CTRL-A

OnKey

OnTime

Permet l'excution d'une macro une heure fixe ou aprs un dlai prcis. Application.OnTime Now + TimeValue("00:00:15"), "MaProc" attend 15 secondes avant d'excuter la procdure MaProc

Conseil et Ingnierie des systmes dinformation

25

Macros et Programmation VBA sous ExcelV.3 LA COLLECTION WORKBO OKS Cette collection contient l'ensemble des classeurs ouverts. L'ordre des classeurs dans la collection (index) est l'ordre d'ouverture. En voici les mthodes les plus importantes de cette collection : Mthode Add Explications Permet d'ajouter un nouveau classeur la collection et non pas d'ouvrir un classeur existant. Le classeur cr devient le classeur actif. Elle suit la syntaxe Worbooks.Add(Template). Si Template est omis un nouveau classeur standard est cr. Cette mthode ferme tous les classeurs de la collection. Donc attention : ne pas confondre WorkBooks.Close et WorkBooks(1).Close Open Ouvre un classeur Excel. .

Close

V.4 LOBJET WORKBOOK (CLAS SEUR) Le classeur est en gnral l'objet central de la programmation Excel. Lorsque l'application va utiliser un seul classeur, on peut utiliser ActiveWorkbook, mais dans le cas d'une application multi-classeurs, il convient de les mettre dans des variables afin d'en simplifier la manipulation.

V.4.1 Mthodes de lobjet WorkbookMthode Close Explications Ferme le classeur. La syntaxe est : MonClasseur.Close(SaveChanges, FileName, RouteWorkbook) Si SaveChanges est omis, une boite de demande d'enregistrement apparat. Donner une valeur FileName diffrentes de celle du classeur revient faire un SaveAs. PrintOut Lance l'impression du classeur. Sa syntaxe est : MonClasseur.PrintOut(from, To, Copies, Preview, ActivePrinter, PrintToFile, Collate). A noter que From et To sont des pages d'imprimante et non les feuilles du classeur, et que ActivePrinter permet de choisir l'imprimante Protect / UnProtect Active ou dsactive la protection du classeur. La syntaxe est : MonClasseur.Protect(Password, Structure, Windows) pour activer la protection MonClasseur.UnProtect(Password) pour la retirer. A ce propos, la protection du classeur et des feuilles est une chose indpendante. La protection du classeur sert bloquer la structure de celui-ci, celle de la feuille protger les objets qu'elle contient. On peut parfaitement protger une feuille sans protger le classeur et inversement. Save / SaveAs Sauvegarde le classeur ou lenregistrer sous un autre nom

Conseil et Ingnierie des systmes dinformation

26

Macros et Programmation VBA sous ExcelV.4.2 Evnements de lobjet WorkbookL'objet classeur possde beaucoup d'vnements, ceux qui sont le plus souvent utiliss sont dtaills dans le tableau suivant : Evnement(s) BeforeClose, BeforePrint, BeforeSave Open Explications Se produisent respectivement avants la fermeture, limpression et la sauvegarde du classeur. Se produit l'ouverture du classeur. Permet donc de faire des macros excution automatique

SheetBeforeDoubleClick, SheetBeforeRightClick

Ces vnements sont des vnements de feuille. On utilise l'vnement au niveau classeur lorsquon veut centraliser l'vnement pour plusieurs feuilles du classeur. S'il existe aussi une procdure pour l'vnement au niveau feuille, elle s'excutera avant la procdure du classeur. Cet vnement ne se produit pas sur les feuilles graphiques. L'objet "Sh" est un objet WorkSheet qui reprsente la feuille sur laquelle l'vnement se produit.

V.5 LA COLLECTION SHEETS (LES FEUILLES) Un classeur Excel est compos d'une ou plusieurs feuilles. Ces feuilles peuvent tre de cinq types : Feuille de calcul, Feuille graphique, Macro Excel4, Macro Excel4 International, feuilles de botes de dialogue Excel 5. La collection Sheets contient toutes les feuilles du classeur quel que soit leur type. En fait, on utilise trs peu cette collection sauf pour connatre le nombre total de feuille avec la proprit Count ou parfois pour ajouter une feuille de type macro Excel4. V.6 LA COLLECTION WORKSHEETS (FEUILLES DE CALCUL S) Cette collection contient l'ensemble des feuilles de calcul du classeur. Le numro d'ordre d'un objet WorkSheet dans cette collection est son ordre dans les onglets du classeur.

V.6.1 Mthodes de la collection WorksheetsMthode Add Copy Explication Cette mthode permet dajouter une voire plusieurs feuilles au classeur. Largument Count dtermine le nombre de feuilles ajouter. Worksheets(index).Copy(Before, After) Duplique une feuille dans le classeur ou cre une copie dans un autre classeur. Attention lors de la copie d'une feuille, la collection "Names" des plages nommes appartient l'objet WorkBook et l'objet WorkSheet. Lors de la duplication de la feuille, Excel va crer deux noms presque identiques, ce qui peut engendrer des bugs. Delete Supprime la feuille spcifie par index. Un classeur doit toujours contenir au moins une feuille.

Conseil et Ingnierie des systmes dinformation

27

Macros et Programmation VBA sous ExcelFillAcrossSheets WorkSheets(collection). FillAcrossSheets (Range, Type) Permet de recopier une plage sur plusieurs feuilles en mme temps. Range dtermine la plage copier, Type dfinit le mode de copie (xlFillWithAll, xlFillWithContents ou xlFillWithFormulas). Il faut passer une collection ou un tableau d'objets WorkSheet contenant les feuilles concernes par la recopie la mthode. Cette collection doit toujours contenir la feuille contenant la plage source.

Move

Worksheets(index).Move(Before, After) Similaire copy mais dplace la feuille. Dans ce cas il n'y a pas de problme avec les noms.

V.7 FEUILLE DE CALCUL S (WORKSHEET) L'objet WorkSheet doit suivre les mmes rgles de programmation que l'objet classeur. On utilise ActiveSheet que dans le cas d'une application ne mettant en jeu qu'une seule feuille. Sinon on rfrence la feuille par : Dim MaFeuille as WorkSheet Set MaFeuille=ActiveWorkSheet

V.7.1 Proprits de lobjet Worksheet

Proprit Names

Explications Renvoie la collection des noms spcifique la feuille de calcul. Attention les plages nommes appartiennent l'objet WorkBook. La collection Names renvoye par cette proprit ne contient donc pas les plages nommes contenues par la feuille sauf si l'on a dfini ce nom comme spcifique .

PageSetup Shapes

Renvoie un objet PageSetup qui contient toutes les informations de mise en page de la feuille. Renvoie la collection Shapes de toutes les formes prsentes sur la feuille. Cette collection peut contenir beaucoup d'objets de types diffrents. On nabordera pas dans cette formation la programmation en utilisant lobjet Shape. Affiche ou masque la feuille. La proprit peut prendre la valeur xlVeryHidden qui masque la feuille de telle faon qu'elle ne puisse tre rendue visible que par le code ou par l'explorateur de projet.

Visible

Conseil et Ingnierie des systmes dinformation

28

Macros et Programmation VBA sous ExcelV.8 LOBJET RANGE (PLAGE OU CELLULE) Nous allons aborder ici la cl de la programmation Excel VBA. Une plage de cellules (objet Range) reprsente n'importe quel groupe de cellules d'une feuille. La plage peut tre constitue d'une cellule, d'une plage continue ou de plusieurs plages. L'objet Range, lorsqu'il reprsente des cellules, appartient toujours un objet WorkSheet. L'objet Range ne possde pas d'vnement spcifique, nanmoins on peut lui faire utiliser les vnements de feuille ou de classeur. Excel fonctionne avec un systme d'adresse. Il existe en fait deux styles de rfrence, comme dj voqu au dbut de ce manuel : 1. R1C1 : Les colonnes et les lignes sont reprsentes par des nombres 2. A1 : Les colonnes sont des lettres et les lignes des nombres. Le changement de style au cours d'un programme ne pose pas de problme vis--vis des formules dj existantes dans une feuille. Sachez toutefois que le code doit tre rdig dans le mme style de rfrence que l'application, sous peine de voir parfois se dclencher des erreurs. En mode A1 on utilise un range comme suit : MaFeuille.Range("A1") : une cellule MaFeuille.Range("A1:E10") ou Range("A1", "E10") : une plage continue En mode R1C1 MaFeuille.Cells(1,1) une cellule MaFeuille.Range(Cells(1,1),Cells(10,5)) une plage continue Quel que soit le style, les plages discontinues s'obtiennent l'aide de la mthode Union de lobjet Application.

V.8.1 Proprits de lobjet Range

Proprit(s) Address

Explication MonRange.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo). RowAbsolute et ColumnAbsolute dtermine si la rfrence renvoye est relative ou absolue, ReferenceStyle dtermine le style de rfrence, External ajoute le nom du classeur et le nom de la feuille. Comme nous l'avons vu, peu importe le style utilis puisque la proprit Address renvoie la rfrence dans le style dsir.

Column, row ColumnWidth, RowHeight Formula FormulaR1C1 FormulaLocal

Renvoie le numro de la premire colonne / ligne de la plage Renvoie ou dfinit la largeur / hauteur des colonnes / lignes de la plage.

Dfinit ou renvoie la formule de la plage, cette formule tant en anglais.

Identique Formula mais dans la langue de l'utilisateur.Conseil et Ingnierie des systmes dinformation 29

Macros et Programmation VBA sous ExcelHidden HorizontalAlignment Masque une ou plusieurs ligne(s)/colonne(s). Attention l'ensemble de la ligne ou de la colonne doit tre slectionne. Dfinit l'alignement dans la plage. Peut permettre un centrage multi-colonnes si la plage contient plusieurs colonnes. Renvoie ou dfinit si les cellules sont verrouilles. Le verrouillage n'a aucun effet tant que la feuille n'est pas protge. Renvoie Vrai si la cellule fait partie d'une plage fusionne. A ce propos, vitez si possible de fusionner les cellules. C'est trs souvent une source de problmes. Renvoie ou dfinit le nom de la plage. Comme nous le verrons tout au long de la formation, les plages nommes sont trs utiles. Renvoie ou dfinit le format des cellules de la plage. Lors de la lecture, renvoie NULL si tous les formats ne sont pas identiques (la plage contient plusieurs cellules). Force le contenu s'adapter aux dimensions de la cellule. Force le retour la ligne si le contenu dpasse la largeur de la cellule. Renvoie la collection Areas de l'objet Range. Si la plage est une plage continue, la collection Areas ne contient qu'un lment qui est l'objet Range. Si cette plage contient plusieurs plages discontinues, il y a autant d'lments que de plages continues dans l'objet Range. Renvoie une collection des objets Border d'une cellule ou d'une plage. On peut manipuler tous ces objets en mme temps avec un appel Borders ou en spcifier un avec sa proprit Item.

Locked MergeCells Name NumberFormat

ShrinkToFit WrapText Areas

Borders

Cells

Cette proprit renvoie un objet Range (une cellule) avec des coordonnes relatives la premire cellule de l'objet Range. Il faut faire trs attention cette erreur relativement frquente.

Conseil et Ingnierie des systmes dinformation

30

Macros et Programmation VBA sous ExcelCharacters Renvoie les caractres dun objet texte. Lexemple suivant modifie la police du texte saisi dans la plage plage.

Columns / Rows

Renvoie la collection de toutes les colonnes / lignes contenues dans la plage. Cela peut permettre certains raccourcis de programmation intressant. Par exemple : MaPlage.Columns(2).Value="" Efface le contenu de toutes les cellules de la colonne 2 dans la plage.

Dependents DirectDependents Precedents DirectPrecedents

Renvoie un objet Range contenant les cellules dpendantes ou antcdentes. Une cellule antcdente est une cellule qui contient dans sa formule de calcul la rfrence la cellule cible. Une cellule dpendante est une cellule dont la rfrence est contenue dans la formule de calcul de la cellule cible. L'objet Range renvoy peut tre une plage multiple. Cette proprit peut tre extrmement intressante pour dterminer quelle plage doit tre recalcule. Nous verrons des utilisations dans la deuxime partie, mais je vais vous donner un exemple.

Interior

Rnvoie le motif utilis dans une plage. Lexemple suivant applique la couleur rouge pour le fond de la cellule B2.

V.8.2 Mthodes de lobjet RangeMthode(s) Copy Explication Cette mthode utilise ou non l'argument Destination. Lorsque l'argument est omis, la mthode copie la plage dans le presse-papiers, sinon le collage lieu dans le mme temps. Sauf cas trs particulier il faut toujours prciser l'argument Destination. Cet argument doit tre soit un objet Range de la mme dimension que la plage source, soit une cellule unique qui deviendra le coin suprieur gauche de la plage colle.

Insert /Delete

Permet d'insrer ou de supprimer une plage de cellules. Utilise l'argument Shift pour dfinir le sens de dplacement des cellules. Pour insrer une ligne ou une colonne entire utiliser EntireRow / EntireColumn

AddComment

Ajoute un commentaire pour une plage compose dune seule cellule.

Conseil et Ingnierie des systmes dinformation

31

Macros et Programmation VBA sous ExcelCalculate SpecialCells Vous pouvez appeler cette mthode dans un objet de type Worksheet, mais pour des fins de performance, il vaut mieux recalculer juste une plage. Revoie toutes les cellules de la plage qui sont dun type particulier. Le code suivant rcupres toutes les cellules commentes dans la plage A1 :E9

V.9 CONCLUSION Nous avons vu ensemble une petite partie du modle objets dExcel. La programmation Excel VBA est relativement simple et repose en fait sur votre connaissance du modle objet et donc sur votre connaissance dExcel. Pour une vue plus globale des objets dfinis dans Excel, je vous invite consulter MSDN (Microsoft Developers Network) et participer activement dans les forums qui traitent du sujet.

Conseil et Ingnierie des systmes dinformation

32

Macros et Programmation VBA sous Excel VI. DEBOGAGE ET GESTION DES ERREURSLe dbogage consiste rgler les erreurs directement lies au code d'un programme. Trois types d'erreur peuvent affecter un programme crit en VBA :

des erreurs de compilation qui surviennent lorsque VBA rencontre une instruction qu'il ne reconnat pas ; des erreurs d'excution : les erreurs dexcution sont difficiles dceler, Il faut grer les erreurs dexcution au niveau de chaque procdure/fonction dveloppe afin de dcouvrir ce genre derreurs. des erreurs logiques : le programme s'excute mais le rsultat obtenu ne correspond pas celui attendu.

VI.1 LES ERREURS DE COMPI LATION ET D'EXECUTIO N La premire tape pour tester un programme consiste compiler le programme l'aide de la commande Dbogage, Compiler vbaproject . Les erreurs de compilation sont mises en vidence. Recommencer la compilation jusqu' ce que toutes les erreurs de compilation soient corriges. Lorsqu'il n'y a plus d'erreurs de compilation, Excuter le programme l'aide de la commande Excution Excuter Sub/UserForm . Si une erreur d'excution est gnre, l'instruction coupable est mise en vidence. Corriger l'erreur et rinitialiser le programme l'aide de la commande Excution, Rinitialiser Recommencer l'excution jusqu' ce que toutes les erreurs dexcution soient corriges. VI.2 LES ERREURS LOGIQUES Il s'agit maintenant de corriger les erreurs logiques qui sont les plus difficiles reprer. L'diteur de Visual Basic propose plusieurs outils de dbogage dans le menu DEBOGAGE. Les principaux outils de dbogage offerts par le VBE sont : 1. Excution pas pas : pour excuter un programme pas pas, placer le curseur dans la procdure excuter et activer la commande Dbogage, pas pas dtaill . L'excution d'une procdure pas pas permet d'en examiner le droulement instruction aprs instruction. La procdure est dite en mode arrt. On peut tout moment retourner un mode d'excution normal. Les bulles d'aide: pour visualiser la valeur d'une variable, activer la commande Outils, Options. Cliquez ensuite sur longlet Editeur et cochez la case Info-bulles automatiques. Lorsque le curseur est plac au dessus d'une variable, la valeur de celle-ci apparat dans une bulle d'aide. La fentre Variables locales : pour visualiser la valeur des variables et constantes aux diffrents stades de l'excution pas pas d'un programme, activer la commande Affichage, Fentre variables locales Les points d'arrt: les points d'arrt permettent d'interrompre l'excution d'un programme sur une instruction prcise. Pour dfinir un point d'arrt sur une instruction douteuse, activer la commande Dbogage, Basculer le point darrt . Les espions: pour espionner la valeur d'une variable, activer la commande Dbogage, Ajouter un espion . Pour afficher la fentre espions, activer la commande Affichage, Fentre Espions . La pile d'appels: la pile d'appels recense toutes les procdures ou fonctions en cours d'excution, selon leur ordre d'appel. Pour afficher la pile des appels, activer la commande Affichage, Pile des appels .

2.

3.

4.

5. 6.

Conseil et Ingnierie des systmes dinformation

33

Macros et Programmation VBA sous ExcelVI.3 EXEMPLE PRATIQUE DE DEBOGAGE Soit la fonction VerifieSiPremier() dont le code est comme suit :

La fonction affiche la fin de son excution que le nombre 20 est premier, ce qui nest pas normal. Pour dcouvrir le problme, nous allons utiliser les points darrts quon mettra dans les instructions susceptibles davoir caus lerreur. NB : Lerreur dans ce cas est une erreur logique. Le code a t compil avec succs et la fonction sest excute. La figure suivante affiche laspect du VBE aprs avoir ajout des points darrts.

Remarquez dores linfo-bulle qui apparat lorsque lon met le pointeur de la souris au dessus de la variable n.Conseil et Ingnierie des systmes dinformation 34

Macros et Programmation VBA sous ExcelAffichant la fentre des variables locales pour visualiser leurs changements durant lexcution du code. Toutes les variables locales utilises dans la fonction y sont numres en spcifiant leurs valeurs actuelles et leurs types.

Vous pouvez galement utiliser la fentre Excution pour valuer une expression. Dans cet exemple, nous lavons utilis pour valuer lexpression ( n - Int( n / i ) ) qui est utilise dans la condition de linstruction If. Lerreur logique est dcele, au lieu dutiliser la condition actuelle, il fallait plutt crire : If ((n - Int(n / i) * i) = 0) Then En effet, lorsque lon excute la fonction en mode dbogage, on constate que le reste de la division de 20 sur 2 est de 10, alors que le programme devrait trouver 0. Les erreurs logiques sont courantes et difficiles corriger. Il faut savoir utiliser tous les outils de dbogage disponibles dans lditeur VBE. VI.4 GESTION DES ERREURS La gestion des erreurs dans VBA ncessite lajout de code supplmentaire pour toutes les procdures et fonctions que vous allez dvelopper. Le gestionnaire derreur est le code ajout par le programmeur pour capter une ventuelle erreur afin soit de la cacher lutilisateur final ou afin de la lui expliquer avec un message personnalis quil peut comprendre facilement. Dans lexemple suivant, nous avons simul une division par zro. Lorsquon excute la fonction, Un message derreur apparat, mais ce mme message nindique pas lutilisateur final ce quil faut faire.

En ajoutant un gestionnaire derreur, Nous pouvons afficher un message personnalis.

Conseil et Ingnierie des systmes dinformation

35

Macros et Programmation VBA sous Excel

En plus de laffichage dun message plus appropri, le gestionnaire derreur sassure de terminer la fonction convenablement. La gestion des erreurs rpond toujours au schma suivant Sub NomProcedure (arguments) On Error GoTo Erreur Instructions de la procedure Exit_Procedure : Exit Sub Erreur : Grer lerreur, afficher un message, ou cacher lerreur si elle nest pas grave, .etc. Resume Exit_Procedure Aller ltiquette Exit_Procedure pour terminer la procdure comme il se doit End Sub

Conseil et Ingnierie des systmes dinformation

36

Macros et Programmation VBA sous Excel VII. LES OBJETS USERFORM

Les objets UserForm sont des botes de dialogue dfinies par l'utilisateur. Ce chapitre explique comment crer une bote de dialogue permettant de saisir les clients d'une entreprise, comme le montre la capture d'cran e :

1. Ouvrir un nouveau classeur et l'enregistrer sous SAISIECLIENTS.XLS. 2. Pour renommer la feuille de calcul FEUILI, cliquer avec le bouton droit sur l'onglet FEUILI, 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 d'un objet UserForm : A. Le dessin de l'objet UserForm Le dessin d'un objet UserForm consiste placer des contrles sur l'objet. Les contrles sont les lments constitutifs d'un objet UserForm tels qu'une case cocher, une zone de texte, une zone de liste modifiable ou un bouton de commande permettant une intervention de l'utilisateur. Un contrle est un objet : il possde des proprits, des mthodes et des vnements dfinis. B. l'association de code l'objet UserForm et ses diffrents contrles Il s'agit de dterminer le comportement de l'objet UserForm et de ses contrles face aux diffrents vnements utilisateur pouvant l'affecter et d'crire le code permettant d'exploiter les actions effectues par l'utilisateur. VII.1 CREER UN OBJET USERFORM 1. Ouvrir l'diteur de Visual Basic et activer la commande Insertion UserForm . Un objet UserForml apparat, ainsi qu'une bote outils permettant d'ajouter des contrles l'objet.

Conseil et Ingnierie des systmes dinformation

37

Macros et Programmation VBA sous Excel

Figure 8.Cration et conception de l'objet UserForm

L'explorateur de projets permet d'afficher le code d'un objet UserForm l'aide du clic droit de la souris et de l'option CODE ; ou d'afficher l'objet lui-mme l'aide du clic droit de la souris et de l'option Afficher l'objet . 2. Modifier le nom de l'objet UserForm par dfaut, UserForml, en FenetreSaisieClients dans la proprit NAME de la fentre Proprits. Ce nom est le nom qui sera utilis dans le code pour faire rfrence l'objet UserForm. La proprit Caption de l'objet UserForm correspond au libell qui apparat dans sa barre de titre. Modifier cette proprit en Saisie Clients . Le formulaire quon veut crer est compos des contrles suivants : INTITULE et une ZONE DE LISTE 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. Deux BOUTONS DE COMMANDE OK et Annuler.MODIFIABLE

Un

Pour placer un contrle dans l'objet UserForm, cliquer sur l'objet voulu de la BOITE A OUTILS et le faire glisser vers l'objet UserForm. Ds qu'un contrle a t plac sur l'objet UserForm, dfinir son nom grce la proprit NAME.

Conseil et Ingnierie des systmes dinformation

38

Macros et Programmation VBA sous ExcelAttention: Il est recommand d'utiliser des noms vocateurs pour ses contrles, qui permettent d'identifier le type d'objet qu'ils reprsentent et leur utilit. 4. Placer les diffrents contrles de l'objet UserForm et modifier leurs proprits comme suit: Contrle Intitule Zone de liste modifiable Intitule Zone de texte Intitule Zone de texte Intitule Zone de texte Bouton de Commande Bouton de Commande proprit NAME IntitulTitre ComboBoxTitre IntitulNom TextBoxNom IntitulPrnom TextBoxPrnom IntitulTl TextBoxTl ButtonOK ButtonAnnuler OK Annuler Tlphone : Prnom : Nom : proprit CAPTION Titre : proprit FONTPOLICE

Times New Roman, Taille 10 "

Tableau 3. Proprits des contrles de l'objet UserForm VII.2 AFFICHER ET FERMER UN OBJET USERFORM

VII.2.1 Afficher un objet UserFormL'instruction Load permet de charger un objet UserForm en mmoire sans l'afficher. La mthode Show de l'objet UserForm permet d'afficher un objet UserForm et de le charger en mmoire, si cela n'a pas dj t fait. Ecrivons la procdure qui permet d'afficher la bote de dialogue de saisie d'un client. 1. Dans l'diteur de Visual Basic, activer la commande Insertion Module . Un module de code ModuleI s'ouvre. Renommer le en ModuleSaisieClients l'aide de la proprit NAME. 2. Saisir la procdure suivante dans le module de code :

3. Excuter cette procdure (pour fermer la bote de dialogue FenetreSaisieClients, cliquer sur son bouton de fermeture X).Conseil et Ingnierie des systmes dinformation 39

Macros et Programmation VBA sous ExcelVII.2.2 Fermer ou masquer un objet UserFormL'instruction Unload permet de fermer un objet UserForm et de l'effacer de la mmoire, les valeurs de ses contrles sont alors perdues. La mthode Hide de l'objet UserForm permet de faire disparatre un objet UserForm de l'cran sans le supprimer de la mmoire. L'instruction Unload ou la mthode Hide sont gnralement places dans les procdures vnementielles attaches aux boutons de validation de l'objet UserForm, comme par exemple les boutons de commande OK et Annuler. VII.3 ASSOCIER DU CO DE A UN OBJET USERFORM Associer le code ncessaire au bouton de commande OK pour que la bote de dialogue soit ferme lorsque l'on clique dessus. Aller dans l'diteur de Visual Basic. Dans l'explorateur de projets, slectionner l'objet UserForm de nom FenetreSaisieClients et ouvrir son module de code l'aide du clic droit de la souris et de l'option CODE (ou en double-cliquant dessus). 1. Dans la liste de gauche au sommet du module de code, slectionner l'option ButtonOK. Dans la liste de droite au sommet du module de code, slectionner l'vnement Click. Compltez le code pour aboutir ce qui suit :

2. Aller dans l'diteur de Visual Basic. Dans l'explorateur de projets, slectionner l'objet UserForm de nom FenetreSaisieClients et ouvrir son module de code l'aide du clic droit de la souris et de l'option Code. 3. Dans la liste de gauche au sommet du module de code, slectionner l'option UserForm. Dans la liste de droite au sommet du module de code, slectionner l'vnement Initialize. 4. Complter la procdure vnementielle comme suit :

Ce code sert 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. Il nous reste juste ajouter les informations saisies par lutilisateur dans la feuille CLIENTS Ouvrez le module de code de l(objet UserForm et compltez la procdure vnementielle ButtonOK_Click comme suit

Conseil et Ingnierie des systmes dinformation

40

Macros et Programmation VBA sous Excel

Aprs avoir excut le module UserForm, rempli les champs du formulaire et cliqu sur le bouton OK, on obtient :

Conseil et Ingnierie des systmes dinformation

41

Macros et Programmation VBA sous Excel LISTE DES FIGURESFigure 1 Lenvironnement VBE ...................................................................................................................... 7 Figure2. La fentre proprit de VBE ............................................................................................................ 8 Figure3. Fentre code de VBE ......................................................................................................................... 8 Figure4. La fentre excution de VBE ............................................................................................................ 9 Figure5. La fentre Espions de VBE............................................................................................................... 9 Figure 6. L'explorateur d'objets de VBE ....................................................................................................... 10 Figure 7.Une partie du modle Objet d'Excel 2007 ..................................................................................... 21 Figure 8.Cration et conception de l'objet UserForm .................................................................................. 38

LISTE DES TABLEAUXTableau 1. Les types de donnes VBA .......................................................................................................... 12 Tableau 2. Icnes utilises dans l'explorateur d'objets ................................................................................ 22 Tableau 3. Proprits des contrles de l'objet UserForm ............................................................................ 39

Conseil et Ingnierie des systmes dinformation

42