Vous êtes sur la page 1sur 78

Introduction Visual Basic pour Microsoft Excel

Mathieu Boudreault

2002 Mathieu Boudreault 20 novembre 2002


Excel, Visual Basic et le logo de Office sont des marques dposes de Microsoft Corporation

Introduction Visual Basic pour Microsoft Excel

Table des matires


Introduction ...............................................................................................................................5 Introduction Microsoft Excel...................................................................................................6 Quest-ce que Microsoft Excel ?............................................................................................6 Dfinitions..........................................................................................................................6 Interface.............................................................................................................................6 Barres doutils et de menus ...............................................................................................7 Fentre de saisie ...............................................................................................................7 Feuille de calcul .................................................................................................................8 Barre dtat ........................................................................................................................8 Construction dun tableau simple ..........................................................................................9 Formatage de cellules et de plages de cellules.....................................................................9 Trucs pour lentre de donnes .......................................................................................10 Effectuer des calculs avec Excel.........................................................................................11 Saisie dquations ou de formules ...................................................................................11 Truc pour la saisie de formules rptitives ......................................................................12 Rfrences relatives, absolues et mixtes ........................................................................13 Un autre truc pour lentre dquations : Nommer des plages.........................................14 Insertion de fonctions.......................................................................................................15 Outils complmentaires dExcel : le solveur. .......................................................................16 Installation du solveur ......................................................................................................16 Utiliser le solveur .............................................................................................................16 Exemple d'application ......................................................................................................18 Concepts fondamentaux de la programmation oriente objet.................................................20 Dfinitions ...........................................................................................................................20 tapes de base dans la conception dun programme .........................................................20 Programmer en Visual Basic pour Excel.................................................................................22 Objets propres Microsoft Excel ........................................................................................22 Btir une macro simple........................................................................................................23 Gestion des cellules et des plages de cellules : objets et mthodes de base .....................25 Range ..............................................................................................................................25 Columns ou Rows............................................................................................................25 Selection ..........................................................................................................................26 ActiveCell .........................................................................................................................26 Offset ...............................................................................................................................26 Cells.................................................................................................................................27 Activate ............................................................................................................................27 Select...............................................................................................................................27 Remarque........................................................................................................................27 Truc pour la manipulation rptitive du mme objet ........................................................28 Gestion des feuilles de calculs et des classeurs : objets et mthodes de base ..................29 Workbooks .......................................................................................................................29 ActiveWorkbook ...............................................................................................................30 Worksheets ou Sheets.....................................................................................................30 ActiveSheet .....................................................................................................................31 Ouverture dun classeur Excel Mthode Open .............................................................31 Cration dun nouveau classeur Excel Mthode Add ...................................................31

Introduction Visual Basic pour Microsoft Excel

Slection (ou activation) dun classeur ou dune feuille de calcul Mthodes Activate et Select...............................................................................................................................31 Sauvegarde dun classeur Excel Mthodes SaveAs et Save .......................................32 Fermeture dun classeur Excel Mthode Close ............................................................32 Dclaration de variables......................................................................................................33 Rappel provenant des sections prcdentes...................................................................33 Dclaration de variables scalaires ...................................................................................33 Dclaration de variables matrices....................................................................................34 Assigner et obtenir des valeurs dune variable matrice....................................................35 Redim ..............................................................................................................................36 Cration de routines et de fonctions personnelles ..............................................................36 Enregistrer une macro .....................................................................................................36 Cration de routines personnelles ...................................................................................38 Appel de routines personnelles .......................................................................................39 Cration de fonctions personnelles .................................................................................39 Appel de fonctions personnelles ......................................................................................40 Programmation conditionnelle.............................................................................................41 Crer une condition .........................................................................................................42 Programmation conditionnelle simple ..............................................................................43 Programmation conditionnelle par cas.............................................................................44 Programmation itrative ......................................................................................................44 Itration simple (For Next)............................................................................................45 Itration conditionnelle (While Wend)...........................................................................45 Gestion des botes de dialogue...........................................................................................46 Bote de dialogue InputBox ..............................................................................................46 Bote de dialogue MsgBox ...............................................................................................47 Une vue densemble de lditeur Visual Basic ........................................................................50 Trucs de dbogage .............................................................................................................50 Commande Excuter .......................................................................................................50 Excuter Pas pas..........................................................................................................51 Points darrt ...................................................................................................................52 Fentre espions ...............................................................................................................53 Messages derreurs.............................................................................................................54 Erreurs de compilation.....................................................................................................54 Erreurs dexcution..........................................................................................................54 Erreurs logiques ..............................................................................................................55 Suite de lexemple Construction du tableau de primes ........................................................56 lments de programmation avance en Visual Basic pour Excel .........................................59 Objet WorksheetFunction ....................................................................................................59 Utiliser une fonction publique Visual Basic cre par le programmeur lintrieur dun classeur...............................................................................................................................60 Crer une fonction publique en 3 tapes simples............................................................60 Exemple complet .............................................................................................................61 Dclaration de variables de type Object ..............................................................................61 Dclaration de variables de type Object ..........................................................................62 Assignation dans une variable de type Object .................................................................62 Mthode InputBox ...............................................................................................................62 Anciens travaux pratiques de lanne 2000 ............................................................................64

Introduction Visual Basic pour Microsoft Excel

Travail pratique # 1 .............................................................................................................64 Contexte ..........................................................................................................................64 Solution............................................................................................................................64 Travail pratique # 2 .............................................................................................................66 Contexte ..........................................................................................................................66 Solution............................................................................................................................67 Travail pratique # 3 .............................................................................................................68 Contexte ..........................................................................................................................68 Solution............................................................................................................................69 Travail pratique # 4 .............................................................................................................72 Contexte ..........................................................................................................................72 Solution............................................................................................................................72 Travail pratique # 5 .............................................................................................................75 Contexte ..........................................................................................................................75 Solution............................................................................................................................75 Rfrences .............................................................................................................................78

Introduction Visual Basic pour Microsoft Excel

Introduction
Bien que le logiciel Microsoft Excel soit un outil trs puissant aux capacits touchant plusieurs domaines tels que les mathmatiques, la finance, lingnierie, etc., il ne peut malheureusement tout faire. Cest grce la programmation en Visual Basic pour Excel que les utilisateurs les plus avancs pourront adapter Microsoft Excel leur besoin. Il est alors possible de combiner plusieurs des outils dExcel et de les amliorer, de les complmenter, crer plusieurs commandes et outils supplmentaires, etc. En actuariat, Visual Basic pour Excel intervient dans tous les domaines connexes : rgime de retraite, assurance gnrale, assurance vie, et mme en recherche. Ce document se veut une prsentation des fonctions de base dExcel et dune introduction la programmation en Visual Basic pour Excel. Vous verrez quune fois les connaissances de base sont acquises en programmation, la marche nest pas si haute pour passer de Visual Basic Visual Basic pour Excel. Il a t bti de telle sorte quil peut agir comme document de rfrence dans le futur. Dans ce document, vous verrez le fonctionnement de base de Microsoft Excel, la construction de tableaux, lutilisation de formules et de fonctions, etc. Ensuite, une fois ces notions bien matrises, il est ainsi plus facile de manipuler les objets Excel de la mme faon que les objets Visual Basic. Vous dcouvrirez ensuite la programmation en Visual Basic, lutilisation des objets Excel, etc. Toutes les notions amenes sont accompagnes dexemples. Vous retrouverez aussi la fin, quelques exemples complets et les travaux pratiques de lanne 2000 (avec solutions). Tout au long du document, si vous voulez en savoir plus, je vous invite consulter laide de Microsoft Excel et Visual Basic pour Excel. Afin de mieux avancer de faon autonome en Visual Basic pour Excel, il est fortement recommand de bien comprendre les notions dobjets, mthodes et proprits. De cette faon, il est ainsi beaucoup plus facile dutiliser de nouveaux objets autrefois inconnus pour soi. Je tiens aussi remercier MM. Yan Bergeron, Simon Gamache et Frdrick Guillot pour laide quils mont apporte dans la compltion du document. Leur contribution a t grandement apprcie.

Introduction Visual Basic pour Microsoft Excel

Introduction Microsoft Excel


Quest-ce que Microsoft Excel ?
Un tableur ou chiffrier lectronique est une table gante qui permet de calculer des donnes, les analyser et les organiser dans des tableaux. En termes informatiques, Microsoft Excel est donc un logiciel qui permet de grer une multitude de feuilles de calculs. Une feuille de calcul est un ensemble de donnes et dquations. Par exemple, la construction dune facture dans Excel pourrait constituer une feuille de calcul. En actuariat, un logiciel comme Excel peut servir lactuaire dans plusieurs domaines et applications possibles tels que la gestion des tables de mortalit et des probabilits de dcs, dtermination des rserves, simulation, optimisation, etc.

Dfinitions
Cellule (Cell) : lment dun tableau. Classeur (Workbook) : Ensemble de feuilles de calculs. Un fichier Excel (.xls) est un classeur. Feuille de calcul (Worksheet) : Ensemble de donnes et dquations organises en tableaux. Plage (Range) : Ensemble de cellules.

Interface
Regardons ensemble la construction de linterface principale dExcel.

Introduction Visual Basic pour Microsoft Excel

Barres doutils et de menus

Les barres doutils et de menus permettent daccder aux principales fonctionnalits dExcel. En haut, on retrouve les diffrents menus dExcel. Fichier (File) : Fonctionnalits de gestion de fichier. Par exemple, ouverture, fermeture, sauvegarde, mise en page, etc. dition (Edit) : Fonctionnalits ddition (modification) des donnes. On y retrouve par exemple les fonctions trs utiles Copier, Couper, Coller et Effacer. Affichage (View) : Fonctionnalits permettant de modifier laffichage du fichier en cours. Insertion (Insert) : Fonctionnalits dajout dobjets lintrieur du classeur. On peut ajouter une image, un graphique, une fonction Excel, etc. Format (Format) : Fonctionnalits de formatage dun lment dExcel. Le formatage peut tre de modifier la police et la taille du texte, la couleur de fond de la cellule, etc. En bref, il sagit des outils qui permettent de modifier lapparence dun lment dExcel. Outils (Tools) : Fonctionnalits permettant daccder aux diffrents outils de Microsoft Excel tels que le correcteur dorthographe, cration de macros, solveur (outil doptimisation), etc. Donnes (Data) : Fonctionnalits de gestion des donnes, comme le tri des donnes, etc. Ensuite, on retrouve la barre doutil principale et de formatage. Avec ces boutons, il est possible daccder aux fonctionnalits les plus communes dExcel. Dautres barres doutils sont aussi disponibles. Il suffit daller dans le menu Affichage et ensuite pointer vers Barre doutils.

Fentre de saisie

Cest cet endroit que les donnes et les formules peuvent tre saisies. On remarque gauche ladresse de la cellule. Ladresse dune cellule est toujours compose dune lettre suivie dun chiffre. La lettre reprsente la colonne et le chiffre reprsente la ligne. Par exemple, G10 correspond la cellule situe la 7e colonne et 10e ligne.

Introduction Visual Basic pour Microsoft Excel

Feuille de calcul

Voici linterface principale dune feuille de calcul. Cest lintrieur de cette zone que sont situes les donnes et les quations. Dans le bas gauche, les onglets permettent de basculer entre les diffrentes feuilles de calcul. Il est possible dajouter des feuilles en cliquant avec le bouton droit de la souris et en choisissant Insertion. Il suffit ensuite de slectionner Feuille. Vous pouvez aussi renommer vos feuilles de calcul en double-cliquant sur le nom actuel de celle-ci.

Barre dtat
Diffrents messages sont affichs dans la barre dtat selon le contexte.

Introduction Visual Basic pour Microsoft Excel

Construction dun tableau simple


Nous allons construire ensemble le tableau suivant : x Probabilit de dcs dans la prochaine anne dun individu dge x 0.015 0.020 0.025 0.030 0.035 0.040

35 36 37 38 39 40

Il sagit en fait dentre de donnes. La cellule suprieure gauche de ce tableau doit tre en A1. ltat brut, votre tableau devrait ressembler celui-ci.

Formatage de cellules et de plages de cellules


Il est possible de modifier lapparence du tableau et de chacun des lments de celui-ci. Il y a trois diffrentes faons pour y parvenir : (1) les menus, (2) les barres doutils ou (3) le bouton droit ou menu contextuel. Tout dabord, il faut slectionner la cellule ou lensemble de cellules dont on veut modifier lapparence. Ensuite, vous navez qu choisir une des trois faons suivantes pour modifier l'allure des cellules. 1. Menu Format; 2. Deuxime barre doutil; 3. En cliquant avec le bouton droit de la souris dans la zone slectionne. Il est possible de modifier le format du nombre, lalignement du texte lintrieur de la cellule, la police et la taille du texte, la bordure autour de la plage de cellule ainsi que la couleur de fond. On peut appliquer ces modifications une cellule ou un ensemble de cellules.

Introduction Visual Basic pour Microsoft Excel

10

Exercice : Faites en sorte que le tableau moche initial ressemble celui-ci.

Solution (en utilisant une des 3 faons) Cellules A1 jusqu B1 Alignement : Horizontal centr, Vertical centr, Retour la ligne automatique Police : Arial, 12 pts, Gras Bordure : Contour 3 pts Arrire-plan : Couleur cyan Cellules A2 jusqu B7 Alignement : Horizontal centr Police : Arial, 12 pts Bordure : Contour 3 pts, Ligne au centre : 1 pt Arrire-plan : Couleur jaune Cellules B2 jusqu B7 Nombre : Nombre de dcimales : 3 Modifiez la largeur des colonnes (ou la hauteur des lignes) en amenant la souris sur le ct gauche (ou haut) de la feuille de calcul. Le curseur devrait changer de forme, vous indiquant que vous pourrez ajuster la largeur ou hauteur dune colonne ou ligne.

Trucs pour lentre de donnes


Lorsquune squence se prsente lintrieur des donnes, Excel est capable dextrapoler et de complter la squence. Par exemple, ici, au lieu dentrer 35, 36, 37,, 40, il suffisait dentrer 35 et 36 lintrieur des cellules A2 et A3 et de complter la squence laide de la poigne. Voici comment : 1. Entrez 35 et 36 lintrieur des cellules A2 et A3 et slectionnez la plage A2:A3. Note : pour Excel, le deux-points (:) signifie jusqu. Exemple : A1:G8 correspond au tableau form des cellules allant de A1 (coin suprieur gauche de la plage) jusqu G8 (coin suprieur droit de la plage).

Introduction Visual Basic pour Microsoft Excel

11

2. Cliquez sur la poigne de la slection et maintenez le bouton gauche de la souris enfonc. Voici la fameuse poigne de slection :

3. Glissez la souris jusqu ce que le nombre 40 apparaisse. Pour entrer les probabilits de dcs, puisque le pas de la squence est de 0.005, il est aussi possible dutiliser ce truc. Il y aussi une autre faon de procder pour entrer les probabilits de dcs. Rptez les tapes 1 et 2 prcdentes pour la colonne B (probabilits de dcs). Au lieu de glisser la poigne jusquen bas, double-cliquez sur celle-ci. Note importante : le tout dernier truc fonctionne seulement si des donnes sont prsentes dans la colonne sa gauche.

Effectuer des calculs avec Excel


Une fois que les donnes sont bien organises, il est souvent utile deffectuer des calculs sur ceux-ci. Il y a deux faons dexcuter des calculs avec les cellules : quations ou formules; Fonctions.

Saisie dquations ou de formules


Observons ensemble la premire faon dexcuter des calculs. Syntaxe =CELLULE/NOMBRE Oprateur mathmatique mathmatique CELLULE/NOMBRE CELLULE/NOMBRE Oprateur

CELLULE : Correspond ladresse dUNE cellule. Important : il est impossible dexcuter une quation avec une plage de cellules. Oprateur mathmatique : Les oprateurs sont : Addition : + Soustraction : Multiplication : * Division : / Exposant : ^ Parenthses : ( ) Note : La priorit des oprations est respecte. Exemple # 1 Dans la cellule E2, entrez : =2+3 Le rsultat, 5 saffichera dans la cellule E2.

Introduction Visual Basic pour Microsoft Excel

12

Exemple # 2 Dans la cellule E3, entrez 10, en F3, entrez 3. Si dans la cellule E4 vous tapez : =14+E3^F3, vous aurez le rsultat 1014. Note importante Pour saisir une quation, vous pouvez entrer directement au clavier =14+E3^F3 ou vous pouvez entrer =14+ au clavier, ensuite, laide des flches du clavier, dplacer la cellule slectionne vers E3, ensuite saisir ^ au clavier et ensuite choisir la cellule F3 laide des flches. Poursuivons maintenant lexemple principal. Premirement, effacez le contenu des cellules E3:F4 et ensuite, insrez deux lignes audessus du tableau. Il y a diffrentes faons dy parvenir. Vous pouvez tout simplement dplacer le tableau vers le bas de deux lignes (couper, coller) ou aller dans le menu Insertion et choisir Ligne (rptez 2 fois pour deux lignes). Il faut reproduire le tableau suivant

Il est important de savoir que si vous modifiez le contenu de la cellule C1, les primes doivent aussi se mettre jour. Cette exigence implique que dans les cellules C4:C9 il doit y avoir une quation. Par exemple, en C4, lquation saisir est : =C1*B4. En C5, il faut saisir, =C1*B5, etc. Un peu long et redondant nest-ce pas ?

Truc pour la saisie de formules rptitives


Un peu comme nous lavons fait dans le cas o une squence se prsentait dans les donnes, il est aussi possible dappliquer la mme quation un ensemble de cellules laide de la poigne de slection. Si en C4, vous avez =C1*B4, cliquez deux fois sur la poigne et vous aurez :

Introduction Visual Basic pour Microsoft Excel

13

Comme vous pouvez le constater, le calcul de la prime a fonctionn que pour la cellule C4. Pourquoi ? Il est trs important de comprendre la prochaine section.

Rfrences relatives, absolues et mixtes


Lorsque vous avez entr en C4, =C1*B4, vous avez en quelque sorte dit Excel : Prends la cellule immdiatement ta gauche (B4) et multiplie la par la cellule qui est 3 lignes plus haut (C1). Cest effectivement une autre faon dinterprter nos dsirs. Par contre, en appliquant la mme quation jusqu C9, Excel a appliqu aussi le mme raisonnement pour chacune des cellules comprises dans la plage C4:C9. Exemple, en C9 il sest dit : Je dois prendre la cellule immdiatement ma gauche (B9) et la multiplier par la cellule qui est 3 lignes plus haut (C6). Cette faon de raisonner est ce quon appelle une rfrence relative. Pour notre exemple, nous voulons le raisonnement suivant : Prends la cellule immdiatement ta gauche (B4) et multiplie la par la cellule C1. Ici, B4 est une rfrence relative et C1 est une rfrence absolue. Comment faire en sorte quExcel reconnaisse les rfrences absolues ? Au lieu dentrer dans la cellule C4 lquation =C1*B4, il suffit dentrer =$C$1*B4. Ensuite, rptez le truc du double-clic sur la poigne. Voil ! Lors de la cration dquations et de lapplication de celles-ci sur plusieurs cellules, il est aussi possible de dfinir des rfrences mixtes, cest--dire dfinir, par exemple, la ligne dune cellule de faon absolue et la colonne de faon relative. Nous aurions, $C4. Si lquation est applique simultanment sur plusieurs lignes et colonnes, lquation sera toujours une fonction du contenu de la colonne C.

Introduction Visual Basic pour Microsoft Excel

14

Exemple : Vous dsirez construire une table de multiplication des 5 premiers nombres naturels. Vous devez obtenir ce rsultat :

Vous devriez tre assez laise pour formater ce tableau. Regardons ensemble comment obtenir cette table sans avoir crire 25 quations diffrentes. Si en C5, vous entrez =B5*C4 et que vous appliquez cette formule toutes les cellules du tableau, vous obtiendrez la table suivante :

Pour obtenir le rsultat voulu, il faut entrer en C5, lquation suivante : =$B5*C$4. Ici, on veut maintenir fixe la rfrence la colonne B et maintenir fixe la rfrence la ligne 4. Le reste doit varier selon la position. Appliquez maintenant cette quation toutes les cellules du tableau laide de la poigne.

Un autre truc pour lentre dquations : Nommer des plages


Au lieu dentrer des quations laide des adresses des cellules, il est aussi possible de donner des noms des plages de cellules et appeler les quations laide de ces noms. Voici comment faire. Supposons que nous allons nommer la plage B4:B9 prob. Slectionnez cette plage, puis dans la zone de nom de plage (voir illustration suivante), entrez le mot prob.

Procdez de la mme faon pour la cellule C1 que vous nommerez prestation. Ensuite, dans la cellule C4, entrez la formule =prob*prestation. Vous obtiendrez le mme rsultat que prcdemment. En plus, si vous descendez la formule laide de la poigne, vous obtiendrez les primes exactes pour tout ge.

Introduction Visual Basic pour Microsoft Excel

15

Insertion de fonctions
Il y aussi une deuxime faon deffectuer des calculs avec Excel : lutilisation de fonctions. Une fonction est une formule prdfinie qui effectue un calcul laide des arguments de la fonction. Pour utiliser une fonction on doit utiliser la syntaxe suivante. Syntaxe =NOMFONCTION(argument1 ; argument2 ; argument3 ;) On peut aussi accder la liste des fonctions ainsi qu leur description soit en allant dans le menu Insertion, Fonction ou en appuyant sur la touche fx dans la barre doutils. Les arguments dune fonction reprsentent ce que la fonction a besoin pour retourner une valeur. Ils peuvent tre de diffrents types : nombre, logique (boolen), etc. Dans Excel, ces arguments peuvent aussi faire rfrence une cellule ou une plage de cellules. Il est aussi possible dutiliser les rfrences relatives et absolues. Exemple Les notes de 50 tudiants sont entres dans les cellules A5:A54. On veut obtenir la moyenne et lcart type. Pour calculer la moyenne, au lieu dentrer la formule =(A5+A6+A7++A54)/50, nous utiliserons la fonction MOYENNE. =MOYENNE(A5:A54) Mme principe pour calculer lcart-type des notes de la classe. Nous utiliserons la fonction =ECARTYPE(A5:A54) Remarques Il est possible dimbriquer des fonctions lintrieur dune autre fonction. Les oprations mathmatiques peuvent tre utilises lintrieur dune fonction et avec une fonction. Exemple : Calculer la variance des notes du groupe. On entre la fonction =ECARTYPE(A5:A54)^2. Voici un exemple combinant les deux remarques. On dsire calculer la probabilit quun tudiant pris au hasard ait plus que 70% son examen. On suppose que la distribution des notes est normale. La fonction entrer est =1-LOI.NORMALE(0.70 ; MOYENNE(A5:A54) ; ECARTYPE(A5:A54) ; VRAI) Ici, la fonction LOI.NORMALE retourne la fonction de rpartition ou de densit dune loi normale. Dans cet exemple, il sagit de la fonction de rpartition (VRAI) dune loi normale, valu 0.70, avec paramtres mu = MOYENNE(A5:A54) et sigma = ECARTYPE(A5:A54).

Introduction Visual Basic pour Microsoft Excel

16

Outils complmentaires dExcel : le solveur.


lintrieur de Microsoft Excel, il y a plusieurs outils permettant de calculer et danalyser des donnes. Ces outils sont la cration de graphiques, de cartes gographiques, outils doptimisation, danalyse des donnes en rgression, cration dhistogrammes, rsolution de problmes laide de la transforme de Fourier, etc. Nous regarderons ensemble un outil trs intressant en mathmatiques et en actuariat dans la rsolution de problmes : le solveur. Le solveur du logiciel Microsoft Excel est un utilitaire permettant de rsoudre efficacement et rapidement certains problmes d'optimisation en effectuant une approximation de la solution par le biais d'algorithmes numriques. Les problmes de type linaires sont traits l'aide de l'algorithme du simplex et la mthode de Branch-and-Boundmise, tandis que les problmes de type non linaires sont rsolus l'aide de la mthode du Generalized Reduced Gradient. Son fonctionnement est trs simple. En termes clairs, il adapte les valeurs des cellules que vous souhaitez modifier (cellules variables), et retourne le type de rsultat spcifi (maximum, minimum, etc.) partir des formules des cellules cibles et des contraintes spcifies. Le solveur peut notamment tre utilis dans la recherche des extrema d'une fonction complexe, pour rsoudre un systme d'quation linaire, pour estimer des paramtres ou pour rsoudre un problme algbrique.

Installation du solveur
Si le mot "Solveur" ne figure pas dans la liste droulante du menu "Outils", il vous faudra installer le solveur. Voici la procdure pour installer le solveur : (1) Choisir "Macro complmentaire" dans le menu "Outils" ; (2) Cocher solveur; (3) Appuyer sur "OK".

Utiliser le solveur
Pour rsoudre un problme avec le solveur, il faut commencer par monter un classeur Excel en reliant certaines cellules par les formules de votre problme. Par exemple, si on cherche la solution du systme d'quations suivant : i )2 x + y + z = 3

ii ) x y z = 3 iii )3x + 2 y + 3 z = 3
Il pourrait tre intressant de construire ce type de feuille Excel :

Introduction Visual Basic pour Microsoft Excel

17

Remarque Initialement, on a pos que x = 1, y = 1 et z = 3, . Ce ne sont que des valeurs fictives qui seront par la suite ajustes par le solveur pour satisfaire au systme d'quations linaire. La seconde tape consiste dcortiquer le problme en dterminant les cellules qui sont : (1) optimiser (minimiser, maximiser ou galiser); (2) Variables; (3) Sujettes une contrainte d'optimisation. Dans notre exemple, la cellule C4 pourrait tre arbitrairement choisie comme une cellule maximiser, les cellules C4, C5 et C6 seraient les cellules variables (celles que le solveur devra rajuster pour que le systme d'quations soit respect) et les cellules C11, C12 et C13 seront sujettes des contraintes (ces cellules doivent tre gales 3 pour que le systme d'quation soit satisfait). tant donn les contraintes mises en place, le fait de maximiser arbitrairement la cellule C4 ne modifie en rien le rsultat. Lorsque la feuille Excel est dcortique, il ne reste plus qu' entrer les paramtres dans le solveur et excuter ce dernier. Dans notre exemple, voici comment il faudrait entrer les paramtres du solveur :

Introduction Visual Basic pour Microsoft Excel

18

Voici maintenant l'allure de la feuille Excel aprs le travail du solveur :

La solution du systme d'quations est sans aucun doute x = 2, y = -1,2 et z = 2. Attention : Lorsque le problme est plus complexe, le solveur peut ne pas converger vers la solution la premire excution. Dans ce cas, on peut excuter le solveur une ou plusieurs autres fois ou modifier le nombre d'itrations maximal dans les options du solveur.

Exemple d'application
Un dentiste souhaite modliser le nombre d'obturations dans la bouche d'un patient en fonction de l'ge de celui-ci. Lors de son avant-midi de travail, il a observ 5 bouches et inscrit ses observations dans le tableau suivant : Patient i 1 2 3 4 5 Le dentiste suppose que Nombre d'obturations dans la bouche du patient i (Yi) 3 5 2 7 2 ge du patient i (Xi) 13 28 15 22 10

= X + ln( X ) + X , Y i i i i
o , et sont des constantes. Le dentiste souhaite dterminer la valeur de ces constantes

de sorte ce que la somme des carrs des erreurs ( Yi Y i


i =1

) soit minimise. Le dentiste

construit donc le fichier Excel suivant (et pose arbitrairement que = 2, = 5 et = 7 ):

Introduction Visual Basic pour Microsoft Excel

19

Voici ce que le dentiste a entr dans les paramtres du solveur :

Et voici le fichier Excel aprs l'excution du solveur :

Le dentiste a un patient de 32 ans cet aprs midi, selon ses observations de l'avant-midi et selon son modle mathmatique, il peut s'attendre ce que ce patient ait 7 obturations en bouche !

Introduction Visual Basic pour Microsoft Excel

20

Concepts fondamentaux de la programmation oriente objet


Avant de dbuter la programmation en Visual Basic, il faut rappeler certains concepts importants de la programmation oriente objet.

Dfinitions
Objet : lment de programmation ayant des proprits, pouvant excuter certaines actions et pouvant interagir avec dautres objets. Un objet peut en contenir un autre et peut aussi appartenir dautres objets. Proprit : Caractristique ou attribut propre un certain objet. Mthode : Action que peut excuter un objet. Observons ce que pourrait tre un objet sans penser la programmation. Par exemple, une voiture. Effectivement, une voiture peut avoir certaines caractristiques (couleur, longueur, largeur, puissance, consommation, etc.) La voiture peut aussi excuter certaines actions (avancer, reculer, etc) et peut aussi interagir avec certains autres lments (la voiture interagit avec la route, etc.). Une radio, qui est aussi un objet en soi ayant des proprits, peut tre contenu dans une voiture et aussi tre contenu dans une maison (objet). Collection ou classe : Ensemble dobjets ou dautres collections. Hirarchie : Faon dordonner les objets et les collections. Exemple : ClasseSuperieure.ClasseInferieure.Objet.Propriete = True. Ici, on a que lobjet appartient la classe infrieure, qui elle appartient la classe suprieure. Sa proprit est fixe True. Variable : Espace en mmoire rserv pour y stocker de linformation. Une variable peut tre de plusieurs types : numrique (entier, rel), boolen (ou logique), texte (ou chane de caractres, aussi appel string).

tapes de base dans la conception dun programme


1. Bien comprendre le problme. La premire tape de la conception dun programme ne doit jamais impliquer le contact direct avec un ordinateur. Un important processus de rflexion et de comprhension doit se faire chez le programmeur avant de se lancer dans la conception. Il peut tre utile de bien schmatiser les tapes. 2. Diviser pour rgner a. Diviser le problme principal en sous-problmes. b. chaque sous-problme est associ une fonction ou sous-programme. De cette faon, il devient beaucoup plus facile de vrifier lexactitude du programme en entier. Si un bogue se prsente, il est ainsi plus simple de localiser la ligne de code fautive car seulement un rsultat intermdiaire sen trouve erron. Note : Chacune des tapes qui suivent doit tre rpte pour chaque sousprogramme. c. Il est alors possible de dbuter la programmation. 3. Dclaration des variables qui vont tre utilises dans le programme ou sousprogramme. Dans lutilisation des variables, il y a toujours deux tapes ncessaires.

Introduction Visual Basic pour Microsoft Excel

21

Premirement, la dclaration qui alloue ou rserve un espace en mmoire. Deuximement, le stockage utilise lespace qui lui est rserv pour conserver linformation voulue. Il est aussi fortement recommand de donner un nom intelligent ses variables. Un principe fondamental : le nom dune variable devrait reflter son contenu. 4. Code principal. a. Obtenir les donnes ncessaires au calcul; b. Effectuer le calcul; c. Afficher le rsultat. 5. Une fois le programme et les sous-programmes bien rds, il est fortement recommand de bien documenter celui-ci. Lidal est de bien dcrire le rle de chaque sous-programme ainsi que leurs arguments. Les lignes de code moins intuitives (par exemple, les clairs de gnie) devraient aussi tre bien dcrites. Une question se poser lorsquon documente ses routines : en lisant le code ainsi que le texte, est-ce que mes collgues seraient en mesure de bien comprendre lide principale de ma programmation ainsi que les principales tapes de mon code ? videmment, rpondre par la ngative cette question devrait vous inciter continuer la documentation.

Introduction Visual Basic pour Microsoft Excel

22

Programmer en Visual Basic pour Excel


Tout dabord, il convient de faire la distinction entre Visual Basic et Visual Basic pour applications. Premirement, il sagit du mme langage de programmation. Les commandes, les structures de programmes et linteraction entre les objets est identique. Visual Basic est un logiciel complet en soi : il permet de crer des applications compltement autonomes. Visual Basic pour applications est un complment chacun des logiciels inclus dans la suite Microsoft Office. Par exemple, Visual Basic pour Microsoft Excel permet lutilisateur de crer des petites applications qui interagissent avec un classeur Excel. Ces applications sont appeles macros. La principale diffrence entre Visual Basic et Visual Basic pour Excel rside dans les collections dobjets : les objets grs par Visual Basic sont diffrents de ceux de Visual Basic pour Excel.

Objets propres Microsoft Excel


En Visual Basic, les donnes ncessaires pour effectuer certains calculs sont obtenues laide dun formulaire (Form). Dans celui-ci, sont inclus diffrents objets interagissant entre eux et permettant lutilisateur de saisir les informations : champs de texte, boutons radio, cases cocher, etc. (TextBox, OptionBox, CheckBox, etc.). En Excel, le principe est le mme : au lieu de saisir les informations lintrieur de TextBox, il sagit dutiliser les cellules incluses dans une feuille de calcul. Exemple simple : Je veux obtenir 2 nombres et afficher le rsultat de la somme. En VB, le code pourrait ressembler celui-ci.
Formulaire.Reponse.Text = Val(Formulaire.Nombre1.Text) + Val(Formulaire.Nombre2.Text)

En VBA, le code ressemblerait


Range("A1").Value = Range("A2").Value + Range("A3").Value

Note : Puisque la plupart du temps en Excel nous manipulons des chiffres, il nest pas ncessaire dutiliser une commande comme Val ou CDbl pour convertir du texte en nombre. Voici une vue densemble des objets et collections les plus couramment utiliss en Visual Basic pour Excel. Noubliez pas quune collection est un ensemble dobjets ou dautres collections pouvant avoir certaines proprits et pouvant aussi interagir avec dautres lments.
Objets et collections Visual Basic pour Excel Workbooks (Objet et collection)

Worksheets (Objet et collection)

Workbook (Objet)

Charts (Objet et collection)

Range (Objet)

Worksheet (Objet)

Autres objets (Objet)

Introduction Visual Basic pour Microsoft Excel

23

Btir une macro simple


lintrieur de Microsoft Excel, un petit sous-programme qui interagit avec les objets dExcel est appel une macro. Pour crer une macro par soi-mme, il suffit daller dans le menu Outil, Macro, diteur Visual Basic.

Pour dbuter la programmation, il suffit de slectionner la feuille Excel dans laquelle la routine sera compose et daller dans le menu Affichage, Code. Nous voulons reproduire le mme tableau que dans la section prcdente. Pour ce faire, nous pouvons crer une macro Excel qui fera ce boulot.

Introduction Visual Basic pour Microsoft Excel

24

Dbutons la programmation avec la cration de la routine CreerTableau.


Sub CreerTableau() End Sub

Nous allons construire ce qui est inclus dans les cellules B1:C1. La construction du contenu des autres cellules sera explique un peu plus loin.
Sub CreerTableau() 'Ces deux lignes servent saisir l'information dans les cellules Range("B1").Value = "Prestation de dcs" Range("C1").Value = 10000 'Ces lignes servent changer l'apparence du contenu des cellules Range("B1:C1").Font.Name = "Arial" Range("B1:C1").Font.Size = 12 Range("B1:C1").Interior.ColorIndex = 34 Range("B1:C1").Borders(xlEdgeTop).Weight = xlMedium Range("B1:C1").Borders(xlEdgeBottom).Weight = xlMedium Range("B1:C1").Borders(xlEdgeLeft).Weight = xlMedium Range("B1:C1").Borders(xlEdgeRight).Weight = xlMedium Range("B1").Font.Bold = True Range("C1").Style = "Currency" 'Ces lignes servent modifier la largeur des colonnes Columns("B").ColumnWidth = 25 Columns("C").ColumnWidth = 15 End Sub

Il est important de comprendre le fonctionnement de lobjet Range. Premirement, cet objet correspond une plage de cellules ou une cellule. Cet objet a certaines proprits (Value, Style) et contient aussi certains objets (Font, Interior, Borders). Ces derniers ont leurs propres proprits ou attributs (Name, Size, Interior, Weight). Remarquez aussi la hirarchie entre les diffrents objets. Par exemple, la proprit Name appartient lobjet Font qui lui appartient lobjet Range. Cette hirarchie est dfinie avec les points. En lisant de gauche droite nous pouvons dire Lobjet Range contient lobjet Font qui lui a la proprit Name qui a t fixe Arial. Note : Lobjet Font nappartient pas qu lobjet Range ; il peut aussi servir par exemple, lobjet ChartTitle qui est aussi un objet.

Introduction Visual Basic pour Microsoft Excel

25

Gestion des cellules et des plages de cellules : objets et mthodes de base


Range
Syntaxe
Range("cellule") Range("plage") Range("cellule1,cellule2,,celluleN") Range("plage1,plage2,,plageN")

Retourne un objet de type Range correspondant la plage de cellule ou cellule correspondante. Exemple
Range("A1") Stocke en mmoire le contenu de la cellule A1 et ses proprits Range("A1:B6") Stocke en mmoire le contenu de la plage A1:B6 et ses proprits Range("A1,C4,D6") Stocke en mmoire le contenu des cellules A1,C4,D6, etc. Range("A1:B6, C3:D4") Stocke en mmoire le contenu des plages A1:B6 et C4:D4, etc.

Columns ou Rows
Syntaxe
Columns("lettre de colonne") Columns(# de colonne) Rows(# de ligne)

Retourne un objet de type Range correspondant la colonne spcifie ou la ligne spcifie. Exemple
Columns("C") Stocke en mmoire le contenu de la colonne C et ses proprits Columns(3) Row(10) Columns("C").Font.Bold = True Appliquera le style gras toutes les cellules de la colonne C.

Introduction Visual Basic pour Microsoft Excel

26

Selection
Syntaxe
Selection

Retourne un objet de type Range correspondant la cellule ou la plage de cellules slectionne. Exemple
Selection.Font.Bold = True slectionne Applique la mise en forme gras la plage

ActiveCell
Syntaxe
ActiveCell

Retourne un objet de type Range correspondant la cellule active. Par exemple, si la cellule A1 est active, la saisie dinformation au clavier se fera alors pour la cellule A1. Exemple
ActiveCell.Font.Bold = True slectionne Applique la mise en forme gras la cellule

Offset
Syntaxe
ObjetRange.Offset(position relative en ligne, position relative en colonne)

Retourne un objet de type Range correspondant la cellule positionne de faon relative ObjetRange. Exemple
Range("C8").Offset(-1,-2).Value quivaut Range("A7").Value

Introduction Visual Basic pour Microsoft Excel

27

Cells
Syntaxe
ObjetRangeOUWorksheet.Cells(position en ligne, position en colonne) ObjetRangeOUWorksheet.Cells(ime cellule)

Retourne un objet de type Range correspondant la position fournie en argument. Exemple


Range("B1:D4").Cells(2,2).Value quivaut Range("C2").Value Worksheets("Feuille").Cells(1,3).Value quivaut Range("C1").Value Range("B1:D4").Cells(4).Value quivaut Range("B2").Value

Activate
Syntaxe
ObjetRangeCellule.Activate

Mthode qui permet dactiver une cellule. Par exemple, si la cellule A1 est active, la saisie dinformation au clavier se fera alors pour la cellule A1. Exemple
Range("A1").Activate

Select
Syntaxe
ObjetRange.Select

Mthode qui permet de slectionner une cellule ou une plage de cellule. Exemple
Range("A1:A15,C2:C26").Select

Remarque
Pour obtenir le contenu (valeurs ou textes) compris dans un certain objet Range et le stocker lintrieur dune variable, il faut avoir un objet Range comprenant QUUNE seule cellule.

Introduction Visual Basic pour Microsoft Excel

28

Exemple (les prochaines lignes sont correctes)


Dim variable as Variant variable = ActiveCell.Value variable = Range("A1").Value variable = Selection.Value Fonctionne si seulement UNE cellule est slectionne variable = Range("C8").Offset(-1,-2).Value

Exemple (les deux dernires sont incorrectes)


Dim scalaire as Variant Dim tableau(1 to 4,1 to 4) as Variant scalaire = Range("A1:D4").Value tableau = Range("A1:D4").Value

La proprit Value ne sapplique que si lobjet Range correspond UNE cellule. Il est quand mme possible dobtenir les valeurs contenues dans une plage de cellules avec la proprit Cells. Il faut par contre itrer sur toutes les lignes et les colonnes de la plage. Dans le cas o lobjet Range correspond UNE cellule, il nest pas ncessaire dutiliser la proprit Value pour obtenir le contenu de la cellule.

Truc pour la manipulation rptitive du mme objet


Lorsquon doit travailler souvent avec le mme objet, il peut devenir trs rptitif de toujours crire la source de celui-ci. Par exemple, nous avons d rpter plusieurs reprises Range("B1:C1"). On peut par contre utiliser la structure With End With qui permet de fixer lutilisation dun objet. Par exemple, la routine que nous avons conue plus tt aurait pu tre crite de cette faon.
Sub CreerTableau() 'Ces deux lignes servent saisir l'information dans les cellules Range("B1").Value = "Prestation de dcs" Range("C1").Value = 10000 'Ces lignes servent changer l'apparence du contenu des cellules With Range("B1:C1") .Font.Name = "Arial" .Font.Size = 12 .Interior.ColorIndex = 34 .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End With Range("B1").Font.Bold = True Range("C1").Style = "Currency" 'Ces lignes servent modifier la largeur des colonnes Columns("B").ColumnWidth = 25 Columns("C").ColumnWidth = 15 End Sub

Introduction Visual Basic pour Microsoft Excel

29

Nous poursuivrons lexemple du tableau aprs avoir regard la programmation conditionnelle et les itrations.

Gestion des feuilles de calculs et des classeurs : objets et mthodes de base


Afin de mener bon port la construction dune macro quelconque, il est souvent essentiel de bien savoir manipuler les classeurs ainsi que les diverses feuilles les composant. la fin de cette section, vous serez capable douvrir des classeurs, de les enregistrer et de les fermer laide des commandes Visual Basic pour Excel. Tout dabord, regardons les diverses commandes excuter pour manipuler des objets de type classeur (Workbook) et feuilles de calcul (Worksheet).

Workbooks
Syntaxe
Workbooks("nom du classeur") Workbooks(# du classeur)

Retourne un objet de type Workbook (classeur) correspondant au nom de classeur spcifi. Avec un objet Workbook en mmoire, il est ainsi possible dexcuter certaines mthodes applicables aux classeurs tels que son ouverture, sauvegarde, fermeture, etc. Remarque La spcification du nom du classeur nest pas obligatoire (par exemple si vous voulez utiliser certaines mthodes relatives aux classeurs en gnral, vous verrez plus loin). Par contre, si vous devez manipuler un classeur spcifique, largument devient obligatoire. Exemple
Workbooks("Classeur1") Retourne un objet de type Workbook correspondant au classeur Classeur1. Vous pourrez donc manipuler le classeur Classeur1 (fermer, sauvegarder, etc.) Workbooks(1) Mme chose, mais correspond au premier classeur ouvert.

Introduction Visual Basic pour Microsoft Excel

30

ActiveWorkbook
Syntaxe
ActiveWorkbook

Retourne un objet de type Workbook correspondant au classeur prsentement actif (slectionn). Exemple
ActiveWorkbook.Close Ferme le classeur actif

Worksheets ou Sheets
Syntaxe
Worksheets("nom de la feuille de calcul") Worksheets(# de la feuille de calcul) Sheets("nom de la feuille de calcul") Sheets(# de la feuille de calcul)

Retourne un objet de type Worksheet (feuille de calcul) correspondant au nom de la feuille de calcul spcifi. Avec un objet Worksheet en mmoire, il est ainsi possible dexcuter certaines mthodes applicables aux feuilles de calculs. Remarque La spcification du nom de la feuille de calcul nest pas obligatoire (par exemple si vous voulez utiliser certaines mthodes relatives aux feuilles en gnral). Par contre, si vous devez manipuler une feuille de calcul spcifique, largument devient obligatoire. Exemple
Sheets("Feuil1") Retourne un objet de type Worksheet correspondant la feuille de calcul Feuil1 Worksheets("Donnees").Range("A1").Value Permet dobtenir le contenu de la cellule A1. La cellule A1 est un objet de type Range. Un objet de type Range appartient un objet de type Worksheet (Worksheets("Donnees") permet dobtenir un objet de type Worksheet correspondant la feuille Donnees). Puis, Value est une proprit associe un objet de type Range (Range("A1") permet dobtenir un objet Range correspondant la cellule A1).

Introduction Visual Basic pour Microsoft Excel

31

ActiveSheet
Syntaxe
ActiveSheet

Retourne un objet de type Worksheet correspondant la feuille de calcul prsentement active (slectionne). Exemple
ActiveSheet.Cells(1,1).Value Retourne le contenu de la cellule A1 de la feuille active.

Ouverture dun classeur Excel Mthode Open


Il est parfois trs utile de pouvoir ouvrir un classeur Excel afin de pouvoir lire linformation contenue dans ce classeur. Syntaxe
ObjetWorkbook.Open Filename:="chemin complet du fichier Excel"

Exemple Voici la commande qui vous permettra douvrir un classeur Excel :


Workbooks.Open Filename:="C:\Mes documents\Classeur.xls"

La commande ci-haut vous permettra douvrir le classeur nomm Classeur dans le dossier Mes documents sur le disque C.

Cration dun nouveau classeur Excel Mthode Add


Voici la commande qui vous permettra douvrir un nouveau classeur Excel ne contenant aucune information : Syntaxe
Workbooks.Add

Slection (ou activation) dun classeur ou dune feuille de calcul Mthodes Activate et Select
Afin de pouvoir accder linformation contenue dans une feuille ou dans un classeur donn, il est essentiel de slectionner la feuille ou le classeur dans lequel les commandes excutes sappliqueront.

Introduction Visual Basic pour Microsoft Excel

32

Syntaxe - Activation dun classeur


ObjetWorkbook.Activate

Exemple
Workbooks("Classeur1").Activate

Syntaxe - Activation et slection dune feuille de travail


ObjetWorksheet.Activate ObjetWorksheet.Select

Exemple
Sheets("feuil1").Select

Sauvegarde dun classeur Excel Mthodes SaveAs et Save


Aprs avoir modifier linformation contenue dans un classeur, il peut tre utile de vouloir sauvegarder cette information. Syntaxe - Sauvegarder un nouveau fichier
ObjetWorkbook.SaveAs Filename:=nom complet du nouveau fichier Excel

Exemple
ActiveWorkbook.SaveAs Filename:="C:\Mes documents\classeur1.xls"

Cette mthode vous permet de sauvegarder le classeur actif sous le nom classeur1.xls dans le dossier Mes documents sur le disque C. Syntaxe - Sauvegarder un fichier existant
ObjetWorkbook.Save

Exemple
Workbooks("Classeur1").Save

Fermeture dun classeur Excel Mthode Close


Fermer les classeurs non utiliss est une bonne habitude de programmation puisquelle permet de rduire le nombre de fichiers actifs. Syntaxe
ObjetWorkbook.Close

Introduction Visual Basic pour Microsoft Excel

33

Exemple Voici la commande qui vous permettra de fermer un classeur dont lutilisation nest plus requise.
Workbooks("Classeur1").Close

Dclaration de variables
Rappel provenant des sections prcdentes
Variable : Espace en mmoire rserv pour y stocker de linformation. Une variable peut tre de plusieurs types : numrique (entier, rel), boolen (ou logique), texte (ou chane de caractres, aussi appel string). Dans lutilisation des variables, il y a toujours deux tapes ncessaires. Premirement, la dclaration qui alloue ou rserve un espace en mmoire. Deuximement, le stockage utilise lespace qui lui est rserv pour conserver linformation voulue.

Dclaration de variables scalaires


Une variable scalaire est une variable comprenant quUNE seule information. Cette information peut tre de plusieurs types. Syntaxe Variables dont le contenu est conserv lintrieur dune procdure ou dune fonction (porte de niveau procdure)
Dim scalaire as Type Dim scalaire1, scalaire2, , scalaireN as Type Dim scalaire1 as Type1, scalaire2 as Type2, , scalaireN as TypeN

Variables dont le contenu est conserv tant et aussi longtemps que le programme principal nest pas interrompu (porte de niveau module)
Private scalaire as Type Private scalaire1, scalaire2, , scalaireN as Type Private scalaire1 as Type1, scalaire2 as Type2, , scalaireN as TypeN

Remarque Les variables porte de niveau module doivent tre dclares avant toutes les procdures du module.

Introduction Visual Basic pour Microsoft Excel

34

Types de donnes (Tableau tir du livre Excel 2000 et Visual Basic pour Applications 6) Types de donnes Valeurs acceptes Mmoire occupe Byte Nombre entier compris entre 0 et 255 1 octet Integer Nombre entier compris entre -32768 et 32768 2 octets Long Nombre entier compris entre 2147483648 et 4 octets 2147483647 Simple Nombre virgule flottante compris dans 4 octets 3.403E38 Double Nombre virgule flottante compris dans 8 octets 1.7977E308 Currency Nombre virgule fixe avec quinze chiffres pour 8 octets la partie entire et quatre chiffres pour la partie dcimales compris dans 922337203685477.5808 Il existe aussi les types de donnes String (chanes de caractres), Date, etc. Exemple
Private salaire as Double Variable porte de niveau module Sub calculeBonus() Dim bonus as Double Variable porte de niveau procdure End Sub

Dclaration de variables matrices


Une variable matrice est une variable comprenant plusieurs sries dinformations. Elle peut tre compare un tableau ou une matrice. Par contre, en Visual Basic tout comme dans tout autre langage de programmation, la variable matrice peut avoir plus que deux dimensions. Syntaxe Variables dimensions dfinies
Dim Tableau(bi1 to bs1,bi2 to bs2,, biN to bsN) as Type Private Tableau(bi1 to bs1,bi2 to bs2,, biN to bsN) as Type Dim Tableau(n1,n2,, nN) as Type Private Tableau(n1,n2,, nN) as Type

Variables dimensions indfinies


Dim Tableau() as Type Private Tableau() as Type

Lgende bi1 reprsente ladresse de la borne infrieure de la 1re dimension du tableau. bs1 reprsente ladresse de la borne suprieure de la 1re dimension du tableau. n1 reprsente le nombre dlments dans la 1re dimension du tableau.

Introduction Visual Basic pour Microsoft Excel

35

Remarques Les bi1, bs1, n1, etc. doivent tre des nombres entiers entrs par le programmeur. Ils ne peuvent reprsenter le contenu dune variable. Si aucune adresse nest dfinie, Visual Basic utilisera celle spcifie par Option Base. Si la ligne Option Base nest pas prsente et que les adresses des bornes ne sont pas dfinies, les bornes iront de 0 jusqu ni-1 Si les dimensions dune variable tableau ne sont pas dfinies, aucun contenu ne peut y tre stock tant et aussi longtemps que Visual Basic ne connat pas ses dimensions. Vous pouvez redfinir les dimensions dune variable tableau laide de la commande ReDim (voir plus loin). Exemple # 1 quoi pourraient servir les adresses des variables matrice ? Disons que vous simulez la performance dun indice boursier entre 2003 et 2050. Dclarer la variable de cette faon
Dim IndicesBoursiers(2003 to 2050) as Double

et obtenir la simulation de lanne 2023


SimulationVoulue = IndicesBoursiers(2023)

... est beaucoup plus simple que


Dim IndicesBoursiers(48) as Double SimulationVoulue = IndicesBoursiers(21)

Exemple # 2
Option Base 1 Sub NomRoutine() Dim Tableau4dimensions(10, 20, 30, 40) as Integer End Sub

est quivalent
Sub NomRoutine() Dim Tableau4dimensions(1 to 10, 1 to 20, 1 to 30, 1 to 40) as Integer End Sub

Assigner et obtenir des valeurs dune variable matrice


Lassignation dune valeur un lment dune matrice se fait peu prs de la mme faon quavec une variable scalaire (standard). Il faut videmment spcifier la position dans la matrice o il faut stocker la donne. Exemple
Dim TableStandard(1 to 50, 1 to 25) as Double Dclaration de la variable matrice TableStandard(2,3) = 1434 Stocker la valeur 1434 dans la 2e ligne, 3e colonne de la matrice Table standard. Dim Tableau4dimensions(10, 20, 30, 40) as Integer Dclaration de la variable matrice Tableau4dimensions(1,1,1,1) = 1536 Stocker la valeur 1536 la position (1,1,1,1) de la variable matrice.

Laffichage du contenu dune variable matrice se fait de faon similaire.

Introduction Visual Basic pour Microsoft Excel

36

Exemple (suite)
Range("C1").Value = TableStandard(2,3) Affiche dans la cellule C1 le contenu de la variable TableStandard la ligne 2, colonne 3.

Redim
Nous avons mentionn plus tt que les dimensions dune variable matrice doivent tre spcifies explicitement (nombres entrs directement par le programmeur) ou pas spcifies du tout. Linstruction Redim permet de redimensionner une variable matrice. Contrairement linstruction Dim, Redim peut accepter le contenu dune variable. Syntaxe
ReDim Tableau(bi1 to bs1,bi2 to bs2,, biN to bsN) as Type ReDim Tableau(n1,n2,, nN) as Type

Exemple
Dim nbresim as Integer Dim Simulations() as Double nbresim = 1000 Redim Simulations(2003 to 2003 + nbresim - 1) as Double car Dim Simulations(2003 to 2003 + nbresim - 1) as Double est illgal

Cration de routines et de fonctions personnelles


Il faut tout dabord faire la distinction entre une routine et une fonction. Premirement, une routine est un sous-programme qui excute certaines commandes. Une fonction excute aussi certaines commandes, mais en plus, retourne une certaine valeur ou tableau de valeurs.

Enregistrer une macro


Il existe plusieurs faons de crer des routines en VBA. Lune dentre elles utilise la bote de dialogue Enregistrer une macro . Cette mthode a lavantage de ne ncessiter aucune programmation par lutilisateur ; celui-ci na qu dmarrer lenregistrement de la macro, excuter ce qui doit tre emmagasin dans la macro, et arrter lenregistrement. Cette faon de faire est utilise lorsque la macro consiste en une procdure courante et rptitive que lon a faire, et que lon dsire automatiser. Voici comment procder : 1. Dans le menu Outils de Excel, slectionnez Macro, Nouvelle macro. dialogue Enregistrez une macro saffiche : La bote de

Introduction Visual Basic pour Microsoft Excel

37

Il sagit maintenant de donner un nom la macro sous Nom de la macro. Il est possible dattribuer une touche de raccourci cette macro. Gnralement, lenregistrement de la macro se fait dans Ce classeur. Il est possible dentrer une brve description de la macro. 2. Appuyez sur OK. La barre doutils Arrt de lenregistrement saffiche, indiquant que lenregistrement de la macro est en cours. Il ne reste plus qu excuter (dans lordre) tout ce qui doit se retrouver dans la macro. Par exemple, quelquun pourrait crire le chiffre 28 dans la cellule A1, changer le format de cellule en montaire pour obtenir 28,00 $ (bouton droit sur la cellule, Format de cellule, slection de Montaire sous longlet Nombre, ok), mettre la cellule en gras, pour ensuite arrter lenregistrement en appuyant sur le bouton carr de la barre doutils Arrt de lenregistrement. Une fois la macro enregistre, il est possible de lutiliser. 3. Effacez tout ce qui se trouve dans la cellule A1 (dition, Effacer, tout). 4. Choisissez Macro, puis Macros du menu Outils. La bote de dialogue Macro saffiche, vous permettant daller chercher la macro cre.

5. Appuyez sur Excuter. pralable.

La macro sexcute, et refait ce que vous avez entr au

Il est possible daller voir la programmation qui a t ncessaire la cration de cette macro, et ce de deux faons. Vous pouvez retourner la bote de dialogue Macro (montre ci-haut), et slectionner Modifier. Lditeur Visual Basic souvrira et montrera les codes. Vous pouvez galement tout simplement ouvrir Visual Basic en cliquant sur Macro, Visual Basic Editor du menu Outils.

Introduction Visual Basic pour Microsoft Excel

38

Sub Macro1() ' ' Macro1 Macro ' Macro enregistre le 2002-11-18 par James Bond ' ' Range("A1").Select ActiveCell.FormulaR1C1 = "28" Range("A1").Select Selection.NumberFormat = "#,##0.00 $" Selection.Font.Bold = True End Sub

Finalement, il est possible dinsrer un bouton dans la feuille Excel qui, lorsquon appuie dessus, excute une macro. 1. Sous le menu Affichage, slectionnez Barre doutils, Formulaires. Une bote outils apparat, que vous pouvez insrer dans la Barre doutils et de menus en haut de lcran. 2. Cliquez sur Bouton, reprsent par un petit bouton gris. Votre curseur devient une croix. Il vous suffit maintenant de dessiner un bouton de la taille dsire. Excel ouvre ensuite automatiquement la bote de dialogue Affecter une macro. Vous pouvez maintenant slectionner la macro que vous venez de crer et appuyer sur OK. Le bouton est maintenant fonctionnel, et excutera la macro lorsque lutilisateur appuie dessus. noter quil est possible de changer le texte apparaissant sur le bouton, en cliquant dessus avec le bouton droit, puis le gauche. Note importante : Les macros que vous affectez un bouton ne doivent pas recevoir darguments obligatoires.

Cration de routines personnelles


Il a t mentionn plus tt quil tait prfrable de diviser un problme en plusieurs petits problmes. Le dboguage sen trouve ainsi simplifi. Une faon dy parvenir est de crer une routine qui excutera certaines commandes. Par exemple, une routine peut reprsenter une tape importante dun algorithme. Syntaxe
[Private ou Public] Sub NomDeLaRoutine(argument1 as Type1, argument2 as Type2,) Instructions End Sub

Remarques Un peu comme une variable, la routine peut avoir une porte prive ou publique, cest-dire tre disponible un certain module Excel ou tous les modules. Si le mot private ou public est omis, la routine sera publique. Il nest pas ncessaire de spcifier des arguments la routine. Vous pouvez aussi spcifier des arguments optionnels avec des valeurs par dfaut. Voir la faon de procder dans les fonctions personnelles, plus loin. Il est galement possible dassigner un bouton une procdure cre de cette faon si la routine na aucun argument obligatoire.

Introduction Visual Basic pour Microsoft Excel

39

Exemple
Routine simple, de porte publique, sans arguments. Sub Programme() Instructions End Sub Routine plus complexe, de porte prive, avec argument. Private Sub Initialisation(NomFichier as String) Instructions End Sub

Appel de routines personnelles


Il y a deux faons dappeler des routines personnelles dans Visual Basic pour Excel. Syntaxe
Premire faon, Instruction Call Call NomDeLaRoutineSansArgument Call NomDeLaRoutineAvecArguments(Arg1, Arg2, ) Deuxime faon NomDeLaRoutineSansArgument NomDeLaRoutineAvecArguments Arg1, Arg2,

Exemple
Premire faon, Instruction Call Call Programme Call Initialisation("autoexec.bat") Deuxime faon Programme Initialisation "autoexec.bat"

Cration de fonctions personnelles


Une autre faon de faciliter le dboguage est lutilisation de fonctions personnelles qui permet de vrifier certains calculs intermdiaires ou dexcuter des calculs souvent excuts dans le programme. Une fonction est diffrente dune routine car elle retourne une valeur. Syntaxe de la cration de fonction
[Public ou Private] Function NomDeLaFonction(arguments) as Type Instructions NomDeLaFonction = expression End Function

Syntaxe des arguments (arguments)


NomArgument As Type [Optional] NomArgument As Type =(Valeur par dfaut)

Introduction Visual Basic pour Microsoft Excel

40

Remarques Un peu comme une variable, la fonction peut avoir une porte prive ou publique, cest--dire tre disponible un certain module Excel ou tous les modules. Si le mot private ou public est omis, la routine sera prive. Pour que la fonction puisse retourner une valeur, on doit absolument retrouver au moins une ligne de code ayant NomDeLaFonction = expression. Sinon la fonction retourne 0 et est inutile. La dclaration des arguments se fait la plupart du temps de la premire faon, cest-dire, NomArgument As Type. Un argument peut aussi tre optionnel, cest--dire que lutilisateur pourrait appeler la fonction de faon correcte sans spcifier de valeur pour cet argument. Par contre, une valeur par dfaut doit tre prsente. Une valeur par dfaut est une valeur utilise par un programme si lutilisateur nen spcifie aucune. Les arguments optionnels doivent tre dclars la fin. La structure des arguments prsente dans cette section sapplique aussi aux routines. Exemple Voici la cration dune fonction avec un argument qui spcifie une valeur par dfaut. Nous verrons comment appeler des fonctions avec des arguments par dfaut et la diffrence. Plus bas, la mme fonction est prsente, sans argument optionnel.
'Cet exemple, extrmement simplifi de la ralit, calcule la cotisation la RRQ. 'L'argument taux est optionnel Function CotisationRRQAvecTauxOpt(salaire As Double, Optional taux As Double = 0.035) As Double CotisationRRQAvecTauxOpt = salaire * taux End Function 'L'argument taux nest PAS optionnel Function CotisationRRQSansTauxOpt (salaire As Double, taux As Double) As Double CotisationRRQSansTauxOpt = salaire * taux End Function

Appel de fonctions personnelles


Lorsque nous avons besoin du rsultat dun calcul complexe qui est heureusement, excut lintrieur dune fonction personnelle, nous utiliserons la faon suivante pour appeler une fonction. Exemple Je voudrais calculer ma cotisation au rgime des rentes du Qubec avec mon salaire.
Dim MonSalaire, MaCotisation as Double MonSalaire = 45000 Appel de la fonction avec taux OPTIONNEL MaCotisation = CotisationRRQAvecTauxOpt(MonSalaire) Il y a 1575 dans la variable MaCotisation. Appel de la fonction avec taux OPTIONNEL

Introduction Visual Basic pour Microsoft Excel

41

MaCotisation = CotisationRRQAvecTauxOpt(MonSalaire, 0.04) Il y a 1800 dans la variable MaCotisation. Appel de la fonction SANS taux OPTIONNEL MaCotisation = CotisationRRQSansTauxOpt(MonSalaire, 0.04) Il y aura toujours 1800 dans la variable MaCotisation. Appel de la fonction SANS taux OPTIONNEL MaCotisation = CotisationRRQSansTauxOpt(MonSalaire) Retourne une erreur car le second argument nest pas optionnel.

Programmation conditionnelle
La programmation conditionnelle permet dexcuter certaines commandes selon la ralisation de certains vnements ou lobtention de certains rsultats. Pour mieux comprendre les diffrentes possibilits, le programmeur peut utiliser un diagramme de flux. Vous remarquerez que la programmation conditionnelle lintrieur de Visual Basic pour applications est la mme qu lintrieur de Visual Basic. Exemple de diagramme de flux

SI mon argent de poche est infrieur 20$ ALORS VRAI je mangerai au McDonalds FAUX SINON, je mangerai la Cage aux Sports

Aprs je ferai autre chose

Toute programmation conditionnelle ncessite la construction dune condition. Que ce soit en Visual Basic ou tout autre langage, une condition est forme par une ou plusieurs comparaisons. On forme une comparaison laide des oprateurs de comparaison et on relie les comparaisons avec les oprateurs logiques.

Introduction Visual Basic pour Microsoft Excel

42

Crer une condition


Avant tout, dfinissons les oprateurs de Visual Basic pour applications. Oprateurs de comparaison < > = <= >= <> Strictement infrieur Strictement suprieur Est exactement gal Infrieur ou gal Suprieur ou gal Est diffrent de

Oprateurs logiques Les oprateurs logiques servent unir les comparaisons pour former une condition. And Or ET (intersection) OU (union)

Notons tout dabord OPcomp pour oprateur de comparaison et OPlog pour oprateur logique. Syntaxe
Element1 OPcomp Element2 OPlog Element3 OPcomp Element4 OPlog

Remarque Lutilisation de parenthses permet de dterminer un certain ordre entre les conditions. Exemple
Ce programme dtermine si un tudiant va tre engag dans la firme dactuaires ABC Dim nbreexams as Integer Dim moyenne as Double Dim cyclesuperieur as Boolean nbreexams = 3 moyenne = 3.23 cyclesuperieur = False Exemples de condition pour engager un tudiant (nest pas bas sur la ralit exemple fictif) Lemployeur veut que ltudiant ait au moins 2 examens professionnels ET une moyenne cumulative dau moins 3. La condition est donc : nbreexams >= 2 And moyenne >= 3 Retourne vrai car VRAI ET VRAI = VRAI Lemployeur considre quun diplme de cycle suprieur quivaut aux deux examens. La condition est donc : (nbreexams >= 2 Or cyclesuperieur = True) And moyenne >= 3 Retourne vrai car (VRAI OU FAUX = VRAI) ET VRAI = VRAI nbreexams = 1

Introduction Visual Basic pour Microsoft Excel

43

cyclesuperieur = True moyenne = 3.51 Lemployeur veut que ltudiant ait au moins 2 examens professionnels ET une moyenne cumulative dau moins 3. La condition est donc : nbreexams >= 2 And moyenne >= 3 Retourne faux car FAUX ET VRAI = FAUX Lemployeur considre quun diplme de cycle suprieur quivaut aux deux examens. La condition est donc : (nbreexams >= 2 Or cyclesuperieur = True) And moyenne >= 3 Retourne vrai car (FAUX OU VRAI = VRAI) ET VRAI = VRAI

Programmation conditionnelle simple


Syntaxe
If condition Then commandes si condition est vraie (1) Else commandes si condition est fausse End If

Remarques

Peu importe la complexit de la condition, celle-ci doit tre vraie pour excuter les commandes en (1). Il est aussi possible dimbriquer plusieurs blocs If.

Syntaxe
If condition1 Then commandes si condition1 est vraie If condition2 Then commandes si condition1 Else commandes si condition1 End If Else commandes si condition1 est fausse If condition3 Then commandes si condition1 Else commandes si condition1 End If End If

ET condition2 sont vraies est vraie ET condition2 est fausse

est fausse ET condition3 est vraie ET condition3 sont fausses

On peut aussi laisser tomber le Else dans le cas o le programme ne devrait rien faire si la condition nest pas respecte.

Introduction Visual Basic pour Microsoft Excel

44

Programmation conditionnelle par cas


Syntaxe
Select Case variable Case condition1partielle commandes si condition1partielle est vraie Case condition2partielle commandes si condition2partielle est vraie Case Else Commandes si aucune condition partielle na t respecte End Select

Remarques Une condition partielle peut tre : nombre si la comparaison quivaut variable = nombre nombre1,nombre2 si la comparaison quivaut variable = nombre1 Or variable =
nombre2

nombre1 to nombreN si la comparaison quivaut variable = nombre1 Or variable = nombre2 Or Or variable = nombreN

Is OPcomp nombre si la comparaison quivaut variable OPcomp nombre Un exemple viendra claircir le tout.
(Exemple tir de laide de Visual Basic)
Select Case performance Case 1 si performance=1 Bonus = Salaire * 0.1 Case 2, 3 si performance = Bonus = Salaire * 0.09 Case 4 To 6 si performance Bonus = Salaire * 0.07 Case Is > 8 si performance Bonus = 100 Case Else si performance = Bonus = 0 End Select

2 ou 3 = 4 ou 5 ou 6 > 8 7 ou autre valeur

Programmation itrative
Il arrive trs frquemment en programmation que certaines instructions doivent tre rptes constamment. Le nombre de rptitions peut soit tre fixe davance par une variable ou constante, ou le nombre de rptitions peut tre conditionnel lvolution dune certaine condition. Dans le premier cas, on utilisera les itrations simples, dans le second, les itrations conditionnelles.

Introduction Visual Basic pour Microsoft Excel

45

Itration simple (For Next)


Lorsque le nombre ditrations excuter est fix lintrieur du programme, que ce soit par une constante ou une variable, il est prfrable dutiliser une forme ditration simple. Syntaxe
For compteur = borneinf to bornesup Instructions Next compteur

Remarques Litration illustre dans la syntaxe produira (bornesup-borneinf+1) itrations. Pour rpter n fois une certaine instruction, la forme la plus commune ditration simple est
For compteur = 1 to n Instructions Next compteur

Il est galement possible dutiliser un compteur avec un pas diffrent de 1. En effet, si on inscrit For compteur = borneinf to bornesup Step s, la variable compteur prendra comme valeurs : borneinf, borneinf +s, borneinf +2s, etc. et litration arrtera une fois que la borne suprieure sera rencontre.

Itration conditionnelle (While Wend)


Lorsque nous voulons quune srie dinstructions sexcute tant et aussi longtemps quune certaine condition est respecte (reste vraie), nous utiliserons litration conditionnelle. Syntaxe
Instructions dinitialisation While condition Instructions si condition est vraie Wend

Remarques Les instructions dinitialisation sont celles qui permettent dentrer dans la boucle et celles qui donnent une certaine information (tel quun compteur). Un des lments formant la condition DOIT se mettre jour lintrieur de litration. La condition est btie de la mme faon qu laide de la programmation conditionnelle. Si vous voulez utiliser un compteur, vous devrez le crer (en dclarant une variable) et lincrmenter vous-mmes lintrieur de la boucle. Attention aux boucles linfini ! Assurez-vous quil est possible que la condition passe de vrai faux un jour !

Introduction Visual Basic pour Microsoft Excel

46

Gestion des botes de dialogue


Lorsque nous voudrons obtenir de linformation dun utilisateur, nous utilisons une bote de dialogue appele InputBox. La bote InputBox est utilise quand linformation transmise peut tre du texte, un nombre, etc. Toutefois, lorsque nous voulons communiquer de linformation lutilisateur ou obtenir une rponse courte (oui ou non), nous utiliserons une bote de type MsgBox.

Bote de dialogue InputBox


Au lieu dutiliser des cellules dans une feuille Excel afin dobtenir des donnes de lutilisateur, il peut tre plus convenable dutiliser une bote InputBox. Syntaxe
Variable = InputBox("question pose","titre de la boite","valeur par dfaut")

Arguments
"question pose" "titre de la boite" "valeur par dfaut"

est le texte qui apparatra dans la bote de dialogue, qui est gnralement une question pose lutilisateur. est facultatif et reprsente le titre de la bote de dialogue; sil est omis, le nom de lapplication apparatra. est lui aussi facultatif, correspond au texte apparaissant par dfaut dans la zone de texte lors de laffichage de la bote de dialogue.

Exemple Admettons que lon veuille obtenir le salaire annuel de lutilisateur. Cette procdure stockerait le salaire obtenu de lutilisateur dans la variable salaire :
Sub Salaire_annuel() Dim salaire As Single salaire = InputBox("Veuillez entrer votre salaire annuel:", _ "Saisie du salaire de l'utilisateur", 50000) End Sub

Introduction Visual Basic pour Microsoft Excel

47

noter quil est possible dinsrer des variables dans la fonction InputBox avec loprateur de concatnation & . Par exemple, si le nom de lutilisateur est inscrit dans la cellule A1, on pourrait avoir le programme suivant :
Sub Salaire_annuel() Dim salaire As Single Dim nom As String nom = Range("a1") salaire = InputBox(" " & nom & ": Veuillez entrer votre salaire annuel:", _ "Saisie du salaire de l'utilisateur", 150000) End Sub

Bote de dialogue MsgBox


Il peut tre utile de fournir un renseignement lutilisateur pendant lexcution dun programme. Dans ce cas, lutilisation de la bote MsgBox est approprie. Syntaxe Afficher une information
MsgBox "Message" MsgBox("Message", Icne, "Titre de la bote")

Arguments
"Message" Icne "Titre de la bote"

est le texte qui apparatra dans la bote de dialogue. Est en quelque sorte le message destin lutilisateur est facultatif et reprsente un nombre entier. Ce nombre correspond licne choisie dans la bote de dialogue. est lui aussi facultatif, correspond au titre de la bote de dialogue.

Exemple
Sub Investigation() MsgBox "Cet employ n'est plus rentable." End Sub

Introduction Visual Basic pour Microsoft Excel

48

Il est galement possible dobtenir des informations de la part de lutilisateur avec la bote MsgBox, lorsquil sagit de rpondre une question par laffirmative ou la ngative. Syntaxe Obtenir une information simple
Variable = MsgBox("Message", BoutonsEtIcone, "Titre de la bote")

Arguments
"Message" BoutonsEtIcone

"Titre de la bote"

est le texte qui apparatra dans la bote de dialogue. Est en quelque sorte le message destin lutilisateur est facultatif et reprsente un nombre entier. Ce nombre correspond aux boutons et icnes qui apparatront dans la bote de dialogue. Voir tableau plus bas. est lui aussi facultatif, correspond au titre de la bote de dialogue.

Remarques

La variable Variable est de type Integer. Largument BoutonsEtIcone peut sentrer de plusieurs faons. Voici un tableau qui les rsume : Constante Bouton
vbOKnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel

Valeur Description 0 1 2 3 4 5 16 32 48 64 0 256 512 768 OK OK et Annuler Abandonner, Ressayer et Ignorer Oui, Non et Annuler Oui et Non Ressayer et Annuler Message critique Question Stop Information Premier bouton Deuxime bouton Troisime Bouton Quatrime bouton

Symbole ou Icne
vbCritical vbQuestion vbExclamation vbInformation

Bouton actif par dfaut


vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4

Introduction Visual Basic pour Microsoft Excel

49

Il est possible de combiner boutons et icnes en additionnant les valeurs de la colonne du centre. Voir exemple. Lorsque lutilisateur appuie sur une touche (oui, non, annuler, etc.), la commande MsgBox retourne une valeur entire. Les valeurs sont rsumes dans le tableau suivant. Bouton Constante Valeur vbOK OK 1 vbCancel Annuler 2 vbAbort Abandonner 3 vbRetry Ressayer 4 vbIgnore Ignorer 5 vbYes Oui 6 vbNo Non 7 Ce tableau se lit de la faon suivante : si lutilisateur appuie sur le bouton Oui, alors MsgBox retourne la valeur 6. La variable Variable a donc le nombre 6 stock.

Note : Ces deux tableaux sont tirs du livre Excel 2000 et Visual Basic pour Applications 6 Exemple Si par exemple nous dsirons afficher une bote de dialogue contenant le symbole Question , dans laquelle lutilisateur pourra rpondre la question pose par Oui ou Non , largument BoutonsEtIcone sera gal 36 : 4 pour les boutons + 32 pour le symbole. Les trois instructions suivantes sont quivalentes et produisent la mme bote :
reponse = MsgBox("Autre recherche?", 36, "Recherche") reponse = MsgBox("Autre recherche?", 32 + 4, "Recherche") reponse = MsgBox("Autre recherche?", vbYesNo + vbQuestion, "Recherche")

Dans les instructions prcdentes, la variable reponse contient la rponse de lutilisateur la question. Cette rponse est en fait un chiffre; le programme interprtera ensuite ce chiffre et agira en consquence, selon les dsirs du programmeur. Exemple tir du livre Excel 2000 et Visual Basic pour Applications 6.

Introduction Visual Basic pour Microsoft Excel

50

Une vue densemble de lditeur Visual Basic


Visual Basic Editor est lenvironnement de dveloppement intgr de VBA. Voici un aperu de Visual Basic Editor :

Intressons-nous quelques lments qui pourront vous tres utiles.

Trucs de dbogage
Commande Excuter
La commande Excuter permet de mettre en marche la macro construite avec VBA. Il existe deux faons de procder lexcution de la macro. La faon la plus rapide consiste appuyer sur la touche situe dans le haut de la fentre de commande. Pour excuter la macro sans accder lditeur VBA, on doit choisir Outils/Macro/Macros comme lillustre la figure suivante :

Introduction Visual Basic pour Microsoft Excel

51

Voici la bote de dialogue qui apparatra :

Il ne suffit que denfoncer le bouton Excuter pour excuter la macro souhaite. Il est galement possible dexcuter une macro laide de la touche F5.

Excuter Pas pas


Lorsquun programme ne produit pas le rsultat escompt, sans gnrer derreurs, le premier test consiste excuter la procdure pas pas, afin den examiner le droulement et les consquences sur le document, instruction aprs instruction. Pour excuter un programme VBA pas pas, on doit adopter la procdure suivante : (1) Placer le curseur la ligne o vous souhaitez dmarrer lexcution pas pas dans la fentre de code de la procdure tester; (2) Enfoncer la touche F8 pour excuter la premire ligne du code; (3) chaque pression de la touche F8, la ligne de code suivante sera excute.

Introduction Visual Basic pour Microsoft Excel

52

Si vous tes convaincu de lexactitude de votre programme jusqu une certaine ligne, positionnez votre curseur cette ligne, appuyez sur CTRL+F8 (appuyez sur CTRL et maintenez enfonc, puis appuyez sur F8). Visual Basic aura excut les lignes avant le curseur et est prt excuter les prochaines lignes, pas--pas, avec vous. Truc : lors de la lecture pas pas dune procdure, il peut tre intressant de voir ce que contiennent les variables au fur et mesure quelles se remplissent. Lorsque vous excutez une procdure en mode pas pas, vous navez qu placer le curseur de la souris pour voir ce que contient une variable.

Points darrt
Les points darrt permettent dinterrompe lexcution dun programme sur une instruction prcise. Cette possibilit est particulirement intressante lorsque vous souponnez lorigine dune erreur. Vous pouvez ainsi excuter normalement toutes les instructions ne posant pas de problmes et dfinir un point darrt pour une instruction dont vous ntes pas sr. La procdure adopter afin dinsrer un point darrt est simple : 1. Placez le curseur sur linstruction voulue; 2. Choisir la commande Basculer le point darrt du menu Dbogage ou appuyer sur la touche F9; 3. Pour supprimer le point darrt, procder de la mme faon que pour insrer un point darrt. Autre technique Il suffit de cliquer en marge de linstruction gauche (zone grise). Linstruction en question sera mise en vidence en rouge vin, et un rond rouge vin viendra se placer en marge. Pour enlever le point darrt, il suffit de cliquer dessus nouveau. Voici une brve illustration :

Introduction Visual Basic pour Microsoft Excel

53

Fentre espions
Les espions permettent despionner les valeurs de variables ou de toute expression renvoyant une valeur dans un contexte dtermin. Voici la procdure adopter pour crer un espion : (1) Choisissez la commande Fentre espions du menu Affichage; La fentre suivante apparatra :

(2) Mettre en surbrillance la variable espionner dans la fentre de code, cliquer sur cette variable et la glisser dans la fentre espions en maintenant enfonce la touche de gauche de la souris. Dans lexemple prcdent, on obtiendrait le rsultat suivant :

En excutant le code en mode pas--pas ou laide de points darrt, vous serez en mesure de voir le contenu des variables (places dans la fentre espion) se mettre jour.

Introduction Visual Basic pour Microsoft Excel

54

Messages derreurs
Le dbogage consiste donc rgler les erreurs directement lies au code du programme et indpendantes de lenvironnement dans lequel sexcute le programme. Trois principaux types derreurs peuvent affecter un programme VBA soit les erreurs de compilation, les erreurs dexcution et les erreurs logiques.

Erreurs de compilation
Ce type derreur survient lorsque VBA rencontre une instruction quil ne reconnat pas; par exemple, lorsquun mot cl contient une faute dorthographe. On remarque que ce type derreur est gnralement le plus frquent. Si on se rfre lexemple prcdent, on aurait pu obtenir ce message derreur :

Erreurs dexcution
Ce type derreur survient aprs que la compilation du programme a t effectue avec russite. Une erreur dexcution peut par exemple, tre lie lutilisation de donnes incompatibles. Dans notre exemple, si on avait dclarer la variable nom comme un double, on aurait obtenu le message derreur suivant si on avait entr un nom en lettres lors de lexcution du programme.

Introduction Visual Basic pour Microsoft Excel

55

Dans la fentre ci-dessus le bouton Fin permet de terminer lexcution du programme, le bouton Dbogage met en surbrillance la ligne de code o VBA dtecte une erreur et le bouton Aide affiche la rubrique daide associ lerreur reconnue.

Erreurs logiques
Ce type derreur est le plus ardu corriger. Contrairement aux erreurs de compilation et dexcution, elles laissent le programme sexcuter. Le rsultat obtenu ne sera pas celui que vous escomptiez. Les erreurs logiques dcoulent gnralement dune lacune de lalgorithme. Une combinaison de la mthode pas pas et de lutilisation des espions est une bonne mthode pour contrer ce type derreurs.

Introduction Visual Basic pour Microsoft Excel

56

Suite de lexemple Construction du tableau de primes


La suite du code de lexemple a t conue de faon pouvoir pratiquer le plus de concepts possibles. Il nest pas ncessairement le plus efficace. Les lignes qui suivent comprennent tout le code ncessaire pour reproduire lillustration suivante.

'Avec ce programme, les cellules C4:C9 ne seront pas mises jour si on change 'la prestation de dcs. Il faudra excuter le programme chaque fois que la prestation 'change. 'Cette routine est fonction d'une pretation de dcs optionnelle Sub CreerTableau(Optional Prestation As Double = 10000) 'Ces deux lignes servent saisir l'information dans les cellules Range("B1").Value = "Prestation de dcs" Range("C1").Value = Prestation 'Ces lignes servent changer l'apparence du contenu des cellules With Range("B1:C1") .Font.Name = "Arial" .Font.Size = 12 .Interior.ColorIndex = 34 .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End With Range("B1").Font.Bold = True Range("C1").Style = "Currency" 'Ces lignes servent modifier la largeur des colonnes Columns("B").ColumnWidth = 25 Columns("C").ColumnWidth = 15 'Ces lignes servent Range("A3").Value = Range("B3").Value = dge x" Range("C3").Value = x" entrer le texte "x" "Probabilit de dcs dans la prochaine anne dun individu "Prime assurance temporaire un an mis l'individu d'ge

Introduction Visual Basic pour Microsoft Excel

57

Dim PlagePrimes As Range Set PlagePrimes = Range("C4:C9") For i = 0 To 5 Cells(4 + i, 1) = 35 + i Cells(4 + i, 2) = 0.015 + 0.005 * i PlagePrimes.Cells(i + 1).Value = Prestation * Cells(4 + i, 2).Value Next i 'Les prochaines lignes servent formatter le tableau (sans la bordure) Dim PlageTitre As Range Dim PlageContenu As Range Set PlageTitre = Range("A3:C3") Set PlageContenu = Range("A4:C9") PlageTitre.Font.Name = Arial PlageTitre.Font.Size = 12 PlageTitre.Font.Bold = True PlageTitre.WrapText = True PlageTitre.VerticalAlignment = xlVAlignCenter PlageTitre.HorizontalAlignment = xlHAlignCenter PlageTitre.Interior.ColorIndex = 34 With PlageContenu .Font.Name = Arial .Font.Size = 12 .HorizontalAlignment = xlHAlignCenter .Interior.ColorIndex = 6 .Columns(2).NumberFormat = "0.000" .Columns(3).Style = "currency" End With 'Les prochaines lignes appliquent la bordure With Range("A3:C9") .Borders(xlEdgeTop).Weight = xlThick .Borders(xlEdgeBottom).Weight = xlThick .Borders(xlEdgeLeft).Weight = xlThick .Borders(xlEdgeRight).Weight = xlThick End With With Range("A3:B9") .Borders(xlEdgeTop).Weight = xlThick .Borders(xlEdgeBottom).Weight = xlThick .Borders(xlEdgeLeft).Weight = xlThick .Borders(xlEdgeRight).Weight = xlThick End With With Range("A4:C9") .Borders(xlEdgeTop).Weight = xlThick .Borders(xlEdgeBottom).Weight = xlThick .Borders(xlEdgeLeft).Weight = xlThick .Borders(xlEdgeRight).Weight = xlThick End With Range("A3:A9").Borders(xlEdgeRight).Weight = xlThin 'Les valeurs xlThin, xlThick, etc. sont des nombres dont la valeur

Introduction Visual Basic pour Microsoft Excel

58

'a dja t stocke en mmoire dans ces constantes systmes. End Sub 'Cette routine permet d'appeler la routine CreerTableau avec une nouvelle 'prestation de dcs Sub PRINCIPAL() CreerTableau 15000 End Sub

Remarques Pour que les cellules C4:C9 soient mises jour ds que lon modifie la prestation de dcs, on peut enlever la ligne
PlagePrimes.Cells(i + 1).Value = Prestation * Cells(4 + i, 2).Value

et utiliser la proprit Formula associ un objet Range. Exemple


Range("C4").Formula = "=B4*$C$1"

Vous pouvez aussi mettre en pratique toutes vos connaissances de Visual Basic et Visual Basic pour Excel en faisant lexercice actuariel # 5 et en parcourant rapidement les travaux pratiques de lanne 2000.

Introduction Visual Basic pour Microsoft Excel

59

lments de programmation avance en Visual Basic pour Excel


Objet WorksheetFunction
lintrieur de Visual Basic pour Excel, le programmeur a accs aux fonctions de Microsoft Excel afin quil puisse excuter certains calculs de faon beaucoup plus rapide, cest--dire sans quil ait programmer dautres routines faisant le mme boulot. Exemple Un professeur a besoin de la moyenne des notes de ses tudiants lintrieur dune de ses routines. Supposez que celles-ci sont stockes dans la variable Notes(1 to 50) as Double.
Au lieu de faire Dim moyenne,somme as Double For i = 1 to 50 somme = somme + Notes(i) Next i moyenne = somme / 50 Le professeur peut obtenir le mme rsultat laide dune toute petite ligne de code. moyenne = WorksheetFunction.Average(Notes)

Syntaxe
VariableScalaire = WorksheetFunction.NomFonction(argument1,argument2,)

Remarques Le nom de la fonction est toujours en anglais, peu importe la langue dExcel. VariableScalaire doit tre du mme type que loutput de la fonction NomFonction. Argument1, etc. sont les arguments associs NomFonction. Ceux-ci peuvent tre le contenu de variables (de type correspondant) ou tre des objets de type Range (dont le contenu est de type correspondant). Fonctions les plus utilises (NomFonction) Fonctions mathmatiques de base SUM calcule la somme des lments AVERAGE calcule la moyenne des lments MDETERM calcule le dterminant dune matrice Fonctions statistiques MIN retourne le minimum des lments MAX retourne le maximum des lments MEDIAN retourne la mdiane des lments STDEV calcule lcart-type des lments (en supposant chantillon)

Introduction Visual Basic pour Microsoft Excel

60

STDEVP calcule lcart-type des lments (en supposant population) CORREL calcule le coefficient de corrlation entre deux sries de donnes SKEW calcule le coefficient dasymtrie (skewness) des lments KURT calcule le coefficient daplatissement (kurtosis) des lments Toutes les distributions (NORMDIST, POISSON, TDIST, GAMMADIST, etc.) Fonctions financires Fonctions logiques etc.
Nous vous invitons consulter laide dExcel pour une liste de toutes les fonctions et de leurs arguments. Remarque Lorsque certaines fonctions retournent des vecteurs ou des matrices de valeurs comme MMULT (multiplie deux matrices) et MINVERSE (inverse une matrice), lutilisation de WorksheetFunction devient un peu plus corse, mais toujours possible. Il faut remplacer VariableScalaire par une variable multi-dimension de type variable (Variant). Ceci dpend par contre de la version utilise de Microsoft Excel.

Utiliser une fonction publique Visual Basic cre par le programmeur lintrieur dun classeur
Il est possible de rendre disponible lintrieur dune feuille de calcul toute fonction publique que vous avez cre pralablement. En effet, toutes les fonctions Excel pr installes comme SOMME, MOYENNE, etc. sont en fait que des fonctions publiques cres lintrieur de Visual Basic. Par contre, vous navez pas accs ces fonctions pr installes.

Crer une fonction publique en 3 tapes simples


1. Ouvrir lditeur Visual Basic. 2. gauche dans la zone Projet, sous Objets Microsoft Excel, cliquez sur Modules et ensuite allez dans le menu Affichage, Code. Si vous ne voyez pas Modules, cliquez sur Objets Microsoft Excel avec le bouton droit de la souris, puis cliquez sur Insertion, puis Modules.

3. Crer une fonction publique de la mme faon que vous avez bti toute fonction ou sous-routine.

Introduction Visual Basic pour Microsoft Excel

61

Exemple complet
Dans Excel, il existe une panoplie de fonctions pr installes qui nous permettent dobtenir la distribution de probabilit de plusieurs lois. Nous allons crer le mme type de fonction, pour la loi uniforme continue. Excutez les deux premires tapes de la section prcdente, puis utilisez le code cidessous. Cet exemple permet de bien matriser lutilisation de lobjet WorksheetFunction, la programmation conditionnelle par cas ainsi que la structure With End With.
Public Function UniformContDist(x As Double, a As Double, b As Double, cumulative As Boolean) 'a est la borne 'b est la borne 'cumulative est 'la fonction de infrieure de la distribution uniforme suprieure de la distribution uniforme un argument de type booleen. Si true alors la fonction calculera rpartition x. Sinon, la fonction de densit sera value x.

Select Case cumulative Case True With WorksheetFunction UniformContDist = .Min(.Max((x - a) / (b - a), 0), 1) End With Case False UniformContDist = 1 / (b - a) End Select End Function

Ensuite, retournez dans une feuille de calcul Excel. Dans la cellule A1, entrez =UniformContDist(5 ; 3 ; 7 ; TRUE) et vous obtiendrez 0.50. Ceci est bel et bien la fonction de rpartition dune loi uniforme centre sur lintervalle [3,7] valu 5. Entrez la mme fonction, mais remplacez TRUE par FALSE et vous obtiendrez 0.25, soit la fonction de densit. Vous pouvez aussi insrer cette fonction dans une cellule en allant dans le menu Insertion, Fonction. Vous trouverez UniformContDist dans la section Fonctions personnalises. Noubliez pas qu lintrieur de cette fonction vous avez la libert de tout crer comme si ctait une autre fonction ou une autre routine, rendant cette fonctionnalit de Visual Basic, trs utile dans plusieurs situations.

Dclaration de variables de type Object


Jusqu maintenant, nous avons vu quune variable pouvait stocker des nombres, des chanes de caractres, des dates, etc. Il est aussi possible de stocker dans une variable un objet et ses proprits. Une fois lobjet stock, cette variable se manipule comme si ctait un objet standard. Par contre, lassignation dans une variable objet ne se fait pas comme lhabitude. Il faut utiliser la commande Set.

Introduction Visual Basic pour Microsoft Excel

62

Dclaration de variables de type Object


Syntaxe
Dim VariableObjet as NomObjet Private VariableObjet as NomObjet

Exemple La feuille avec laquelle nous travaillons le plus souvent est la feuille Principale. Par contre, plusieurs donnes vitales sont stockes dans la feuille Donnees et il est souvent ncessaire dy faire rfrence. Il est possible dutiliser la structure With End With, par contre il faut utiliser celle-ci chaque rfrence. Nous utiliserons donc une variable de type Objet pour y faire rfrence. suivre un peu plus loin pour stocker lobjet dans la variable.
Dim MaPlageRef as Range

Assignation dans une variable de type Object


Syntaxe
Set VariableObjet = ObjetDeTypeNomObjet

Exemple (suite)
Set MaPlage = ActiveWorkbook.Worksheets("Donnees").Range("A1:C1")

Remarque
ObjetDeTypeNomObjet doit tre une instruction qui retourne un objet de type NomObjet.

Mthode InputBox
Nous avons vu un peu plus tt que la fonction InputBox permettait lutilisateur de saisir une information lorsque celle-ci tait demande. Cette information tait stocke directement dans une variable standard. La mthode InputBox quant elle permet lutilisateur de saisir une information qui est considre par Visual Basic comme tant un objet. Par exemple, cette information peut tre une plage une cellule, une formule, etc. Syntaxe
Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)

Arguments
Prompt Title Default Left

(Requis) Reprsente le texte qui sera affich. Par exemple, Slectionnez une plage de cellules. (Optionnel) Reprsente le titre de la bote de dialogue. (Optionnel) Reprsente la valeur par dfaut dans la zone de saisie. (Optionnel) Position horizontale de la bote de dialogue par rapport au coin suprieur gauche de lcran.

Introduction Visual Basic pour Microsoft Excel

63

Top HelpFile HelpContextId Type

(Optionnel) Position verticale de la bote de dialogue par rapport au coin suprieur gauche de lcran. (Optionnel) Spcifie le nom du fichier daide associ la bote de dialogue (Optionnel) Spcifie lidentification de la page daide associ au fichier daide spcifi avec HelpFile. (Optionnel) Type de donnes allant tre entres par lutilisateur. Reprsente un nombre. Type de donnes acceptes par la mthode InputBox Valeur de type 0 1 2 4 8 16 64 Type de donne retourn par InputBox Formule Valeur numrique Chane de caractres Valeur logique (Vrai ou Faux) Objet de type Range Valeur derreur Tableau de valeurs (Array)

Exemple Nous allons btir une bote de dialogue qui permettra lutilisateur de spcifier une plage de cellules.
Sub Dialogue() Dim MaPlage As Range Dclare une variable de type objet Range

Set MaPlage = Application.InputBox(Prompt:="Slectionnez une plage de cellules", Title:="Bote de dialogue", Type:=8) Assigne dans la variable objet MaPlage la plage saisie par lutilisateur On peut donc travailler avec la plage de cellules spcifie par lutilisateur. MsgBox MaPlage.Cells(2, 1) Affiche llment situ la 2e ligne, 1re colonne de la plage spcifie par lutilisateur MaPlage.Font.Size = 20 Applique la taille de police 20 la plage spcifie par lutilisateur. End Sub

Introduction Visual Basic pour Microsoft Excel

64

Anciens travaux pratiques de lanne 2000


Cette section comprend les anciens travaux pratiques du cours Basic et Visual Basic avec la solution complte. Ils sont inclus dans le seul but de comprendre que le langage Visual Basic pour Excel est le mme que le langage Visual Basic. La mthode de documentation prsente dans cette section est celle suggre par M. Marcel Dupras.

Travail pratique # 1
Contexte
On voudrait calculer lesprance de la variable alatoire Z qui se dfinit comme tant, E[X ] . E [Z ] = E [Y ] La variable alatoire X peut seulement prendre les valeurs 1 et 2, tandis que la variable alatoire Y peut prendre les valeurs 2 et 4. Vous devez demander lutilisateur, en utilisant la fonction InputBox, de fournir Pr(X=1) et Pr(Y=2). Votre programme devra calculer le reste. La rponse devra tre affiche laide dun MsgBox.

Solution
Sub Esperance() '****************************************************************************** 'Description du programme : Calculer l'esprance de la variable Z partir de l'esprance de X et Y. 'L'esprance de X et Y sont calcules partir de deux probabilits saisies par l'utilisateur. ' 'Pr-conditions : L'utilisateur devra fournir pour P(X=1) et P(Y=2) des valeurs de probabilits situes entre 0 et 1. 'Post-conditions : Le rsultat final sera un nombre, qui correspondra l'esprance de Z et sera affich. '******************************************************************************

'****************************************************************************** ' Dclaration des variables ' Variables dont le contenu est fourni par l'utilisateur Dim v_px1 As Double 'P(X=1) : variable d'entre (Input) ==> probabilit que l'vnement X prenne la valeur 1 Dim v_py2 As Double 'P(Y=2) : variable d'entre (Input) ==> probabilit que l'vnement Y prenne la valeur 2 ' Variables dont le contenu est calcul Dim v_px2 As Double 'P(X=2) : variable intermdiaire de traitement ==> probabilit que l'vnement X prenne la valeur 2 Dim v_py4 As Double 'P(Y=4) : variable intermdiaire de traitement ==> probabilit que l'vnement Y prenne la valeur 4 Dim v_ex As Double 'E(X) : variable intermdiaire de traitement ==> esprance mathmatique de l'vnement X Dim v_ey As Double 'E(Y) : variable intermdiaire de traitement ==> esprance mathmatique de l'vnement Y Dim v_ez As Double 'E(Z) : variable de sortie (Output) ==> esprance mathmatique de l'vnement Z ' Les valeurs possibles de X et Y auraient pu tre entres dans des constantes l'aide de la commande Const '****************************************************************************** ' Si on suppose que la pr-condition est satisfaite... '******************************************************************************

Introduction Visual Basic pour Microsoft Excel

65

' 1re tape : Obtenir les donnes de l'utilisateur ' Donnes fournies par l'utilisateur ' - P(X=1) ' - P(Y=2) ' Entre des donnes par l'utilisateur On Error GoTo Erreur 'Gestion des erreurs 1: v_px1 = InputBox("Veuillez entrer la probabilit que X soit gal 1." & Chr(10) & "P(X=1) ?" & Chr(10) & "N.B. P(X=1) doit tre compris entre 0 et 1.", "P(X=1) ?", "0,5") Select Case v_px1 ' Validation de la probabilit de X=1 Case Is < 0 MsgBox "La valeur de P(X=1) doit tre suprieure 0.", vbOKOnly + vbExclamation, "Erreur !" GoTo 1: Case Is > 1 MsgBox "La valeur de P(X=1) doit tre infrieure 1.", vbOKOnly + vbExclamation, "Erreur !" GoTo 1: Case Else GoTo 2: End Select '******** 2: v_py2 = InputBox("Veuillez entrer la probabilit que Y soit gal 2." & Chr(10) & "P(Y=2) ?" & Chr(10) & "N.B. P(Y=2) doit tre compris entre 0 et 1.", "P(Y=2) ?", "0,5") Select Case v_py2 ' Validation de la probabilit de Y=2 Case Is < 0 MsgBox "La valeur de P(Y=2) doit tre suprieure 0.", vbOKOnly + vbExclamation, "Erreur !" GoTo 2: Case Is > 1 MsgBox "La valeur de P(Y=2) doit tre infrieure 1.", vbOKOnly + vbExclamation, "Erreur !" GoTo 2: Case Else GoTo 3: End Select ' Avec plus de notions en programmation, au lieu de supposer que les valeurs entres sont correctes, le programme ferait ' lui-mme cette vrification ==> Chose qui a t faite avec les Select Case ' P(X=1) est stock dans v_px1 et P(Y=2) est stock dans v_py2 '******************************************************************************

'****************************************************************************** ' 2e tape : Calculs... ' a) P(X=2) ' b) P(Y=4) ' c) E(X) ' d) E(Y) ' e) E(Z) ' Donnes calcules et autognres ' - P(X=2) = 1 - P(X=1) ' - P(Y=4) = 1 - P(Y=2) ' - Esprance de X E(X) = 1*P(X=1) + 2*P(X=2)

Introduction Visual Basic pour Microsoft Excel

66

' - Esprance de Y E(Y) = 2*P(Y=2) + 4*P(Y=4) ' - Esprance de Z E(Z) = E(X)/E(Y) 3: v_px2 = 1 - v_px1 'a) v_py4 = 1 - v_py2 'b) v_ex = v_px1 + 2 * v_px2 'c) v_ey = 2 * v_py2 + 4 * v_py4 'd) v_ez = v_ex / v_ey 'e) ' En calculant P(X=2) et P(Y=4) en faisant respectivement 1 - P(X=1) et 1 - P(Y=2), il est vident que la somme des ' probabilits pour X et Y va donner 1 pour chacun. ' P(X=2) est stock dans v_px2 ' P(Y=4) est stock dans v_py4 ' E(X) est stock dans v_ex ' E(Y) est stock dans v_ey ' E(Z) est stock dans v_ez ==> sera le rsultat affich en 3. '******************************************************************************

'****************************************************************************** ' 3. Afficher le rsultat MsgBox "L'esprance mathmatique de Z = " & v_ez, vbInformation + vbOKOnly, "E(Z) = " & Round(v_ez, 2) '****************************************************************************** Exit Sub 'Post-condition satisfaite : Le rsultat (esprance de Z) a t affich et correspond un nombre. Gestion des erreurs Erreur: MsgBox "Le programme a renvoy une erreur." & Chr(10) & "L'utilisateur n'a pas entr un nombre ou a appuy sur Annuler", vbOKOnly + vbExclamation, "Erreur inattendue !" End Sub

Travail pratique # 2
Contexte
Votre programme devra calculer la valeur actuelle dun seul paiement, en connaissant le taux dintrt et le temps. Ces donnes doivent tre entres par lutilisateur dans une feuille de calcul Excel. Avant dexcuter le calcul, le programme doit avertir (MsgBox) lutilisateur de la dmarche suivre pour assurer le bon fonctionnement du programme. Voici dailleurs ce quoi il pourrait ressembler.

Vous ntes pas obligs dutiliser un bouton tel que sur lillustration.

Introduction Visual Basic pour Microsoft Excel

67

Solution
'****************************************************************************** 'DESCRIPTION DU PROGRAMME : Renvoyer la valeur actuelle d'un paiement lorsque le taux d'intrt est i ' et la dure est de n 'PR-CONDITIONS : 'a) On suppose que l'utilisateur a compris le message d'avertissement et qu'il entrera les donnes dans les bonnes cellules 'b) Le paiement vf actualiser doit tre un nombre rel positif 'c) Le taux d'intrt i doit tre un nombre rel positif, o 10% correspond au nombre 10. 'd) La dure n doit tre aussi un nombre rel positif, o n est un nombre d'annes et la partie dcimale, des fractions d'une anne 'POST-CONDITION : La valeur actuelle du paiement est affiche dans 2 cellules droite de la dernire, et correspond un 'nombre rel positif. '****************************************************************************** '****************************************************************************** 'Dclarations des variables et constantes Private p_vf As Double ' variable d'entre (Input) ==> correspond la valeur future du paiement actualiser Private p_i As Double ' variable d'entre (Input) ==> correspond au taux d'actualisation (taux d'intrt) Private p_n As Double ' variable d'entre (Input) ==> correspond au nombre d'annes Private p_va As Double ' variable de sortie (Output) ==> correspond la valeur actuelle du paiement '****************************************************************************** Sub PRINCIPAL() MsgBox "Pour bien utiliser ce programme il faut... " & Chr(10) & "1) Entrer le paiement actualiser dans la cellule B4. " & Chr(10) _ & "2) Entrer le taux d'intrt dans la cellule C4 sous cette forme : 10 pour 10%, 5 pour 5%, etc..." & Chr(10) & _ "3) Entrer le nombre d'annes dans la cellule D4.", vbOKOnly + vbExclamation, "Avertissement !" 'A: Pr-conditions a) d) satisfaites Call Obtenir Call Calcul Call Afficher End Sub '****************************************************************************** ' 1re tape : Obtenir les donnes de l'utilisateur Sub Obtenir() Range("A1").Activate p_vf = ActiveCell.Offset(3, 1).Value 'Aurait pu tre : Range("B4").Value p_i = ActiveCell.Offset(3, 2).Value / 100 'Aurait pu tre : Range("C4").Value / 100 p_n = ActiveCell.Offset(3, 3).Value 'Aurait pu tre : Range("D4").Value 'A: La valeur du paiement est stocke dans p_vf, le taux d'intrt est stock dans p_i, et le nombre d'annes est stock dans p_n End Sub '****************************************************************************** ' 2e tape : Calculer la valeur actuelle... en rfrence avec la fonction Sub Calcul() p_va = ValActuelle(p_vf, p_n, p_i) 'A: La valeur actuelle du paiement est stocke dans p_va

Introduction Visual Basic pour Microsoft Excel

68

End Sub '****************************************************************************** ' 3e tape : Afficher la valeur actuelle Sub Afficher() ActiveCell.Offset(3, 5) = Round(p_va, 2) End Sub ' A: Post-condition satisfaite : la valeur actuelle du paiement est affich dans la bonne cellule '****************************************************************************** ' PR-CONDITIONS DE LA FONCTION ' Le contenu de l'argument fv doit tre un nombre rel positif ' Le contenu de l'argument n doit tre un nombre rel positif ' Le contenu de l'argument i doit tre un nombre rel positif, o 10% = 0,1 ' POST-CONDITIONS DE LA FONCTION ' ValActuelle renvoie la valeur actuelle du paiement (fv) plac pendant n annes au taux d'intrt i. ' Il s'agit d'un nombre rel positif. Function ValActuelle(fv, n, i) ' Description des arguments ' fv : correspond la valeur future du paiement ' n : correspond au nombre d'annes pour actualiser le paiement ' i : correspond au taux d'intrt ' A: Pr-condition satisfaite car la pr-condition de la procdure suppose les mmes pr-conditions que pour la ' fonction ValActuelle = fv * (1 + i) ^ (-n) ' A: Post-condition satisfaite : la valeur actuelle est calcule. End Function

Travail pratique # 3
Contexte
Vous travaillez dans une compagnie dassurance automobile et vous tes chargs de la tarification dun produit dassurance. On vous demande de btir un programme qui calculera les primes selon certaines caractristiques de lassur tels que lge, le sexe, et la ville. Lassur peut aussi choisir certaines mesures de rduction du risque telles quune franchise (dductible) et une limite de couverture. On suppose que la distribution dun sinistre est exponentielle avec quations

f X ( x ) = e x
La prime pure est donc

d +L

PP =

d Avec les simplifications, on a,

(x d ) f (x )dx + Lf (x )dx
X X d +L

Introduction Visual Basic pour Microsoft Excel

69

PP =

e d e ( d + L )

Lassur choisit ses modalits de couverture (limite et franchise). Selon ses caractristiques, la prime brute est calcule de la faon suivante.

Le type de ville habit par lassur dtermine le paramtre lambda. Lambda vaut 1/10000 pour une petite ville, 1/15000 pour une moyenne ville et 1/20000 pour une grande ville. Ensuite, on calcule la prime pure (PP) avec les quations prcdentes. Lge et le sexe dtermineront le facteur dajustement appliquer la prime. Le facteur de dpart est 1. Un assur masculin a une surprime de 10% et un assur fminin, un rabais de 15% par rapport la prime de base. Un assur g entre : o 16 et 25 ans : surprime de 20% o 26 et 40 ans : aucune surprime o 41 59 ans : rabais de 10% o 60 ans 100 ans : surprime de 10% Les facteurs sont additifs, cest--dire quun homme de 20 ans a une surprime de (20%+10%=30%). Les lments comme la franchise (compris entre 0 et 1000$), la limite de couverture (compris entre 5000$ et 50000$), lge, le sexe et la ville doivent tre obtenus laide de 5 InputBox. La rponse doit tre affiche avec un MsgBox.

Solution
'****************************************************************************** 'DESCRIPTION DU PROGRAMME : Le programme doit calculer la valeur de la prime d'assurance-automobile en tenant compte ' de certains facteurs tels que la limite de couverture, la franchise, la ville, l'ge et le sexe de l'assur. 'PR-CONDITIONS : 'a) La limite de couverture doit tre un nombre entier positif compris entre 5 000 et 50 000$ 'b) La franchise doit tre un nombre entier positif compris entre 0 et 1 000$ 'c) L'utilisateur doit entrer 1 s'il habite dans une petite ville, 2 s'il s'agit d'une moyenne ville et 3 dans le cas ' d'une grande ville 'd) L'ge doit tre un entier positif compris entre 16 et 100. 'e) L'utilisateur doit entrer M ou m s'il est un homme, ou F ou f si elle est une femme. 'NOTE: PUISQUE LE PROGRAMME PRINCIPAL EST DIVIS EN SOUS-PROGRAMMES, SELON LES TAPES DE L'ALGORITHME, LES PR ET POST 'CONDITIONS S'APPLIQUENT DONC POUR TOUTES LES PROCDURES. 'POST-CONDITION : La valeur de la prime est un nombre rel positif affich dans un MsgBox. '****************************************************************************** '******************************************************************************

Introduction Visual Basic pour Microsoft Excel

70

'Dclarations des variables et constantes Private v_limite As Long 'variable d'entre (EN) ==> contient la limite de couverture de l'assur Private v_deductible As Long 'variable d'entre (EN) ==> contient la franchise de l'assur Private v_ville As Byte 'variable d'entre (EN) ==> contient le numro de la type de ville qu'habite l'assur Private v_age As Byte 'variable d'entre (EN) ==> contient l'ge de l'assur Private v_sexe As String * 1 'variable d'entre (EN) ==> contient le sexe de l'assur (M ou m ou F ou f) Private v_lambda As Double ' variable intermdiaire de calcul ==> contient le facteur lambda qui dpend du type de ville ' habite par l'assur Private v_facteur As Double 'variable intermdiaire de calcul ==> contient un facteur d'augmentation ou de diminution de ' la prime selon l'ge ou le sexe de l'assur Private v_prime As Double ' variable de sortie (SO) ==> contient la prime calcule et ajuste par le facteur '****************************************************************************** Sub PRINCIPAL() ' Procdure qui appelle toutes les sous-routines (tapes de l'algorithme) Call Obtenir Call Calcul Call Afficher End Sub '****************************************************************************** Sub Obtenir() ' 1re tape : Obtenir les donnes de l'utilisateur MsgBox "Bienvenue au programme de calcul des primes d'assurance-automobile" & Chr(10) & "Veuillez rpondre aux questions qui vont suivre", vbInformation + vbOKOnly, "Bienvenue !" v_limite = InputBox("Veuillez entrer une limite de couverture d'assurance." & Chr(10) & "N.B. Cette limite doit tre comprise entre 5 000$ et 50 000$", "Limite de couverture", 50000) 'A: Pr-condition a) satisfaite. La limite de couverture est un nombre entier positif compris entre 5 000 et 50 000$ et ' est stock dans v_limite v_deductible = InputBox("Veuillez entrer le dductible (franchise)." & Chr(10) & "N.B. Cette franchise doit tre comprise entre 0$ et 1000$", "Franchise", 500) 'A: Pr-condition b) satisfaite. La franchise (dductible) est un nombre entier positif compris entre 0 et 1 000$ et ' est stock dans v_deductible v_ville = InputBox("Veuillez entrer le type de ville dans lequel vous vivez." & Chr(10) & "Choix de rponses :" & Chr(10) & _ "1) Petite ville" & Chr(10) & "2) Moyenne ville" & Chr(10) & "3) Grande ville", "Type de ville", 1) 'A: Pr-condition c) satisfaite. Le type de ville est un nombre entier qui est soit 1, 2 ou 3 (selon la ville) et ' est stock dans v_ville v_age = InputBox("Veuillez entrer votre ge." & Chr(10) & "N.B. Vous devez tre g entre 16 et 100 ans pour tre couvert", "ge", 20) 'A: Pr-condition d) satisfaite. L'ge est un nombre entier positif compris entre 16 et 100 et est stock dans v_age v_sexe = InputBox("Veuillez entrer votre sexe." & Chr(10) & "M pour masculin et F pour fminin", "Sexe", "m") 'A: Pr-condition e) satisfaite. Le sexe est une chaine de caractre qui est soit M, m, F ou f ' et est stock dans v_sexe End Sub '****************************************************************************** Sub Calcul() '2e tape : Calculer la prime selon les facteurs modifiant celle-ci

Introduction Visual Basic pour Microsoft Excel

71

' **************************** Select Case v_ville 'Dtermination de la valeur de lambda selon le type de ville habite par l'assur Case Is = 1 v_lambda = 1 / 10000 Case Is = 2 v_lambda = 1 / 15000 Case Is = 3 v_lambda = 1 / 20000 End Select ' A: La valeur de lambda a t dtermine par le programme et est stocke dans la variable v_lambda ' **************************** ' **************************** v_facteur = 1 'Le facteur de modification de la prime par dfaut est de 1 (bref, aucun changement) Select Case v_sexe ' Modification de la prime selon le sexe de l'assur Case Is = "m" v_facteur = v_facteur + 0.1 Case Is = "f" v_facteur = v_facteur - 0.15 Case Is = "M" v_facteur = v_facteur + 0.1 Case Is = "F" v_facteur = v_facteur - 0.15 End Select Select Case v_age ' Modification de la prime selon l'ge de l'assur Case 16 To 25 v_facteur = v_facteur + 0.2 Case 26 To 40 v_facteur = v_facteur + 0 Case 41 To 59 v_facteur = v_facteur - 0.1 Case 60 To 100 v_facteur = v_facteur + 0.1 End Select ' A: La valeur de notre facteur de modification de la prime a t calcul par le programme et est stock dans la ' variable v_facteur ' **************************** ' Calcul de la prime finale l'aide de la fonction et du facteur v_prime = Esperance(v_deductible, v_limite, v_lambda) * v_facteur ' A: Prime finale calcule et stocke dans la variable v_prime End Sub '****************************************************************************** Sub Afficher() ' 3e tape : Afficher la prime l'aide d'un MsgBox MsgBox "La prime d'assurance-automobile est de " & Round(v_prime, 2) & " $", vbOKOnly, "Prime" ' A: Post-condition satisfaite : la valeur de la prime est un nombre rel positif et a t affiche dans un MsgBox End Sub

'****************************************************************************** ' PR-CONDITIONS DE LA FONCTION ' Le contenu de l'argument deductible doit tre un nombre entier compris entre 0 et 1000 et reprsente la franchise

Introduction Visual Basic pour Microsoft Excel

72

' dans l'intgrale (calcul de la prime de base) ' Le contenu de l'argument limite doit tre un nombre entier compris entre 5 000 et 50 000$ et reprsente la limite ' de couverture dans l'intgrale (calcul de la prime de base) ' Le contenu de l'argument lambda peut prendre seulement trois valeurs et reprsente un certain facteur selon la ville ' de l'assur qui ajuste le risque de sinistre et ce, dans l'intgrale (calcul de la prime de base) ' POST-CONDITIONS DE LA FONCTION ' Esperance calcule la prime de base et reprsente un nombre rel positif Function Esperance(deductible, limite, lambda) ' A: Pr-conditions satisfaites Esperance = (Exp(-deductible * lambda) - Exp(-lambda * (deductible + limite))) / (10 * lambda) ' A: Post-condition satisfaite : la prime de base a t calcule End Function ' Rsultat de l'intgrale (voir plus de dtails dans les feuilles incluses avec le TP) ' E(x) = (e ^ (-deductible * lambda) - e ^ (-lambda * (deductible + limite))) / lambda

Travail pratique # 4
Contexte
Vous devez btir un programme qui va trouver, laide de la mthode de la bissectrice, la valeur de la racine carre de 2. Cette mthode sapplique pour trouver le zro dune fonction. Trouver la racine carre de 2 est quivalent trouver le zro de la fonction f(x) = x^22=0. La mthode de la bissectrice consiste sparer plusieurs intervalles en 2. Lintervalle de dpart doit tre tel que la fonction peut tre positive et ngative dans cet intervalle. On spare lintervalle en 2 et le sousintervalle dans lequel il y a changement de signe implique que le zro de la fonction est dans cette zone. On rpte cette tape plusieurs fois jusqu ce quon ait atteint une borne derreur maximale ou un maximum ditrations. Lutilisateur doit entrer les paramtres laide dInputBox, cest--dire le nombre maximal ditrations et lerreur maximale permise.

Solution
Sub ZeroFonction() ' /////////////////////////////////////////////////////////////////////////////////////// ' OBJECTIF : l'aide de la mthode de la bissection, trouver le zro de la fonction ' f(x) = x^2 - 2 ' ' PR-CONDITIONS : ' a) Le nombre d'itrations maximal que l'utilisateur doit entrer doit tre un nombre compris ' dans [1..32767] (ENT_MAX) ' b) La marge d'erreur que l'utilisateur doit entrer doit tre un nombre rel compris dans ' [0..1] ' ' POST-CONDITION : ' Le programme renvoie un intervalle trs petit dans lequel le vrai zro de la fonction ' est situ. la limite, chaque borne de cet intervalle tend vers le zro de la fonction.

Introduction Visual Basic pour Microsoft Excel

73

' On pourrait dfinir z comme tant la valeur au milieu de cet intervalle qui sera un nombre ' rel. ' /////////////////////////////////////////////////////////////////////////////////////// ' /////////////////////////////////////////////////////////////////////////////////////// ' Dclaration des variables et constantes Dim m_erreur As Double ' Variable d'entre (EN) ==> correspond la marge d'erreur maximale ' accepte par l'utilisateur Dim it_max As Integer ' Variable d'entre (EN) ==> correspond au nombre de pas (itrations) que ' le programme doit excuter Dim n As Integer ' Variable intermdiaire de calcul ==> correspond au nombre d'itrations en cours ' Il s'agit d'un accumulateur Dim a As Double ' Variable intermdiaire de calcul ==> correspond la borne infrieure du grand ' intervalle Dim b As Double ' Variable intermdiaire de calcul ==> correspond la borne suprieure du grand ' intervalle Dim x1 As Double ' Variable intermdiaire de calcul ==> correspond la borne infrieure et ' suprieure des sous-intervalles Dim binf As Double ' Variable intermdiaire de calcul ==> correspond la borne infrieure de ' l'intervalle dans lequel est situ le zro de la fonction Dim bsup As Double ' Variable intermdiaire de calcul ==> correspond la borne suprieure de ' l'intervalle dans lequel est situ le zro de la fonction Dim z As Double ' Variable de sortie (SO) ==> correspond au zro de la fonction approxim ' A: Rien d'obtenu de l'utilisateur, pr-conditions a) et b) satisfaites ' ///////////////////////////////////////////////////////////////////////////////////////

' **** 1re tape : Obtenir les donnes de l'utilisateur **** it_max = InputBox("Veuillez entrer le nombre maximal d'itrations" & Chr(10) & "Cette valeur doit tre comprise entre 1 et 32767", "Nombre maximal de pas", 32767) m_erreur = InputBox("Veuillez dfinir la marge d'erreur" & Chr(10) & "La marge d'erreur doit tre comprise entre 0 et 1", "Marge d'erreur maximale", 0.0000000001) ' A: 1 <= it_max <= 32767 o it_max est un entier qui contient le nombre de pas maximal, ' obtenue de l'utilisateur, stocke dans it_max ' A: 0 <= m_erreur <= 1 o m_erreur est un nombre rel qui contient la marge d'erreur maximale, ' obtenue de l'utilisateur, stocke dans m_erreur ' A: Aucun affichage du zro de la fonction ' **** 2e tape : Calculer le zro de la fonction l'aide de la boucle **** 'A: Situation initiale (SI) ==> 4e tape : Conditions d'initialisation a = 1 ' La valeur de la borne infrieure de l'intervalle initial est de 1 b = 2 ' La valeur de la borne suprieure de l'intervalle initial est de 2 x1 = (a + b) / 2 ' x1 est le point milieu de l'intervalle initial, correspondra aux bornes ' infrieures et suprieures des 2 sous-intervalles n = 0 ' Le nombre d'itrations qui a t excut est de 0 ' 1re tape : Dfinir une hypothse de rcurrence ' A: HR ' a) a est toujours la borne infrieure du grand intervalle ' b) b est toujours la borne suprieure du grand intervalle ' c) x1 est toujours la borne infrieure et suprieure des sous-intervalles ' d) binf est la borne infrieure du sous-intervalle choisi (celui dans lequel est le zro de la fonction) ' e) bsup est la borne suprieure du sous-intervalle choisi (celui dans lequel est le zro de la fonction) ' f) it_max contient toujours le nombre maximal d'itrations

Introduction Visual Basic pour Microsoft Excel

74

' g) m_erreur contient toujours la marge d'erreur maximale accepte par l'utilisateur ' 2e tape : Dfinir la condition d'arrt ' A: Conditions d'arrt ==> la boucle s'arrtera ds qu'une OU l'autre de ces conditions est atteinte ' - La valeur absolue de (a-b) est infrieure la marge d'erreur entre par l'utilisateur ' - Le nombre d'itrations excutes est gal au nombre d'itrations maximal entr par l'utilisateur ' 3e tape : Concevoir le corps de l'itration While (Abs(a - b) >= m_erreur) And (n < it_max) ' Dbut du progrs ' A: La valeur absolue de (a-b) est >= la marge d'erreur ' et le nombre d'itrations excute est infrieur au nombre maximal de pas entr par l'utilisateur ' A: pr-conditions a), b), f) et g) de HR satisfaites If f(a) < 0 And f(x1) > 0 Then ' Vrification du sous-intervalle qui contient le zro de la fonction binf = a bsup = x1 ' A: Si le zro de la fonction est compris dans cet intervalle, alors les bornes choisies sont a et x1 Else binf = x1 bsup = b ' A: Si le zro de la fonction est compris dans cet intervalle, alors les bornes choisies sont x1 et b End If ' A: pr-conditions c) e) de HR satisfaites a = binf b = bsup x1 = (a + b) / 2 n=n+1 'A: Les valeurs de a, b et x1 sont mises jour suite la slection du bon sous-intervalle, afin que ce sousintervalle ' soit redivis en 2 autres sous-sous-intervalles ' Fin du progrs Wend ' A: La valeur absolue de (a-b) est < la marge d'erreur ' OU le nombre d'itrations excute est gal au nombre maximal de pas entr par l'utilisateur z = x1 ' A: Le zro de la fonction est stock dans la variable z ' A: Situation finale (SF) ' m_erreur et it_max n'auront pas chang durant l'itration ' a correspondra la valeur de la borne infrieure de l'intervalle choisi ==> tendra vers le zro de la fonction ' b correspondra la valeur de la borne suprieure de l'intervalle choisi ==> tendra vers le zro de la fonction ' x1 correspondra la valeur de la borne suprieure de l'intervalle choisi ==> sera la moyenne des 2 bornes ' n correspondra au nombre d'itrations ncessaires pour renvoyer un zro de la fonction qui respecte ' les conditions de la boucle ' z contiendra le zro de la fonction ' **** 3e tape : Afficher le zro de la fonction **** MsgBox "Le zro de la fonction f(x) = x - 2 est de : " & Chr(10) & Round(z, 9), vbInformation, "Zro de la fonction en " & n & " itrations" 'A: Post-condition satisfaite : le zro de la fonction a t affich et correspond un nombre rel.

Introduction Visual Basic pour Microsoft Excel

75

End Sub ' /////////////////////////////////////////////////////////////////////////////////////// ' OBJECTIF DE LA FONCTION ' Calculer la valeur de f(x) = x^2 - 2 ' ' PR-CONDITIONS DE LA FONCTION ' Le contenu de l'argument x doit tre n'importe quel nombre rel ' ' POST-CONDITIONS DE LA FONCTION ' f calcule la valeur f(x) = x - 2 lorsque x est un nombre rel, et renvoie f(x) Function f(x) ' A: Pr-conditions satisfaites f=x^2-2 ' A: Post-condition satisfaite : la valeur de f(x) a t calcule End Function

Travail pratique # 5
Contexte
Vous devez btir un programme qui calcule et retourne le nombre de faons que l'on peut distribuer " n " balles distinctes dans " r " urnes. Si les capacits de lordinateur sont dpasses, aucune erreur VB doit apparatre ; seul un message provenant du programme doit avertir lutilisateur.

Solution
Sub Rpartition() ' Description : ' Le programme calcule et retourne le nombre de faons que l'on peut distribuer " n " balles 'distinctes dans " r " urnes. ' Pr-condition : ' 1. L'utilisateur fournit un entier " n " dans l'intervalle [1..ENTIER_MAX] reprsentant le nombre de balles rpartir. ' 2. L'utilisateur fournit un entier " r " dans l'intervalle [1..ENTIER_MAX - n + 1] reprsentant le nombre d'urnes. ' 3. " n " doit tre plus grand ou gale " r ". ' Post condition : ' 1. " n " et " r " sont les entiers fournis par l'utilisateur. ' 2. Si les calculs ne dpassent pas la capacit de l'ordinateur, le programme a affich le nombre de faons qu'on peut distribuer les " n " balles dans les " r " urnes. ' 3. Si les calculs dpassent la capacit de l'ordinateur, le programme a affich " Entier trop grand ". ' Dclaration des variables et constantes Dim nballes As Long ' Variable d'entre (EN) ==> contient le nombre de balles (compris entre 1 et ENTIER_MAX) Dim nurnes As Long ' Variable d'entre (EN) ==> contient le nombre d'urnes (compris entre 1 et ENTIER_MAX balles + 1) Dim nfacons As Long ' Variable de sortie (SO) ==> contient le nombre de faons d'organiser n balles dans r urnes.. est un entier compris dans 1.. ENTIER_MAX ' A: Rien d'obtenu de l'utilisateur, pr-conditions 1 3 satisfaites ' **** 1re tape : Obtenir les donnes de l'utilisateur ****

Introduction Visual Basic pour Microsoft Excel

76

nballes = InputBox("Veuillez entrer le nombre de balles, compris entre 1 et ENTIER_MAX", "Nombre de balles") nurnes = InputBox("Veuillez entrer le nombre d'urnes, compris entre 1 et ENTIER_MAX - Balles + 1", "Nombre d'urnes") ' A: 1 <= nballes <= ENTIER_MAX o nballes est un entier qui contient le nombre de balles, a t obtenue de l'utilisateur ' A: 1 <= nurnes <= (ENTIER_MAX - nballes + 1) o nurnes est un entier qui contient le nombre d'urnes, a t obtenue de l'utilisateur ' A: Aucun affichage du nombre de faons ' **** 2e tape : Calculer le nombre de faons **** ' Vrification si la fonction Factorielle a renvoy 0 (Entier trop grand)... If (Factorielle(nballes) = 0) Or (Factorielle(nurnes - 1) = 0) Or (Factorielle(nurnes + nballes - 1) = 0) Then ' **** 3e tape : Afficher le rsultat **** MsgBox "Entier trop grand", vbExclamation + vbOKOnly, "Erreur !" ' A: Post-condition satisfaite : la fonction a dpass la capacit, le programme a renvoy "Entier trop grand" Else ' Si Factorielle n'a pas renvoy 0 pour chaque terme de la combinaison, nfacons sera bien calcul nfacons = Factorielle(nballes + nurnes - 1) / (Factorielle(nballes) * Factorielle(nurnes - 1)) ' **** 3e tape : Afficher le rsultat **** MsgBox "Il y a " & nfacons & " faons de rpartir " & nballes & " balles dans " & nurnes & " urnes", vbInformation + vbOKOnly, "Rsultat" ' A: Post-condition satisfaite : la fonction a pu calculer les factorielles, le nombre de facons a t affich End If End Sub Function Factorielle(k As Long) As Long ' Pr-condition : ' Le paramtre " k " reu de la procdure appelante doit tre un entier dans [0..ENTIER_MAX]. ' Post-condition : '1. L'entier " k " est celui reu en paramtre. '2. Si k = 0, la fonction retourne 1. '3. Si k > 0, la fonction retourne k! si les calculs ne dpassent pas la capacit de l'ordinateur et elle retourne 0 s'ils la dpassent. '4. L'excution de cette fonction ne modifie rien d'autre l'extrieur de celle-ci. ' Dclaration des variables et constantes Const ENTIER_MAX As Long = 2147483647 ' Contient la valeur maximale stocke dans un LONG Dim Test As Long ' Contient une valeur infrieure ENTIER_MAX... permet de valider si k! va entrer dans ENTIER_MAX Dim CpteurTest As Long ' Contient le compteur ou diviseur pour valider mon test Dim n As Long ' Contient le compteur pour calculer la factorielle... n * (n-1) *... ' A: Pr-condition satisfaite Select Case k Case Is = 0 Factorielle = 1 ' A: Post-condition 2 satisfaite Case Is = 1 Factorielle = 1 Case Else ' Tests si l'on peut calculer la factorielle de k ' Principe : Si on divise ENTIER_MAX par k! et que le rsultat appel Test est >= 1, alors k! entre dans ENTIER_MAX ' sinon, elle va dfoncer ! ' 4e tape : Condition d'initialisation ' A: Conditions d'initialisation de ma boucle de test

Introduction Visual Basic pour Microsoft Excel

77

CpteurTest = k ' Compteur ou diviseur au dpart est gal k Test = ENTIER_MAX / CpteurTest ' Test au dpart est gal ENTIER_MAX / CpteurTest ' 1re tape : Dfinir l'hypothse de rcurrence ' A: HR ' - Test est toujours la valeur de rfrence pour savoir si k! va dpasser les capacits de l'ordinateur ' - CpteurTest est toujours la valeur qui va diviser Test ' Ces deux variables sont toujours mises jour tout au long de l'itration ' 2e tape : Dfinir la condition d'arrt ' A: Condition d'arret : CpteurTest doit tre infrieur ou gal 1 car je divise par 3, par 2... et j'arrte. Pourquoi diviser par 1 ' ET la boucle s'arrte ds que Test est infrieure 1 car on sait que si Test < 1, alors on dpasse les capacits de l'ordinateur ' 3e tape : Corps de l'itration While (CpteurTest > 1) And (Test >= 1) ' Dbut du progrs ' A: CpteurTest est > 1 et Test est >= 1 CpteurTest = CpteurTest - 1 ' Compteur qui diminue par CpteurTest, par CpteurTest-1, par CpteurTest-2, etc... Test = Int(Test / CpteurTest) ' Valeur entire car toutes les variables sont de type LONG ' A: Pr-conditions de HR satisfaites ' Fin du progrs Wend ' A: CpteurTest <= 1 OU Test < 1 If Test >= 1 Then ' Le test est ncessairement concluant 'A: Initialisation de l'itration... Factorielle = 1 Factorielle = 1 For n = 2 To k Factorielle = Factorielle * n ' Incrmentation de n chaque itration.. sur le principe de la factorielle Next n ' Incrmentation du compteur automatique avec n ' A: Puisque le test a t concluant, Factorielle contient k! Else Factorielle = 0 ' A: La fonction renvoie 0 si elle a dpass la capacit.. si Test < 1, Factorielle = 0 End If End Select ' A: Post-condition 4 satisfaite End Function

Introduction Visual Basic pour Microsoft Excel

78

Rfrences
Bidault, Mikal. Excel 2000 & Visual Basic pour Applications 6. Campus Press, Simon & Schuster Macmillan. 1999. 534 pages. Aide en ligne de Microsoft Excel et Visual Basic pour Excel. Notes de cours, Basic et Visual Basic, Anne 2000.