Visual Basic Pour Application EXCEL 2000

download Visual Basic Pour Application EXCEL 2000

of 67

Transcript of Visual Basic Pour Application EXCEL 2000

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    1/67

    Visual Basic pour Application

    EXCEL 2000

    Institut National Agronomique Paris-Grignon

    Juliette Dibie-Barthlemynovembre 2005

    U.E.R. dInformatique

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    2/67

    PLAN

    I. Introduction excel VBA_________________________________________________1

    II. Lenregistreur de macro________________________________________________ 2 II.1. Enregistrer une macro____________________________________________________ 2

    II.2. Excuter une macro______________________________________________________ 4

    II.3. Exercice________________________________________________________________ 4

    III. Lenvironnement Visual Basic Editor _____________________________________ 5

    III.1. Lexplorateur de projets __________________________________________________ 6

    III.2. Les modules de code______________________________________________________ 7

    III.3. Les procdures __________________________________________________________ 8

    III.4. Modifier une macro ______________________________________________________ 9III.5. Exercice_______________________________________________________________ 10

    IV. Les divers moyens pour excuter une macro ______________________________11

    IV.1. Excuter une macro partir d'un raccourci clavier___________________________ 11

    IV.2. Excuter une macro partir d'un bouton d'une barre d'outils__________________ 12

    IV.3. Excuter une macro partir d'un menu ____________________________________ 14

    V. Le modle objet dExcel _________________________________________________ 16

    V.1. Les objets _____________________________________________________________ 16

    V.2. Les collections__________________________________________________________ 16V.3. Laccs aux objets ______________________________________________________ 17

    V.4. Exercice_______________________________________________________________ 17

    V.5. Les proprits des objets _________________________________________________ 18

    V.6. Exercice_______________________________________________________________ 18

    V.7. Les mthodes des objets__________________________________________________ 19

    V.8. Exercice_______________________________________________________________ 19

    V.9. Les vnements_________________________________________________________ 20

    V.10. Exercice ____________________________________________________________ 22V.11. Lexplorateur dobjets ________________________________________________ 23

    V.12. Comment obtenir de laide : quelques astuces _____________________________ 25

    VI. Les fonctions dfinies par lutilisateur ___________________________________ 26

    VI.1. Crer une Fonction personnalise _________________________________________ 27

    VI.2. Exercice_______________________________________________________________ 28

    VI.3. Utiliser les fonctions intgres dExcel______________________________________ 29

    VI.4. Exercice_______________________________________________________________ 30

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    3/67

    VII. Le langage VBA _____________________________________________________31

    VII.1. Les variables et les constantes __________________________________________ 31La dclaration des variables ___________________________________________________________ 31Le type des variables_________________________________________________________________ 32La porte des variables _______________________________________________________________ 34

    La dclaration des constantes __________________________________________________________ 34Linstruction With...End With__________________________________________________________ 35Exercice___________________________________________________________________________ 35

    VII.2. Excuter une procdure sans argument __________________________________ 36

    VII.3. Les entres et sorties standards _________________________________________ 37La fonction MsgBox _________________________________________________________________ 37La fonction InputBox ________________________________________________________________ 39

    VII.4. Rcapitulatif sur les parenthses et les listes darguments ___________________ 40

    VII.5. Exercice ____________________________________________________________ 41

    VII.6. Les noncs conditionnels ______________________________________________ 42

    Linstruction If crite sur une seule ligne__________________________________________________ 42Le bloc If__________________________________________________________________________ 42

    VII.7. Les noncs itratifs___________________________________________________ 44La boucle Do...Loop_________________________________________________________________ 44Exercice___________________________________________________________________________ 44La boucle For...Next_________________________________________________________________ 45La boucle For Each...Next____________________________________________________________ 46Linstruction Exit____________________________________________________________________ 46Exercice___________________________________________________________________________ 46

    VII.8. Les tableaux _________________________________________________________ 47Exercice___________________________________________________________________________ 47

    VII.9. Le dbogage _________________________________________________________ 48Les erreurs de compilation et dexcution_________________________________________________ 48Les erreurs Logiques _________________________________________________________________ 48

    VIII. Les objets UserForm _______________________________________________ 52

    VIII.1. Crer un objet UserForm ______________________________________________ 54

    VIII.2. Afficher et fermer un objet UserForm____________________________________ 56Afficher un objet UserForm___________________________________________________________ 56Fermer ou masquer un objet UserForm _________________________________________________ 56

    VIII.3. Associer du code un objet UserForm ___________________________________ 57Associer du code un bouton de commande_______________________________________________ 58Exercice___________________________________________________________________________ 58Initialiser un objet UserForm__________________________________________________________ 59Accder aux contrles dun objet UserForm______________________________________________ 61

    VIII.4. Afficher un objet UserForm partir dun bouton dune feuille de calcul _______ 63

    IX. Bibliographie _______________________________________________________64

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    4/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 1

    I. INTRODUCTION A EXCEL VBA

    EXCEL VBA (Visual Basic pourApplication) est un langage de programmation

    permettant dutiliser du code Visual Basic pour excuter les nombreusesfonctionnalits de lApplication EXCEL.

    Un programme crit en VBA est souvent appel une macro.

    Les macros permettent notamment dautomatiser des tches rptitives ralisessous EXCEL. Elles peuvent aussi tre utilises pour crer des botes de dialogueafin de rendre une application dveloppe sous EXCEL plus conviviale.

    Une macro peut tre cre en utilisant l'enregistreur de macros, qui nencessite aucune connaissance du langage VBA.

    Cependant une macro ainsi cre ne sexcutera que sur un ensemble de cellulesdonnes et le code produit ne sera pas toujours trs efficace. Pour pouvoir crerdes macros propres ses besoins, efficaces et interactives, il faut apprendre programmer en VBA.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    5/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 2

    II. LENREGISTREUR DE MACRO

    Lenregistreur de macro permet dcrire du code VBA partir doprations

    effectues manuellement sous EXCEL.

    II.1.ENREGISTRER UNE MACRO

    Crer une macro MACRO1 qui crit dans la cellule A1 le texte "INA P-G" encaractres gras et dans la cellule G1 la date du jour en caractres italiques.

    Avant de commencer lenregistrement, il faut se poser plusieurs questions : penser la manire deffectuer les oprations manuelles ; se demander quand commencer lenregistrement. Dans notre cas, la slection

    de la cellule A1 fait partie de lenregistrement puisquon veut que le texte"INA P-G" se trouve dans cette cellule. Si lenregistrement ne commence paspar la slection de la cellule A1, le texte tap est crit dans la cellule active.

    se demander quand arrter lenregistrement.Question : que faire pour que la cellule active aprs lexcution de la macro

    soit la cellule A1 ?

    1) Ouvrir un nouveau classeur et lenregistrer sous TEST-MACRO.XLS.

    2) Les cellules dans une macro sont identifies laide dune lettre (colonne)suivie dun chiffre (ligne), comme par exemple la cellule A1. Afin de faciliter lalecture du code VBA gnr, il est prfrable de choisir la mme identificationdes cellules dans le classeur dans lequel est enregistr la macro. Si tel nest pasle cas, activer la commande OUTILS OPTIONS, cliquer sur l'onglet GENERAL et

    dcocher la case STYLE DE REFERENCE L1C1.

    3) Positionner le curseur sur une autre cellule que la cellule A1 de la feuille decalcul FEUIL1.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    6/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 3

    4) Activer la commande OUTILSMACRONOUVELLE MACRO.

    5) Taper MACRO1 dans la zone NOMDE LA MACRO

    .6) Dans la zone E NREGISTRER LAMACRO DANS, slectionner l'option CE CLASSEUR; la macro MACRO1 nest alorsdisponible que dans le classeurTEST-MACRO.XLS.

    Remarque : La zone E NREGISTRER LA MACRO DANS permet de dterminerlendroit o la macro MACRO1 sera enregistre. Il existe trois options : Avec l'optionCLASSEUR DE MACROS PERSONNELLES, la macro est enregistre

    dans un classeur spcial appel PERSO.XLS. Ce classeur est ouvert

    automatiquement lors du lancement dEXCEL et ses macros sont doncdisponibles dans tous les classeurs ouverts. La commande FENETREAFFICHER permet dafficher ce classeur et la commande FENETRE MASQUERde le masquer.

    Loption NOUVEAU CLASSEURpermet denregistrer la macro dans un nouveauclasseur.

    Loption CE CLASSEURpermet denregistrer la macro dans le classeur actif.

    7) Cliquer sur le bouton OK.

    8) La barre d'outils ARRET DE L'ENREGISTREMENT apparat, ce quimarque le dbut de l'enregistrement. Par dfaut, l'enregistrement d'unemacro seffectue en utilisant des rfrences absolues aux cellules.

    Remarque : Il est possible denregistrer une macro en utilisant des rfrencesrelatives, en cliquant sur le bouton REFERENCE RELATIVE de la barre d'outilsARRET DE L'ENREGISTREMENT.

    9) Positionner le curseur sur la cellule A1, taper le texte "INA-PG", valider avecle bouton et slectionner le style gras (GG).

    10) Positionner le curseur sur la cellule G1, taper la formule =AUJOURDHUI(),valider avec le bouton et slectionner le style italique (II).

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    7/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 4

    11) Arrter l'enregistrement en cliquant sur le carr bleu de la barred'outils ARRET DE L'ENREGISTREMENT.

    NE JAMAIS OUBLIER DARRETER LENREGISTREMENT DUNEMACRO.

    II.2.EXECUTER UNE MACRO

    1) Effacer le contenu des cellules A1 et G1.

    2) Positionner le curseur sur une autre cellule que la cellule A1 de la feuille decalcul FEUIL1.

    3) Activer la commandeOUTILS MACRO MACROS.

    4) Slectionner la macroMACRO1 et cliquer sur le

    bouton EXECUTER.

    POUR SUPPRIMER UNE MACRO, ACTIVER LA COMMANDE OUTILSMACRO MACROS, SELECTIONNER LA MACRO A SUPPRIMER ET

    CLIQUER SUR LE BOUTON SUPPRIMER.

    II.3.EXERCICE

    Crer une macro MACROMOIS qui crit les noms de mois Janvier, Fvrier etMars en colonne partir de la cellule active. Utiliser lenregistreur de macro

    avec rfrence relative aux cellules.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    8/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 5

    III.LENVIRONNEMENT VISUAL BASICEDITOR

    Nous avons vu comment crer une macro laide de lenregistreur de macro. Nous allons maintenant examiner le code VBA produit. Pour ce faire, il faututiliser lditeur de Visual Basic, VISUAL BASIC EDITOR (VBE), qui sexcutedans une fentre diffrente de celle dEXCEL.

    Ouvrir VBE en activant la commande AFFICHAGE BARRED'OUTILS VISUAL BASIC et en cliquant sur l'objet VISUALBASIC EDITOR.

    explorateur de projets

    fentre proprits module de code

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    9/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 6

    III.1. LEXPLORATEUR DE PROJETS

    A chaque classeur EXCEL ouvert est associ un projet VBA.

    L'explorateur de projets affiche une liste hirarchise des diffrents projetsVBA associs aux classeurs EXCEL ouverts.

    Un projet VBA associ un classeur regroupe les lments du classeur, commeses feuilles de calcul ou des botes de dialogue, et les procdures et les fonctionsassocies au classeur et stockes dans un ou plusieurs modules de code.

    Le projet VBA associ au classeur TEST-MACRO.XLS est compos de deux

    dossiers : le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au

    projet : le classeur TEST-MACRO.XLS (THISWORKBOOK) et ses feuilles decalcul FEUIL1, FEUIL2 et FEUIL3 ;

    le dossier MODULES qui contient les modules de code du projet : le moduleMODULE1 qui contient la macro MACRO1.

    SAUVEGARDER REGULIEREMENT SON TRAVAIL A LAIDE DE LACOMMANDE FICHIERENREGISTRER"NOMCLASSEUR.XLS".

    LA COMMANDE FICHIER FERMER ET RETOURNER A MICROSOFT EXCELPERMET DE FERMER VBE ET DE RETOURNER DANS EXCEL.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    10/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 7

    III.2. LES MODULES DE CODE

    Lexplorateur de projets permet, laide du clic droit de la souris, douvrir un

    module de code (option CODE), dinsrer un nouveau module de code (optionINSERTION)ou den supprimer un (option SUPPRIMER).

    La commande INSERTION MODULE permet galement dinsrer un nouveaumodule de code.

    Toutes les macros sont enregistres dans un module de code. Lenregistreur demacro a insr le module de code MODULE1 qui contient la macro MACRO1. Unmodule de code peut contenir plusieurs macros. On peut insrer autant demodules de code quon le dsire.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    11/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 8

    III.3. LES PROCEDURES

    Une macro est appele en VBA une procdure, cest une suite d'instructions qui

    ne retourne pas de valeur.VBA permet galement dcrire des fonctions. Une fonction est une suited'instructions qui retourne une valeur. Nous les tudierons plus loin.

    Lenregistreur de macro ne gnre que des procdures. Une procdurecommence par le mot cl Sub suivi du nom de la procdure et dune listedarguments entre parenthses, qui peut tre vide. Elle se termine par le mot clEnd Sub. Une procdure a la syntaxe suivante :

    Sub NomProcdure([argument_1,..., argument_n])

    Instructions...End Sub

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

    Une instruction excute une tche prcise. Elle est gnralement crite sur uneseule ligne.Exemple :

    Range("A1").Select

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    12/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 9

    III.4. MODIFIER UNE MACRO

    Modifier la macro MACRO1 pour que la date du jour soit crite dans la cellule

    G2 en caractres gras et italiques.

    Avant de modifier la macro, voici quelques indications sur ses instructions : Les lignes prcdes d'une apostrophe ' et de couleur verte sont des

    commentaires. Les mots de couleur bleue sont des mots cls (Sub,End Sub, True). L'instructionRange("A1").Select slectionne (Select) une cellule (Range)

    dsigne par sa ligne (1) et sa colonne (A) L'instruction ActiveCell.FormulaR1C1 affecte une formule la cellule

    active (ActiveCell). L'instruction Selection.Font permet dappliquer un format de police

    (Font.Boldou Font.Italic) la cellule slectionne (Selection).

    1) Pour que la date du jour soit crite dans la cellule G2 (et non dans la celluleG1) en caractres gras et italiques (et non plus seulement en italique), il faut :(a) modifier l'instructionRange("G1").Select en remplaant G1 parG2; (b)ajouter la fin de la procdure l'instruction Selection.Font.Bold=True.2) Activer la commande FICHIERENREGISTRERTEST-MACRO.XLS.

    3) Retourner dans EXCEL, effacer le contenu des cellules A1 et G1, puisexcuter la macro MACRO1 laide de la commande OUTILS MACRO MACROS.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    13/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 10

    III.5. EXERCICE

    La macro MACROMOIS doit avoir peu prs le code suivant :

    Sub MacroMois()ActiveCell.FormulaR1C1 = "Janvier"ActiveCell.Offset(1, 0).Range("A1").SelectActiveCell.FormulaR1C1 = "Fvrier"ActiveCell.Offset(1, 0).Range("A1").SelectActiveCell.FormulaR1C1 = "Mars"

    End Sub

    L'instructionActiveCell.Offset(1,0).Range("A1").Select slectionne (Select)

    une cellule (Range) qui est sur une ligne en dessous et sur la mme colonne(Offset(dplacement_ligne, dplacement_colonne)) que la cellule active(ActiveCell).

    L'instruction ActiveCell.Offset(1,0).Range("A1").Select peut tre remplacepar linstruction ActiveCell.Offset(1,0).Select.

    Modifier la macro pour que le nom de mois Avril soit crit, en caractres gras etitaliques, dans la cellule qui se trouve dans la colonne de droite et sur la mme

    ligne que la cellule o est crit Janvier.Janvier AvrilFvrierMars

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    14/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 11

    IV. LES DIVERS MOYENS POUR EXECUTERUNE MACRO

    Nous vous prsentons plusieurs moyens pour excuter une macro dans EXCEL demanire plus conviviale qu partir de la commandeOUTILS MACRO MACROS.

    IV.1. EXECUTER UNE MACRO A PARTIR D'UNRACCOURCI CLAVIER

    1) Retourner dans EXCEL et activer la commande OUTILS MACRO MACROS.

    2) Slectionner la macro MACRO1 et cliquer sur le bouton OPTIONS

    3) Taper g dans la zone TOUCHEDE RACCOURCI.

    4) La zone DESCRIPTION permet

    de saisir un texte explicatif.

    5) Cliquer sur le bouton OK.

    6) Fermer la fentre MACRO en cliquant sur son bouton ANNULER ou sur sonbouton de fermeture (!!!!).

    7) Vrifier que le raccourci clavier Ctrl+g provoque l'excution de la macroMACRO1.

    SI LE RACCOURCI CLAVIER CHOISI ETAIT DEJA AFFECTE A UNECOMMANDE EXCEL, IL SERA REATTRIBUE A LA MACRO SANS QUE

    LON EN SOIT INFORME.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    15/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 12

    IV.2. EXECUTER UNE MACRO A PARTIR D'UNBOUTON D'UNE BARRE D'OUTILS

    1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER

    2) Cliquer sur l'ongletCOMMANDES et slectionnerl'option MACROS dans la listeCATEGORIES.

    3) Slectionner BOUTONPERSONNALISE dans la liste

    COMMANDES et le faire glisservers la barre d'outils.

    4) Le bouton MODIFIER LASELECTION devient alors actif.Cliquer dessus et activer lacommande AFFECTER UNEMACRO

    5) Slectionner la macro MACRO1 et cliquer sur le bouton OK.

    6) Cliquer sur le bouton FERMERde la fentre PERSONNALISER.

    nouveau bouton dans la barre d'outils

    POUR SUPPRIMER UN BOUTON D'UNE BARRE D'OUTILS, ACTIVERLA COMMANDE AFFICHAGE BARRE D'OUTILS PERSONNALISER,

    SELECTIONNER LE BOUTON DANS LA BARRE D'OUTILS, CLIQUERSUR LE BOUTON DROIT DE LA SOURIS ET ACTIVER LA COMMANDE

    SUPPRIMER. CLIQUER SUR LE BOUTON FERMERDE LA FENETREPERSONNALISER.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    16/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 13

    COMMENT CREER UNE NOUVELLE BARRE D'OUTILS ?

    1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER

    2) Cliquer sur l'onglet BARRESD'OUTILS et sur le boutonNOUVELLE

    3) Dans la zone NOM DE LA BARRED'OUTILS taper MA BARRE etcliquer sur le bouton OK.

    4) Une nouvelle barred'outils vide apparat.

    5) On peut ajouter dans cettenouvelle barre d'outils un boutonpour excuter la macro MACRO1.

    6) Cliquer sur le bouton FERMERde la fentre PERSONNALISER.

    POUR SUPPRIMER UNE BARRE D'OUTILS, ACTIVER LA COMMANDEAFFICHAGE BARRE D'OUTILS PERSONNALISER, CLIQUER SUR L'ONGLET

    BARRES D'OUTILS SELECTIONNER MA BARRE DANS LA LISTE BARRED'OUTILS ET CLIQUER SUR LE BOUTON SUPPRIMER. CLIQUER SUR LE

    BOUTON FERMERDE LA FENETRE PERSONNALISER.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    17/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 14

    IV.3. EXECUTER UNE MACRO A PARTIR D'UNMENU

    1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER

    2) Cliquer sur l'onglet COMMANDESet slectionner l'option MACROSdans la liste CATEGORIES.

    3) Dans la barre de menu dEXCEL,cliquer sur le menu FORMAT pour yinsrer le nouveau sous-menu.

    4) Slectionner ELEMENT DE MENUPERSONNALISE dans la listeCOMMANDES et le faire glisser versle menu FORMAT, sous le sous-menu STYLE

    5) Slectionner le nouveau sous-menuELEMENT DE MENU PERSONNALISE et

    cliquer sur le bouton droit de la souris(affichage du menu contextuel).

    6) Dans la zone NOM taper &TITRE (&provoque le soulignement du caractrequi suit).

    7) Activer la commande AFFECTER UNEMACRO, slectionner la macro

    MACRO1 et cliquer sur le bouton OK.8) Cliquer sur le bouton FERMER de lafentre PERSONNALISER.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    18/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 15

    COMMENT CREER UN NOUVEAU MENU ?

    1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER

    2) Cliquer sur l'ongletCOMMANDES et slectionnerl'optionNOUVEAU MENU dansla liste CATEGORIES.

    3) Slectionner NOUVEAUMENU dans la liste COMMANDESet le faire glisser vers la barrede menu entre les menusFENETRE et ?dEXCEL.

    4) Slectionner le nouveau menu NOUVEAU MENU etcliquer sur le bouton droit de la souris.

    5) Dans la zone NOM taper MENU &PERSO.

    6) On peut ajouter dans ce nouveau menu un sous-menu TITRE pour excuter la macro MACRO1.

    7) Cliquer sur le bouton FERMER de la fentrePERSONNALISER.

    POUR SUPPRIMER UN MENU (SOUS-MENU), ACTIVER LACOMMANDE AFFICHAGE BARRE D'OUTILS PERSONNALISER,

    SELECTIONNER LE MENU (SOUS-MENU), CLIQUER SUR LE BOUTONDROIT DE LA SOURIS ET ACTIVER LA COMMANDE SUPPRIMER.

    CLIQUER SUR LE BOUTON FERMERDE LA FENETRE PERSONNALISER.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    19/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 16

    V. LE MODELE OBJET DEXCEL

    Le langage de programmation VBA dpend de lapplication MICROSOFT OFFICE

    laquelle il est attach (WORD, EXCEL, ACCESS...).

    Chaque application de MICROSOFT OFFICE possde un ensemble dobjetsclairement dfinis, organiss en fonction des relations qui les unissent. Cetteorganisation sappelle le modle objet de lapplication. Par exemple, dansWORD, les objets manipuls sont des documents, des paragraphes, des mots...Dans EXCEL, les objets manipuls sont des classeurs, des feuilles de calcul, desplages, des cellules...

    Nous prsentons, dans ce chapitre, le modle objet dEXCEL.

    V.1.LES OBJETS

    VBA est un langage de programmation oriente objet attach uneapplication. Tout est objet.

    Exemple dobjets : EXCEL est un objet Application ; un classeur est un objet Workbook ; une feuille de calcul est un objet Worksheet; une plage de cellules (qui peut se limiter une cellule) est un objet Range.

    V.2.LES COLLECTIONS

    De nombreux objets appartiennent une collection d'objets, la collection tantelle-mme un objet.Exemple de collections : Dans lobjet Application, il existe une collection Workbooks qui contient

    tous les objets Workbook ouverts. Chaque objet Workbook comporte unecollection Worksheets qui contient tous les objets Worksheet de ceclasseur. Chaque objet Worksheet contient des objets Range.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    20/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 17

    V.3.LACCES AUX OBJETS

    VBA permet de faire rfrence un objet de diffrentes faons. Nous illustrons

    laccs aux objets EXCEL travers plusieurs exemples.

    Pour faire rfrence une plage de cellules donne, il faut utiliser lobjetRange.Exemple : Range("A1:B4") permet de faire rfrence la plage de cellulesA1:B4 et renvoie un objet Range.

    Pour faire rfrence un objet dans une collection, on peut soit utiliser lenumro de sa position dans la collection, soit son nom.

    Exemple :Worksheets(1) permet de faire rfrence la premire feuille de calcul duclasseur actif et renvoie un objet Worksheet.Workbooks("Classeur1.xls").Worksheets("Feuil1") permet de faire rfrence la feuille de calcul de nom Feuil1 du classeur de nom Classeur1.xls etrenvoie un objet Worksheet.

    Remarque : La notation Workbooks("Classeur1.xls").Worksheets("Feuil1")est une notation raccourcie pour Application.Workbooks("Classeur1.xls").

    Worksheets("Feuil1").Lobjet Application peut, en effet, toujours tre omis.

    V.4.EXERCICE

    Ecrire linstruction qui permet de faire rfrence la cellule B2 dans la

    deuxime feuille de calcul de nom FEUIL2 du classeur TEST-MACRO.XLS.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    21/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 18

    V.5. LES PROPRIETES DES OBJETS

    Chaque objet est dfini par un ensemble de proprits, qui reprsentent les

    caractristiques de lobjet.

    Pour faire rfrence une proprit dun objet donn, il faut utiliser la syntaxeObjet.Proprit.

    Exemple : La proprit Value de lobjet Range dsigne la valeur de lobjet spcifi.

    Range("A1").Value = "INA P-G" affecte la valeurINA P-G la cellule A1. La proprit ActiveCell de lobjet Application renvoie un objet Range, qui

    fait rfrence la cellule active de la feuille de calcul.ActiveCell.Font.Bold = True permet daffecter le style gras la celluleslectionne (Font est une proprit de lobjet Range qui retourne un objetFont contenant les attributs de police (taille, couleur, style, ...) de lobjetRange. Bold est une proprit boolenne de lobjet Font qui correspond austyle gras).

    La proprit Selection de lobjet Application renvoie lobjet slectionndans la fentre active. Le type de l'objet renvoy dpend de la slection encours.

    Remarque : La proprit ActiveCell ne permet de faire rfrence qu une seulecellule, alors que la proprit Selection permet de faire rfrence une plage decellules.

    V.6.EXERCICE

    Ecrire linstruction qui permet daffecter la valeur de la cellule B2 de ladeuxime feuille de calcul du classeur TEST-MACRO.XLS la cellule active.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    22/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 19

    V.7.LES METHODES DES OBJETS

    Les mthodes reprsentent les actions qui peuvent tre effectues par un objet

    ou que l'on peut appliquer un objet.

    Pour faire rfrence une mthode dun objet donn, il faut utiliser la syntaxeObjet.Mthode.

    Exemple :La mthode Select de lobjet Range permet de slectionner une cellule ou uneplage de cellules.Range("A1").Select slectionne la cellule A1.

    V.8.EXERCICE

    Expliquer ce que fait la macro suivante ?

    Sub MacroSelection()

    Range("A1:B6").SelectSelection.Font.Bold = TrueSelection.Value = "Bonjour"

    End Sub

    Complter cette macro pour que Bonsoir soit crit dans la cellule B6.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    23/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 20

    V.9.LES EVENEMENTS

    Un vnement est une action reconnue par un objet. La reconnaissance dun

    vnement par un objet permet de dclencher lexcution dune procdurelorsque cet vnement survient. Un clic souris ou la frappe dune touche auclavier sont des exemples dvnements qui peuvent tre interprts par du codeVBA.

    Nous verrons plus loin que les contrles placs dans une bote de dialogue(boutons de commande, zones de texte, ...) peuvent rpondre des vnements.Les classeurs et les feuilles de calcul peuvent galement rpondre desvnements.

    Pour quun objet rponde un vnement, il faut crire du code VBA dans laprocdure associe lvnement considr.

    Ecrire une procdure qui dtecte chaque nouvelle plage de cellules ou celluleslectionne par lutilisateur dans la feuille de calcul FEUIL1 du classeur TEST-MACRO.XLS et colorie son fond en bleu.

    Avant dcrire cette procdure, il faut se poser plusieurs questions : identifier lobjet dont on veut traiter lvnement. Dans notre cas, il sagit dela feuille de calcul FEUIL1 qui est un objet Worksheet ;

    identifier lvnement traiter dans la liste des vnements associs lobjetconsidr. Dans notre cas, on sintresse chaque nouvelle slection dune plage de cellules ou cellule dans la feuille de calcul, ce qui correspond lvnement SelectionChange ;

    crire le code VBA appropri dans la procdure associe lvnementchoisi.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    24/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 21

    1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic (activer lacommande AFFICHAGE BARRE D'OUTILS VISUAL BASIC et cliquer sur l'objetVISUAL BASIC EDITOR).

    2) Dans lexplorateur de projets, selectionner la feuille de calcul FEUIL1 etouvrir son module de code laide du clic droit de la souris et de loption CODE.

    3) Dans la liste de gauche au sommet du module de code, slectionner loptionWORKSHEET. Dans la liste de droite au sommet du module de code, slectionnerlvnement SELECTIONCHANGE.

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

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

    sa couleur de fond.

    Le moyen le plus facile pour dcouvrir les instructions ncessaires pour

    accomplir une opration donne consiste utiliser lenregistreur de macro.

    4) Aller dans EXCEL et enregistrer une nouvelle macroMacroCouleurFondqui permet de modifier la couleur de fond dune cellule.

    5) Retourner dans lditeur de Visual Basic et tudier le code de la macroMacroCouleurFond.

    zone Objet qui rfrencetous les objets contenus

    dans le module de code.

    zone Procdure qui rfrencetoutes les procdures et fonctionsassocies lobjet slectionn dans

    la zone Objet

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    25/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 22

    Linstruction Selection.Interior.ColorIndex = 41 semble intressante puisquelle parle de couleur. Pour obtenir de laide sur cette instruction,slectionner dans le code la proprit ColorIndex et appuyer sur la touche F1.Laide en ligne de lditeur de Visual Basic permet dobtenir les informations

    suivantes : La proprit Interior dun objet Range renvoie un objet Interior qui

    correspond la couleur de fond dune plage de cellules. La proprit ColorIndexdun objet Interior permet de dterminer la couleur

    de fond.

    Pour obtenir de laide sur un objet, une proprit ou une mthode donne,

    slectionner dans le code cet objet, cette proprit ou cette mthode et

    appuyer sur la touche F1.

    6) Retourner dans le module de code associ la feuille de calcul FEUIL1 etcomplter la procdure Worksheet_SelectionChange comme suit :Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Target.Interior.ColorIndex = 41End Sub

    La variable Target qui est un objet Range reprsente la plage de cellules oucellule slectionne par lutilisateur dans la feuille de calcul FEUIL1.

    7) Enregistrer la procdure et retourner dans EXCEL pour la tester (slectionnerune plage de cellules ou cellule et vrifier que sa couleur de fond devient bleue).

    V.10. EXERCICE

    Ecrire une procdure qui affiche Bonjour ! dans la cellule active avec la policesuivante : taille 12, style italique, couleur rouge, chaque fois que lutilisateuractive la feuille de calcul FEUIL2.

    Avant dcrire cette procdure, il faut se poser plusieurs questions : identifier lobjet dont on veut traiter lvnement ; identifier lvnement traiter dans la liste des vnements associs lobjet

    considr ; crire le code VBA appropri dans la procdure associe lvnement

    choisi.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    26/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 23

    V.11. LEXPLORATEUR DOBJETS

    Lexplorateur dobjets recense lensemble des objets disponible dans VBA, leurs

    proprits, leurs mthodes et les vnements qui leur sont associs.

    On appelle membres dun objet ses proprits, mthodes et vnementsassocis.

    Pour ouvrir lexplorateur dobjets, aller dans lditeur de Visual Basic et activerla commande AFFICHAGE EXPLORATEUR D'OBJETS.

    La zone PROJET/BIBLIOTHEQUE permet de slectionner le projet ou la

    bibliothque dobjets de son choix. Vous pouvez ne slectionner que labibliothque EXCEL.

    La zone RECHERCHER TEXTE permet de rechercher un lment (objet oumembre) dans lexplorateur dobjets. Taper llment recherch et appuyer surla touche ENTREE. Le rsultat de la recherche saffiche dans la zone RESULTATSDELARECHERCHE.

    Double cliquer sur lobjet voulu dans la colonne CLASS (le membre dans lacolonne MEMBRE) de la zone RESULTATS DE LA RECHERCHE, pour le voir

    apparatre dans la zone CLASSES (la zone MEMBRES) situe en dessous.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    27/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 24

    La zone CLASSES affiche lensemble des objets disponibles dans la bibliothqueslectionne.

    La zone MEMBRES contient lensemble des membres de lobjet slectionn dans

    la zone CLASSES. Les membres dun objet sont par dfaut classs par ordrealphabtique. Pour les classer par catgorie (proprits, mthodes etvnements), cliquer sur le bouton droit de la souris dans la zone MEMBRES etchoisir loption MEMBRES DU GROUPE.

    Des icnes permettent de distinguer les objets, les proprits, les mthodes et lesvnements.

    icne dsignant un objeticne dsignant une propriticne dsignant une mthodeicne dsignant un vnement

    La zone DETAILS situe en dessous de la zone CLASSES affiche un bref descriptifde llment slectionn dans la zone CLASSES ou dans la zone MEMBRES.

    Pour obtenir de laide sur un objet ou un membre, slectionner cet objet dansla zone CLASSES ou ce membre dans la zone MEMBRES et cliquer sur la toucheF1.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    28/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 25

    V.12. COMMENT OBTENIR DE LAIDE :QUELQUES ASTUCES

    Utiliser lenregistreur de macro pour dcouvrir les instructions VBAncessaires pour accomplir une opration donne.

    Utiliser lexplorateur dobjets pour dcouvrir les objets disponibles dans VBAet les proprits, mthodes et vnements qui leur sont associs.

    Utiliser la touche F1 pour obtenir de laide sur un objet, une proprit, unemthode ou un vnement, dans un module de code ou dans lexplorateurdobjets.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    29/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 26

    VI. LES FONCTIONS DEFINIES PARLUTILISATEUR

    VBA offre la possibilit de crer ses propres fonctions, qui peuvent tre utilisesdans EXCEL comme nimporte quelle fonction intgre.

    Une fonction est une suite d'instructions qui retourne une valeur. Ellecommence par le mot cl Function suivi du nom de la fonction et dune listedarguments entre parenthses, qui peut tre vide. Elle se termine par le mot clEnd Function. Une fonction a la syntaxe suivante :

    Function NomFonction([argument_1,..., argument_n])Instructions...NomFonction = Expression valeur de retour...

    End FunctionUne fonction indique la valeur retourner en initialisant son nom avec la valeurde retour.

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

    Attention : Dans VBA, les arguments dune fonction sont spars par desvirgules, alors que dans EXCEL ils sont spars par des points-virgules.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    30/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 27

    VI.1. CREER UNE FONCTION PERSONNALISEE

    Ecrire une fonction qui calcule la surface dun cercle partir de son rayon.

    1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic.

    2) Insrer un nouveau module de code MODULE2 et crire la fonction suivante :Function SurfaceCercle(Rayon As Double) As Double

    SurfaceCercle = WorksheetFunction.Pi() * Rayon * RayonEnd Function

    SurfaceCercleest une fonction un argument : le rayon du cercle Rayon, qui

    est une variablede type rel. Elle renvoie la surface du cercle de rayon Rayon,qui est de type rel. Pi est une fonction intgre dEXCEL.

    Attention : Dans VBA les rels sont crits avec des points, alors quils sont

    crits avec des virgules dans EXCEL.

    3) Retourner dans EXCEL et saisir les donnes suivantesdans la feuille de calcul FEUIL1 :

    4) Dans la cellule B6, saisir la formule =SurfaceCercle(A6).

    Lorsquon crit =SurfaceCercle(A6) dans la cellule B6la valeur de la celluleA6 est transmise la fonction SurfaceCercle par le biais de largumentRayon. La fonction SurfaceCercle initialise alors son propre nom avec lersultat calcul (WorksheetFunction.Pi() * Rayon * Rayon). Le rsultat estensuite retourn la cellule B6.

    5) Recopier la formule =SurfaceCercle(A6) dans les cellules B7 et B8.

    La fonction SurfaceCerclepeut tre utilise comme nimporte quelle fonctionintgre dEXCEL (commande INSERTION FONCTION... puis CATEGORIE DEFONCTIONS : PERSONNALISEES). Par contre, elle n'apparat pas dans la liste des

    macros dEXCEL (commande OUTILS MACRO MACROS).

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    31/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 28

    VI.2. EXERCICE

    Ecrire une fonction qui permet de calculer la surface dun rectangle

    (hauteur*largeur) et la tester dans EXCEL.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    32/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 29

    VI.3. UTILISER LES FONCTIONS INTEGREESDEXCEL

    Pour utiliser une fonction intgre dEXCEL dans VBA, il faut prciser VBAo peut tre trouve cette fonction. Pour cela, il faut faire prcder le nom de lafonction de lobjet WorkSheetFunction.

    Attention : Toutes les fonctions intgres dEXCEL ne sont pas disponibles dansVBA !

    Pour connatre les fonctions intgres dEXCEL disponibles dans VBA, activer lacommande AFFICHAGE EXPLORATEUR D'OBJETS danslditeur de Visual Basic et

    rechercher les membres de lobjet WorkSheetFunction.

    Attention : Il est fortement conseill dutiliser une fonction intgre dEXCEL pour faire un calcul donn, si cette dernire existe, plutt que de dfinir sapropre fonction, qui serait moins efficace en terme de temps de calcul.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    33/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 30

    VI.4. EXERCICE

    Ecrire une fonction permettant de calculer lcart entre la valeur maximale et la

    valeur minimale dune plage de cellules passe en argument laide desfonctions intgres dEXCELMax et Min et la tester dans EXCEL.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    34/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 31

    VII.LE LANGAGE VBA

    Nous prsentons dans ce chapitre les lments du langage VBA qui sont

    communs toutes les applications MICROSOFT OFFICE et plus largement auxlangages de programmation, mme si la syntaxe et les mots cls varient dunlangage lautre.

    VII.1. LES VARIABLES ET LES CONSTANTES

    La dclaration des variables

    Une variable permet de stocker une valeur pouvant tre modifie au cours delexcution dun programme.

    Le mot cl Dim permet de dclarer explicitement une variable :Dim NomVariableo NomVariable est une suite de caractres forms avec des lettres, des chiffreset le caractre soulign _. Le premier caractre est obligatoirement une lettre.Les minuscules sont distingues des majuscules.

    Le langage VBA permet de ne pas dclarer explicitement les variables. Un desintrts de la dclaration explicite des variables est dviter les erreurs defrappes malheureusement trs frquentes en programmation.

    Exemple :Sub MacroTestVariable()

    valeur = Range("A1").valueIf valleur >= 18 And valleur

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    35/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 32

    Option Explicit

    Sub MacroTestVariable()Dim valeur

    valeur = Range("A1").valueIf valleur >= 18 And valleur

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    36/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 33

    Exemple :Dim Nom As StringNom = "Jean " & "Dupond" loprateur& permet de concatner des

    chanes de caractres

    Dim Age As ByteAge = 23

    Dim MaPlage As Object variable de type ObjectSet MaPlage = Range("A1:B5") linstructionSetattribue une

    rfrence d'objet une variable

    Dim MaFeuille As Worksheet variable de type WorksheetSet MaFeuille = ThisWorkbook.Sheets(1)

    Remarque : On peut typer les arguments dune procdure ou dune fonction et lavaleur de retour dune fonction.Exemple :Function SurfaceCercle (Rayon As Double) As Double

    SurfaceCercle = WorksheetFunction.Pi() * Rayon * RayonEnd Function

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

    de mme pour les variables dclares implicitement).

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    37/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 34

    La porte des variables

    La porte dune variable dfinit quelles procdures ou fonctions peuvent utilisercette variable.

    Les variables dclares lintrieur dune procdure ou dune fonction ne sontaccessibles qu lintrieur de cette procdure ou de cette fonction.Exemple :Sub InitialiseAge()

    Dim Age As IntegerAge = 25

    End SubLa variable Age nest accessible que dans la procdure AfficheAge.

    Pour quune variable soit accessible lensemble des procdures et desfonctions dun module, elle doit tre dclare au dbut du module lextrieurde toute procdure et de toute fonction.

    Pour quune variable soit accessible lensemble des procdures et desfonctions dun projet, elle doit tre dclare au dbut dun module lextrieurde toute procdure et de toute fonction, laide du mot cl Public.Exemple :Public Age As IntegerSub AfficheAge()

    Age = 25End Sub

    La dclaration des constantes

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

    Une constante a la mme porte quune variable.

    Exemple :Public Const Pi As Single = 3.14159265358979Function SurfaceCercle (Rayon As Double) As Double

    SurfaceCercle = Pi * Rayon * RayonEnd Function

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    38/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 35

    Linstruction With...End With

    Linstruction With...End With est utile lorsque les rfrences un objet sontrptes plusieurs fois dans une petite section de code.

    Exemple :Sub ModifiePolice(MaPlage As Range)

    MaPlage.SelectSelection.Font.Size = 12Selection.Font.ColorIndex = 3Selection.Font.Italic = True

    End Sub

    La macro ModifiePolice peut tre rcrite plus simplement comme suit :Sub ModifiePolice(MaPlage As Range)MaPlage.SelectWith Selection.Font

    .Size = 12

    .ColorIndex = 3

    .Italic = TrueEnd With

    End Sub

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

    Exercice

    En saidant ventuellement de laide en ligne de lditeur de Visual Basic,expliquer ce que fait cette procdure.Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Dim NbFeuilles As IntegerDim n As IntegerDim nom As StringDim chaine As StringNbFeuilles = ThisWorkbook.Sheets.Countn = Sh.Indexnom = Sh.Namechaine = "Feuille " & n & "/" & NbFeuilles & " : " & nomRange("A1").Value = chaine

    End Sub

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    39/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 36

    VII.2. EXECUTER UNE PROCEDURE SANSARGUMENT

    Attention : Seules les procdures sans argument peuvent tre excutes

    directement !

    Les procdures avec arguments et les fonctions ne peuvent tre excutes que par dautres procdures ou fonctions et n'apparaissent pas dans la liste desmacros de la bote de dialogue MACRO (commande OUTILS MACRO MACROS deEXCEL).

    Pour excuter une procdure sans argument, positionner le curseur dessus et

    activer la commande EXECUTION EXECUTER SUB/USERFORM ou cliquer surlicne

    Pour arrter l'excution dune procdure sans argument si une erreursurvient, utiliser la commande EXECUTION REINITIALISER ou cliquer surlicne

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    40/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 37

    VII.3. LES ENTREES ET SORTIES STANDARDS

    Nous prsentons deux fonctions dentres/sorties standards de VBA : la fonction

    MsgBox et la fonction InputBox.

    La fonction MsgBox

    La fonction MsgBox affiche un message dans une bote de dialogue, attend quel'utilisateur clique sur un bouton, puis renvoie un entier indiquant le boutonchoisi par l'utilisateur. Elle a la syntaxe suivante (les arguments entre crochetssont facultatifs) :

    MsgBox(prompt[,buttons][,title][,helpfile, context])o prompt est le message affich dans la bote de dialogue, buttons correspondau type de boutons de la bote de dialogue et title est le titre de la bote dedialogue (cf. aide en ligne de lditeur de Visual Basic laide de la touche F1.).

    1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic.

    2) Insrer un nouveau module de code laide de la commande INSERTIONMODULE et saisir la macro suivante :

    Sub MacroTestMessage()Call MsgBox("Bonjour ! ", , "Accueil")End Sub

    3) Excuter la macro laide de la commande EXECUTIONEXECUTERSUB/USERFORM ou cliquer sur licne

    Les valeurs des arguments de la fonction MsgBox peuvent tre spcifies de

    deux manires : parposition ou parnom.Exemple :Dans linstruction Call MsgBox("Bonjour ! ", , "Accueil"), les valeurs desarguments sont spcifies par position : les arguments doivent alors tre saisisdans le bon ordre et des virgules supplmentaires doivent tre inclues pour lesarguments manquants.Cette instruction peut tre rcrite en spcifiant les valeurs des arguments parnom comme suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil")Lordre entre les arguments na alors plus dimportance et il ny a pas besoin devirgules supplmentaires pour les arguments manquants.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    41/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 38

    Il existe deux manires de spcifier les valeurs des arguments dune

    fonction : par position ou par nom. Lorsque les valeurs des arguments sont

    spcifies par nom, il faut utiliser le signe := entre le nom de largument et

    sa valeur.

    4) Saisir la macro suivante et lexcuter.Sub MacroTestMessage2()

    Call MsgBox(prompt:="Avez-vous pass une bonne journe? ",Buttons:=4, Title:="Accueil !")End Sub

    Largument Buttons:=4 permet dafficher les boutons Oui et Non. Au lieudutiliser la valeur numrique 4 pour largument Buttons, on aurait pu utiliser laconstante associe vbYesNo (cf. aide en ligne de lditeur de Visual Basic), quirend le code plus lisible.Call MsgBox(prompt:="Avez-vous pass une bonne journe? ",Buttons:=vbYesNo, Title:="Accueil !")

    Lutilisation de constantes VBA intgres rend le code plus lisible.

    Dans lexemple prcdent, une question est pose lutilisateur, mais sa rponsenest pas rcupre : on ne sait pas sil a pass une bonne journe. Il se posealors le problme de rcuprer la valeur de retour de la fonction MsgBox. Pource faire, il ne faut pas utiliser linstruction Callpour appelerMsgBox.reponse = MsgBox(prompt:="Avez-vous pass une bonne journe?")

    On peut tester la valeur de retour de la fonction MsgBox (cf. aide en ligne de

    lditeur de Visual Basic), comme suit :Sub MacroTestMessage3()Dim reponse As Stringreponse = MsgBox(prompt:="Avez-vous pass une bonne journe? ",

    Buttons:=vbYesNo, Title:="Accueil !")If reponse = vbYes Then

    Call MsgBox("Bonjour ! ", , "Accueil")Else

    Call MsgBox("Bonsoir ! ", , "Accueil")

    End IfEnd Sub

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    42/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 39

    La fonction InputBox

    La fonction InputBox affiche une invite dans une bote de dialogue, attend quel'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la

    zone de texte sous la forme d'une chane de caractre. Elle a la syntaxe suivante(les arguments entre crochets sont facultatifs) :InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])

    o prompt est le message affich dans la bote de dialogue et title est le titre dela bote de dialogue (cf. aide en ligne de lditeur de Visual Basic).

    Si lutilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoiela chane de caractres vide "".

    5) Saisir la macro suivante et lexcuter.Sub MacroTestDialogue()Dim reponse As Stringreponse = InputBox("Quel age avez-vous ?", "Saisie age")If reponse = "" Then

    Call MsgBox("Vous n'avez pas rpondu la question !", , "Erreur")Else

    Call MsgBox("Vous avez " & reponse & " ans", , "Age")End If

    End Sub

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

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    43/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 40

    VII.4. RECAPITULATIF SUR LES PARENTHESESET LES LISTES DARGUMENTS

    Les procdures et les fonctions peuvent avoir des arguments. Voici un petitrcapitulatif sur leur appel avec arguments.

    Pour rcuprer la valeur de retour dune fonction, il ne faut pas utiliserlinstruction Call pour lappeler.

    Exemple : reponse = InputBox("Quel age avez-vous ?", "Saisie age")

    Pour appeler une procdure ou ne pas rcuprer la valeur de retour dunefonction, il faut utiliser linstruction Call.

    Exemple : CallMsgBox("Bonjour ! ", , "Accueil")

    Attention : Il ne faut pas mettre despace entre le nom dune fonction ou

    dune procdure et la liste de ses arguments placs entre parenthses.

    Il existe un autre moyen pour appeler une procdure ou une fonction dont on neveut pas rcuprer la valeur de retour : ne pas utiliser linstruction Call et ne pasplacer ses arguments entre parenthses.Exemple :

    MsgBox "Bonjour ! ", , "Accueil"

    Lors de lappel dune procdure ou dune fonction, les valeurs de ses argumentspeuvent tre spcifies parposition ou parnom.Exemple :arguments spcifis par position

    Call MsgBox("Bonjour ! ", , "Accueil")

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

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    44/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 41

    VII.5. EXERCICE

    Ecrire une procdure qui calcule la surface dun cercle partir du rayon donn

    par lutilisateur.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    45/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 42

    VII.6. LES ENONCES CONDITIONNELS

    VBA permet de traiter les noncs conditionnels laide de linstruction If. On

    distingue linstruction If crite sur une seule ligne et le bloc If.

    Linstruction If crite sur une seule ligne

    Linstruction If crite sur une seule ligne a la syntaxe suivante :If condition Then Inst_si_vrai [Else Inst_si_faux]

    Les sections Then et Else dune instruction If ne peuvent contenir quune seuleinstruction et doivent tre crites sur une seule ligne.

    Exemple :If test = True Then Call MsgBox("Vrai") Else Call MsgBox("Faux")

    Le bloc If

    La structure de bloc If permet aux sections Then et Else de contenir plusieursinstructions. Elle peut avoir lune des deux syntaxes suivantes :

    If condition Then If condition_1 ThenInstructions_si_vrai Instructions_1[Else ElseIf condition_2 Then

    Instructions_si_faux] Instructions_2End If ElseIf condition_3 Then

    Instructions_3...

    ElseInstructions_n

    End IfDans une structure de bloc If, il faut imprativement aller la ligne aprs leThen.

    Remarque : Les crochets [ ] signifient que le bloc Else est facultatif.

    Lorsque le bloc If contient une ou plusieurs sections ElseIf, les diffrentesconditions sont testes jusqu ce quune soit value vraie. Si aucunecondition nest vrifie, les instructions de la section Else, si elle existe, sontexcutes. Si aucune condition nest vrifie et si la section Else nexiste pas, lebloc If ne fait rien.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    46/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 43

    VBA offre la possibilit dutiliser les oprateurs logiques suivants :Or, Xor (ouexclusif), And, Not.

    Exemple :

    Sub BonjourHeureIf()Dim heure As IntegerDim mes As Stringheure = Left(Time, 2) 'rcupration de l'heure, 2 caractres les plus gauche

    de la valeur de retour de la fonction Time

    If heure > 7 And heure < 12 Thenmes = "Bonjour"

    ElseIf heure >= 12 And heure < 18 Thenmes = "Bon aprs-midi"

    ElseIf heure >= 18 And heure < 22 Thenmes = "Bonne soire"

    Elsemes = "Bonne nuit"

    End IfCall MsgBox(mes)

    End Sub

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    47/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 44

    VII.7. LES ENONCES ITERATIFS

    VBA fournit deux structures pour rpter en boucle les mmes instructions :

    linstruction Do...Loop et linstruction For...Next.

    La boucle Do...Loop

    La boucle Do...Loop est utilise lorsque lon veut que la rptition desinstructions sarrte quand une condition donne est vrifie. On distingueplusieurs syntaxes possibles.

    DoWhile condition Tant que la condition est vraie, lesinstructionsInstructions sontexcutesLoop

    Do Until condition Jusqu' ce que la condition devienne vraie, lesInstructions instructions sont excutes

    Loop

    Avec ces deux boucles, les instructions peuvent ne jamais tre excutes. Pour

    quelles soient excutes au moins une fois, on peut utiliser lune des deuxsyntaxes suivantes :

    Do lesinstructions sont excutes tant que laInstructions condition reste vraie

    Loop While condition

    Do lesinstructions sont excutes jusqu ce que laInstructions condition devienne vraie

    Loop Until condition

    Exercice

    Que fait la boucle suivante (la fonction LCase convertit tous les caractres enminuscules) ? La Rcrire avec linstruction Do...Loop While.

    Dorep = InputBox("Voulez-vous continuer ? (O/N)")

    Loop Until LCase(rep) = "n"

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    48/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 45

    La boucle For...Next

    La boucle For...Next est utilise lorsque lon connait lavance le nombre defois o lon veut que les instructions soient rptes.

    For compteur = nbdbut To nbfin [Step nbpas]Instructions instructions excutes un nombre dtermin de fois

    Next compteur

    Les instructions de la boucle For...Next sont excutes un nombre dtermin defois. Lorsque loption Step nest pas renseigne, le compteur est incrment de1 chaque itration et les instructions sont excutes nbdbut - nbfinfois.Exemple :

    La procdure suivante calcule la somme des n premiers entiers :Sub SommeEntiers()Dim somme As IntegerDim compteur As IntegerDim n As Integern = InputBox("Donner un entier :", "Saisie entier")For compteur = 1 To n

    somme = somme + compteurNext compteurCall MsgBox("Somme des " & n & " premiers entiers : " & somme)

    End Sub

    Le compteur peut tre, chaque itration, incrment de la valeur de nbpas.Exemple :For compteur = 20 To 0 Step -2

    Call MsgBox(compteur)Next compteur

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    49/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 46

    La boucle For Each...Next

    La boucle For Each...Next permet daccder aux objets dune collection.Exemple :

    Sub ColorieCellule()Dim MaPlage As RangeDim Cellule As RangeDim i As IntegerSet MaPlage = Range("A1:B5")For Each Cellule In MaPlage

    Cellule.Interior.ColorIndex = ii = i + 1

    Next Cellule

    End Sub

    Linstruction Exit

    Linstruction Exit permet de quitter un bloc Do...Loop, For...Next, Function,ou Sub. Sa syntaxe est la suivante :Exit DoExit For

    Exit FunctionExit Sub

    Exemple :La boucle suivante sarrte lorsque la rponse rep est n ou N :

    DoRep = InputBox("Voulez-vous continuer ? (O/N)")If LCase(rep) = "n" Then Exit Do

    Loop

    Exercice

    Ecrire la fonction CompteLignes qui permet de compter le nombre de lignes dela plage de cellules MaPlage passe en argument et la tester dans EXCEL.Function CompteLignes(MaPlage As Range) As Integer

    Vous pourrez utiliser la boucle For Each...Next. pour parcourir les lignes(proprit Rows de lobjet Range) de la plage de cellules MaPlage.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    50/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 47

    VII.8. LES TABLEAUX

    Un tableau est une variable permettant de stocker plusieurs valeurs.

    La dclaration dun tableau prcise le nombre dlments du tableau etventuellement leur type :Dim NomTableau(dimension) [As Type]

    On appelle taille dun tableau, le nombre dlments du tableau.

    Les lments dun tableau sont indexs de 0 dimension1. NomTableau(i)dsigne le ime lment du tableau de nom NomTableau, i devant tre compris

    entre 0 et dimension1.

    Exemple :Dim TabInt(10) As Integer tableau de 10 entiersTabInt(0)=12 accs au premier lment du tableauTabInt(9)=36 accs au dernier lment du tableau

    Les tableaux sont trs utiles pour traiter des listes dlments. La fonction Array

    renvoie une variable de type Variant contenant un tableau.Exemple :Dim ListeJours As VariantListeJours = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi","Samedi", "Dimanche")

    La fonction UBound renvoie la valeur maximale des index dun tableau.Exemple :UBound(ListeJours) renvoie 6.

    Exercice

    Ecrire la fonction VerifierJours(Jour As String) qui permet de vrifier que lachane de caractres passe en argument est bien un jour de la semaine et quirenvoie un boolen, et la tester dans EXCEL.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    51/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 48

    VII.9. LE DEBOGAGE

    Le dbogage consiste rgler les erreurs directement lies au code dun

    programme. Trois types derreur peuvent affecter un programme crit en VBA : des erreurs de compilation qui surviennent lorsque VBA rencontre une

    instruction quil ne reconnat pas ; des erreurs dexcution ; des erreurs logiques : le programme sexcute mais le rsultat obtenu ne

    correspond pas celui attendu.

    Les erreurs de compilation et dexcution

    La premire tape pour tester un programme consiste compiler le programme laide de la commande DEBOGAGE COMPILER VBAPROJECT. Les erreurs decompilation sont mises en vidence. Recommencer la compilation jusqu ceque toutes les erreurs de compilation soient corriges.

    Lorsquil ny a plus derreurs de compilation, excuter le programme laidede la commande EXECUTION EXECUTERSUB/USERFORM.

    Si une erreur dexcution est gnre, linstruction coupable est mise envidence. Corriger lerreur et rinitialiser le programme laide de lacommande EXECUTION REINITIALISER. Recommencer lexcution jusquce que toutes les erreurs dexcution soient corriges.

    Les erreurs Logiques

    Il sagit maintenant de corriger les erreurs logiques qui sont les plus difficiles

    reprer. Lditeur de Visual Basic propose plusieurs outils de dbogage dans lemenu DEBOGAGE.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    52/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 49

    1) Ouvrir le classeurELEVES.XLS.

    2) Ouvrir lditeur de Visual Basic partir du classeurELEVES.XLS.

    3) Ouvrir un nouveau module de code laide de la commande INSERTIONMODULE. Une fentre code MODULE1 souvre.

    4) Dans le module de code MODULE1, saisir la procdure suivante qui permet de

    supprimer les lignes vides de la liste de donnes :Sub SupprLignesVides()Dim MaPlage As RangeDim Cellule As RangeSet MaPlage = Range("A1:A19")For Each Cellule In MaPlage

    If IsEmpty(Cellule) ThenRows(Cellule.Row).Delete supprime toute la ligne

    End IfNext Cellule

    End Sub

    La fonction IsEmpty permet de tester si une cellule est vide.

    5) Excuter la procdure SupprLignesVides. On constate que sil existe deuxlignes vides conscutives, la deuxime ligne nest pas supprime.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    53/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 50

    6) Insrer de nouveau des lignes dans la liste de donnes pour obtenir la mmeliste de donnes que celle du point (1).

    7) Dans lditeur de Visual Basic, espionner la valeur des variablesCellule.Row et Cellule laide de la commande DEBOGAGE AJOUTER UNESPION. La fentre ESPIONS souvre.

    8) Rduire la fentre de lditeur de Visual Basic de faon voir le classeurEXCEL au second plan.

    9) Excuter pas pas la procdure SupprLignesVides laide de la commandeDEBOGAGE PAS A PAS DETAILLE (touche F8). Observer attentivement leffet dechaque instruction de la procdure sur le classeur EXCEL et examiner les valeursprises par les variables Cellule.Row et Cellule.Valeur de Cellule.Row Valeur de Cellule Action

    1 "nom"2 "Detila"3 "Gautier"

    4 "" Suppression de la ligne 45 "Leforet"6 "Michelet"

    Lorsque la procdure atteint la cellule A4, la ligne 4 est supprime. Cela a pourconsquence de dcaler toutes les cellules vers le haut. La cellule A5 passe alorsen A4, la cellule A6 en A5... La boucle For Each...Next traite ensuite la cellulesuivante soit la cellule A5. Le contenu de la cellule prcdemment en A5 ne seradonc pas trait, puisque cette cellule est passe en A4.

    10) Arrter lexcution de la procdure laide de la commande EXECUTIONARRET.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    54/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 51

    11) Une solution possible au bogue est de drouler une boucle commenant parla dernire cellule de la liste de donnes.Sub SupprLignesVidesCorrige()

    Dim compteur As Integer

    Dim DerLigne As IntegerDim MaPlage As RangeSet MaPlage = Range("A1:A19")DerLigne = MaPlage.Rows.CountFor compteur = DerLigne To 1 Step -1

    If IsEmpty(Range("A" & compteur)) Then Rows(compteur).DeleteNext compteur

    End Sub

    Pour information

    Les principaux outils de dbogage proposs par lditeur de Visual Basic dans lemenu DEBOGAGE sont les suivants. Excution pas pas : pour excuter un programme pas pas, placer le

    curseur dans la procdure excuter et activer la commande DEBOGAGE PASA PAS DETAILLE. Lexcution dune procdure pas pas permet denexaminer le droulement instruction aprs instruction. La procdure est diteen mode arrt. On peut tout moment retourner un mode dexcutionnormal.

    Les bulles daide : pour visualiser la valeur dune variable, activer lacommande OUTILS OPTIONS, cliquer sur longlet EDITEUR et cocher la caseINFO-BULLES AUTOMATIQUES. Lorsque le curseur est plac au dessus dunevariable, la valeur de celle-ci apparat dans une bulle daide.

    La fentre Variables locales : pour visualiser la valeur des variables etconstantes aux diffrents stades de lexcution pas pas dun programme,activer la commande AFFICHAGE FENETRE VARIABLES LOCALES.

    Les points darrt : les points darrt permettent dinterrompre lexcutiondun programme sur une instruction prcise. Pour dfinir un point darrt surune instruction douteuse, activer la commande DEBOGAGE BASCULER LEPOINT DARRET.

    Les espions : pour espionner la valeur dune variable, activer la commandeDEBOGAGE AJOUTER UN ESPION. Pour afficher la fentre ESPIONS, activer lacommande AFFICHAGE FENETRE ESPIONS.

    La pile dappels : la pile dappels recense toutes les procdures ou fonctionsen cours dexcution, selon leur ordre dappel. Pour afficher la pile desappels, activer la commande AFFICHAGE PILE DES APPELS.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    55/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 52

    VIII. LES OBJETS USERFORM

    Les objets UserForm sont des botes de dialogue dfinies par lutilisateur.

    Ce chapitre explique comment crer une bote de dialogue permettant de saisirles clients dune entreprise, comme le montre la capture dcran suivante :

    1) Ouvrir un nouveau classeur et lenregistrer sous SAISIECLIENTS.XLS.

    2) Pour renommer la feuille de calcul FEUIL1, cliquer avec le bouton droit surl'onglet FEUIL1, activer la commande RENOMMERet taper CLIENTS.

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

    4) Renommer DIVERS la feuille de calcul FEUIL2 et saisir les donnes suivantes :

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    56/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 53

    On peut distinguer deux phases dans la cration dun objet UserForm :

    le dessin de lobjet UserFormLe dessin dun objet UserForm consiste placer des contrles sur lobjet.

    Les contrles sont les lments constitutifs dun objet UserForm tels quunecase cocher, une zone de texte, une zone de liste modifiable ou un bouton decommande permettant une intervention de lutilisateur.Un contrle est un objet : il possde des proprits, des mthodes et desvnements dfinis.

    lassociation de code lobjet UserForm et ses diffrents contrlesIl sagit de dterminer le comportement de lobjet UserForm et de ses contrlesface aux diffrents vnements utilisateur pouvant laffecter et dcrire le code

    permettant dexploiter les actions effectues par lutilisateur.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    57/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 54

    VIII.1.CREER UN OBJET USERFORM

    1) Ouvrir lditeur de Visual Basic et activer la commande INSERTION

    USERFORM. Un objet UserForm1 apparat, ainsi qu'une bote outilspermettant d'ajouter des contrles lobjet.

    Lexplorateur de projets permet dafficher le code dun objet USERFORM laidedu clic droit de la souris et de loption CODE ; ou dafficher lobjet lui-mme

    laide du clic droit de la souris et de loption AFFICHER LOBJET.

    2) Modifier le nom de lobjet UserForm par dfaut, UserForm1, enFenetreSaisieClients dans la proprit NAME de la fentre PROPRIETES. Cenom est le nom qui sera utilis dans le code pour faire rfrence lobjetUserForm.

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

    proprits de l'objetUSERFORM1

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

    fentre objet associe lob etUSERFORM1

    Dans lexplorateur de projets, les botes de dialogue sont regroupes dans un dossierFEUILLES

    bote outils quiapparat lorsque la

    fentre objet associe lobjet USERFORM1est slectionne

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    58/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 55

    On veut crer lobjet UserForm suivant :

    Cet objet est compos des contrles suivants : un INTITULE et une ZONE DE LISTE

    MODIFIABLE pou saisir le titre du client (Madame, Mademoiselle ou Monsieur),trois INTITULES et trois ZONES DE TEXTE pour saisir le nom, le prnom et letlphone du client et deux BOUTONS DE COMMANDEOK et Annuler.

    Pour placer un contrle dans lobjet UserForm, cliquer sur lobjet voulu dela BOITE A OUTILS et le faire glisser vers lobjet UserForm. Ds quun contrle at plac sur lobjet UserForm, dfinir son nom grce la proprit NAME.

    Attention : Il est recommand dutiliser des noms vocateurs pour ses contrles,qui permettent didentifier le type dobjet quils reprsentent et leur utilit.

    4) Placer les diffrents contrles de lobjet UserForm et modifier leursproprits comme suit :

    Contrle proprit NAME proprit CAPTION proprit FONT

    INTITULE IntitulTitre Titre : police TIMES NEWROMAN, taille 10

    ZONE DE LISTEMODIFIABLE

    ComboBoxTitre "

    INTITULE IntitulNom Nom : "ZONE DE TEXTE TextBoxNom "INTITULE IntitulPrnom Prnom : "ZONE DE TEXTE TextBoxPrnom "INTITULE IntitulTl Tlphone : "ZONE DE TEXTE TextBoxTl "BOUTON DECOMMANDE

    ButtonOK OK

    BOUTON DECOMMANDE

    ButtonAnnuler Annuler

    Remarque : Il est possible de copier/coller des contrles.

    Intitul

    Zone de texte Zone de liste modifiable

    bouton de commande

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    59/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 56

    VIII.2.AFFICHER ET FERMER UN OBJETUSERFORM

    Afficher un objetUserForm

    Linstruction Load permet de charger un objet UserForm en mmoire sanslafficher. La mthode Show de lobjet UserForm permet dafficher un objetUserForm et de le charger en mmoire, si cela na pas dj t fait.

    Ecrire la procdure qui permet dafficher la bote de dialogue de saisie dunclient.

    1) Dans lditeur de Visual Basic, activer la commande INSERTION MODULE. Unmodule de code MODULE1 souvre. Renommer le ModuleSaisieClients laidede la proprit NAME.

    2) Saisir la procdure suivante dans le module de code :Sub ProgPrincSaisieClients()

    Sheets("Clients").Activate activation de la feuille ClientsFenetreSaisieClients.Show

    End Sub

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

    Fermer ou masquer un objetUserForm

    Linstruction Unload permet de fermer un objet UserForm et de leffacer de la

    mmoire, les valeurs de ses contrles sont alors perdues. La mthode Hide delobjet UserForm permet de faire disparatre un objet UserForm de lcransans le supprimer de la mmoire.

    Linstruction Unload ou la mthode Hide sont gnralement places dans les procdures vnementielles attaches aux boutons de validation de lobjetUserForm, comme par exemple les boutons de commande OK et Annuler.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    60/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 57

    VIII.3.ASSOCIER DU CODE A UN OBJETUSERFORM

    Les contrles placs sur un objet UserForm et lobjet UserForm lui mme sontrceptifs aux vnements utilisateurs qui les affectent (clic souris sur un boutonde commande, saisie d'une valeur dans une zone de texte). On peut ainsi crerdes procdures dites procdures vnementielles, qui se dclencheront lorsquelvnement correspondant sera repr.

    La syntaxe dune procdure vnementielle attache un contrle de nomNomContrle (proprit NAME) et dclenche par un vnementNomEvnement est la suivante :

    Private Sub NomContrle_NomEvnement()...

    End Sub

    Dans le cas dune procdure vnementielle attache un objet UserForm, lenom de lobjet UserForm (proprit NAME) napparat pas dans les instructionsde dclaration de la procdure. Il est remplac par le mot cl UserForm commesuit :

    Private Sub UserForm_Nomvnement ()

    ...End Sub

    Les vnements sont nombreux et varient dun contrle lautre. En voici,quelques uns : vnement Change : dtect lors de la modification de la valeur (proprit

    VALUE) dun contrle (par exemple une zone de texte). vnement Click : dtect lorsque lutilisateur clique sur un contrle (par

    exemple un bouton de commande). vnement dblClick : dtect lorsque lutilisateur double-clique sur un

    contrle.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    61/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 58

    Associer du code un bouton de commande

    Associer le code ncessaire au bouton de commande OK pour que la bote dedialogue soit ferme lorsque lon clique dessus.

    1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets,slectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir sonmodule de code laide du clic droit de la souris et de loption CODE (ou endouble-cliquant dessus).

    2) Dans la liste de gauche au sommet du module de code, slectionner loptionButtonOK. Dans la liste de droite au sommet du module de code, slectionnerlvnement Click.

    3) Complter la procdure vnementielle ButtonOK_Click qui apparat commesuit :Private Sub ButtonOK_Click()

    Call Unload(Me)End Sub

    La proprit Me de lobjet UserForm renvoie lobjet UserForm actif.

    4) Pour tester cette procdure, excuter la procdureProgPrincSaisieClientsdu module de code ModuleSaisieClients.

    Exercice

    Associer le code ncessaire au bouton Annuler pour que la bote de dialoguesoit ferme lorsque lon clique dessus.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    62/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 59

    Initialiser un objet UserForm

    Lvnement Initialize dun objet UserForm est dtect lorsque lobjetUserForm est charg, laide de la mthode Show ou de linstruction Load.

    Attention : Lorsque la mthode Show est applique un objet UserFormmasqu par la mthode Hide, lobjet UserForm nest pas recharg maisuniquement affich. Lvnement Initialize nest alors pas reconnu.

    La procdure vnementielle associe lvnement Initialize dun objetUserForm sexcute avant laffichage de lobjet et a la syntaxe suivante :

    Private Sub UserForm_Initialize()...

    End SubCette procdure permet deffectuer des rglages dans lobjet UserForm avantson chargement.

    Ecrire le code ncessaire pour affecter les valeurs Madame, Mademoiselleet Monsieur la zone de liste modifiable ComboBoxTitre, en utilisant lesvaleurs qui se trouvent dans la plage de cellule A1:A3 de la feuillle de calculDIVERS.

    1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets,selectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir sonmodule de code laide du clic droit de la souris et de loption CODE.

    2) Dans la liste de gauche au sommet du module de code, slectionner loptionUserForm. Dans la liste de droite au sommet du module de code, slectionnerlvnement Initialize.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    63/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 60

    3) Complter la procdure vnementielle UserForm_Initialize qui apparatcomme suit :Private Sub UserForm_Initialize()

    Dim i As Integer

    i = 1Do Until IsEmpty(Worksheets("Divers").Range("A" & i))Call Me.ComboBoxTitre.AddItem(Worksheets("Divers"). _Range("A" & i).Value)i = i + 1

    LoopEnd Sub

    Remarque : Pour crire une instruction sur plusieurs lignes, il faut, la fin dechaque ligne, taper sur la barre despace et sur le trait continu (_).

    4) Pour tester cette procdure, excuter la procdureProgPrincSaisieClientsdu module de code ModuleSaisieClients.

    Pour information: Il existe une autre mthode pour initialiser la zone deliste modifiable ComboBoxTitre avec les valeurs Madame, Mademoiselleet Monsieur, en la liant la plage de cellule A1:A3 de la feuillle de calculDIVERS.

    Pour lier un contrle une plage de cellules, il faut renseigner la propritROWSOURCE du contrle avec la plage de cellules voulue (dans notre cas,Divers!A1:A3) ou encore mieux avec le nom de la plage de cellules voulue, cequi suppose de nommer cette plage de cellules.Remarque : La proprit CONTROLSOURCE permet de lier un contrle une seulecellule.

    Attention: Cette mthode, contrairement la prcdente, ne pourra pas prendreen compte les ventuelles modifications faites sur le titre dun client (ajout ousuppression dun titre). La zone de liste modifiable ComboBoxTitre est lie laplage de cellule fixe A1:A3 de la feuillle de calcul DIVERS.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    64/67

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    65/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 62

    Attention : Si, dans les procdures vnementielles ButtonOK_Click etButtonAnnuler_Click, on utilise la mthode Hide pour masquer lobjetUserForm la place de linstruction Unload, les ressources mmoires delobjet UserForm ne sont pas libres. Lors dun nouvel affichage de lobjet

    UserForm avec la mthode Show, les diffrents contrles de lobjet ont alorsles mmes valeurs que lorsquil a t masqu.

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    66/67

    Excel VBAQ INA-PG Q Juliette Dibie-Barthlemy Page 63

    VIII.4.AFFICHER UN OBJET USERFORM APARTIR DUN BOUTON DUNE FEUILLE DE

    CALCUL

    On veut pouvoir afficher la bote de dialogue FenetreSaisieClients partird'un bouton de commande de la feuille de calcul CLIENTS.

    1) Aller dans EXCEL et cliquer sur longlet CLIENTS. Positionner le curseur surune cellule vide de la feuille de calcul CLIENTS et activer la commandeAFFICHAGE BARRE D'OUTILS FORMULAIRES.

    2) Une barre d'outils FORMULAIRES apparat. Cliquer sur l'objetBOUTON, puis cliquer sur la feuille de calcul CLIENTS.

    3) Dans la nouvelle fentre AFFECTER UNE MACRO qui apparat,slectionner la macro ProgPrincSaisieClients et cliquer sur lebouton OK.

    4) Cliquer sur le bouton BOUTON 1 et renommer le SAISIE CLIENTS.

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

  • 8/14/2019 Visual Basic Pour Application EXCEL 2000

    67/67

    IX. BIBLIOGRAPHIE

    Anne Caracache. Excel 5 pour Windows, Formation Rapide, Perfectionnement.

    Dunod, 1994.

    Jean-Franois Sehan. Excel 5 pour Windows, Macros Visual Basic, FormationRapide, Perfectionnement. Dunod, 1995.

    Paul McFedries.Excel pour Windows 95, Secrets dexperts. SAMS, 1995.

    Mikal Bidault.Excel & VBA. CampusPress, 2002.

    Rob Bovey, Stephen Bullen, John Green, Robert Rosenberg. VBA pour Excel2002 La rfrence du programmeur. CampusPress, 2002.