Professional Documents
Culture Documents
Sommaire
I. 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
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.
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
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.
Macros et Programmation VBA sous Excel III. LENVIRONNEMENT VISUAL BASIC EDITOR
Nous 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 .
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 .
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.
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.
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.
10
11
Byte Boolean Integer Long (entier long) Single ( virgule flottante en simple prcision) Double ( virgule flottante en double prcision)
8 octets
8 octets 14 octets
Date Object String (longueur variable) String (longueur fixe) Variant (nombres) Variant (caractres) Type dfini par l'utilisateur (avec Type)
Exemples :
12
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 :
13
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.
14
Exemple :
IV.4.2 Le bloc If
La structure de bloc If permet aux sections Then et Else de contenir plusieurs instructions. Le bloc If peut avoir plusieurs sections ElseIf.
Exemple :
15
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).
16
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
IV.7 LES ENTREES ET SORTIES STANDARDS Nous prsentons deux fonctions d'entres/sorties standards de VBA : la fonction MsgBox et la fonction InputBox.
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.).
18
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.
19
20
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.
21
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
Classe
Mthode
Global
vnement
Bibliothque
Constante
Projet
numration
22
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,
23
V.2.1 Evnements
On 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 Proprits
En 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
24
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
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
25
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.
26
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.
27
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
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
28
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.
Renvoie le numro de la premire colonne / ligne de la plage Renvoie ou dfinit la largeur / hauteur des colonnes / lignes de la plage.
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.
30
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.
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.
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
31
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.
32
Macros et Programmation VBA sous Excel VI. DEBOGAGE ET GESTION DES ERREURS
Le 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.
33
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
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.
35
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
36
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 :
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.
37
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.
38
Tableau 3. Proprits des contrles de l'objet UserForm VII.2 AFFICHER ET FERMER UN OBJET USERFORM
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
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
40
Aprs avoir excut le module UserForm, rempli les champs du formulaire et cliqu sur le bouton OK, on obtient :
41
42