Complément C3 Cours
Transcription
Complément C3 Cours
Complément C3 Partie Cours Infodauphine.com Pour comprendre les objets, c'est idéal de raisonner en laissant de côté les objets Excels. Une fois les mécanismes compris, on applique ensuite les même raisonnements sur les classes Excel. 2 exemples sont utilisés: une application de gestion de Zoo, et mon application de gestion des cours. Programmation Orientée Objet En VBA, on représente les entités par des classes et des instances/objets (exemple: classe Animal) Si la classe Animal existe, on peut créer un objet Animal et l'affecter à une variable (note: l'instruction Set permet d'affecter des objets, le mot clé new permet d'en créer un nouveau. Set monChat = new Animal Set tigre1 = new Animal monChat est une instance de la classe Animal La classe est le modèle (le "moule"), un contrat qui définit l'interface comment communiquer avec ses instances Grâce à: Ses propriétés (les caractéristiques) Exemple: taille, nombreDePattes, poids, espèce Ses méthodes (les actions de l’objet): Exemple: la méthode manger, obtenirAge, courir Exemple Backoffice Infodauphine Eleve Un élève prénom string nom td integer email envoyerMessage(message) Séance date type Inscription eleve classe Eleve seance classe Seance annuler() Comment créer une classe en VBA (note: Ce n'est pas à votre programme) Mais c'est simple, e t ça aide à comprendre les raisonnement Une classe VBA = un module spécial: insertion/module de classe, et je lui donne un nom, par exemple "Animal" Je déclare des variables globales dans ce module et des procédures et fonctions. J'ai ensuite une nouvelle classe Animal que je peux utiliser dans mon code. C'est ce qu'ont faits les développeurs de VBA: un module pour la classe Range, un pour la classe Worksheet, etc. www.infodauphine.com Complément C2 page 1/6 Propriétés et méthodes Les propriétés sont des variables que chaque instance d'une classe va posséder Les méthodes sont des procédures et fonctions qui sont définis par la classe et qui vont s'appliquer à l'instance Toutes les instances d'une classe possède les propriétés et méthodes définies par la classe. La notation à point Pour utiliser la propriété ou la méthode d’un objet, on utilise la syntaxe: objet.propriété objet.méthode Si monChat est une instance de la classe Animal, on pourra donc faire: t = monChat.taille propriété monChat.dormir méthode (Sub) monChat.manger laSouris age = monChat.obtenirAge() méthode (Function) if monChat.aPeur(leChien)=true then monChat.courir Propriété de type objet Si la propriété d'un objet est elle-même un autre objet p = inscription22.eleve.prénom inscriptionSelectionnée.annuler exécution de la Sub annuler de la classe Inscription utilisation de la propriété eleve eleve.envoyerMessage("inscription annulée") utilisation de la propriété seance seance.nbInscrits = seance.nbInscrits - 1 www.infodauphine.com Complément C2 page 2/6 Les collections Une Collection est une liste d’objets Quand une propriété représente un ensemble d'éléments, et non pas une seule valeur, on va utiliser la classe Collection pour cette propriété monEleve.inscriptions monChat.enfants Je peux accéder à un des objets de la collection, soit par un indice numérique (position) ou par une clé Si monZoo est une instance de la classe Zoo est que celle-ci à une propriété animaux: monZoo.animaux la collection complète monZoo.animaux(5) le 5e (1 instance de Animal) monZoo.animaux("dadoo") l’objet avec la clé dadoo Cells une collection d'objet Range Propriétés de la classe Collection La boucle For Each va permettre de boucler sur chaque élément de la collections For Each nomVariable In uneCollection Dim monAnimal As Animal For Each monAnimal In monZoo.animaux MsgBox monAnimal.taille Next monAnimal A chaque tour, VBA fait: Set monAnimal = monZoo.animaux(n) pour chaque élément de la collection Une collection à toujours une propriété Count Dim i As Integer For i=1 To monZoo.animaux.Count MsgBox monZoo.animaux(i).taille Next i La méthode Add permet d'ajouter un élément monZoo.animaux.Add monNouvelAnimal Exemples La classe Zoo à une propriété cages. La classe Cage à une propriétés animaux. La classe Animal a une méthode dormir sans paramètre. Comment faire dormir le 3e animal de la 1ere cage de monZoo? Si la classe Animal à une propriété cage et taille , et tigre1 est une instance de Animal veut dire: Que tigre1.cage.Animaux(1).taille = 80 Le 1er animal de la cage de tigre1 va avoir une taille de 80 cm www.infodauphine.com Complément C2 page 3/6 Le modèle objet Excel Application: Excel lui-même Workbooks : les classeurs ouverts classe Workbook Worksheets / Sheets: les feuilles classe Worksheet Cells (toutes ses cellules) classe Range une ou plusieurs cellules Cells Font: la police de la cellule Interior: la couleur et motif de la cellule Application.Workbooks("dauphine").Sheets(1).Name="cool" Le nom de la 1ère feuille du classeur "dauphine" est "cool" Application.Workbooks(3).Worksheets("test").Cells(1).Value=20 La 1ère cellule (A1) de la feuille "test" du 3e classeur ouvert devient égale à 20 Variables Globales raccourcis Application Workbooks Application.Workbooks ActiveWorkbook Worksheets ActiveWorkbook.Worksheets ActiveSheet Cells , Range, Selection ActiveSheet.Cells Si le classeur"dauphine.xls"est actif sur la feuille"dimitri", sont alors identiques: Application.Workbooks("dauphine").Worksheets("dimitri").Cells(1) Workbooks("dauphine").Worksheets("dimitri").Cells(1) ActiveWorkbook.Worksheets("dimitri").Cells(1) Worksheets("dimitri").Cells(1) ActiveSheet.Cells(1) Cells(1) La propriété Cells Cells renvoie une collection d’object Range pour chaque cellule C’est une propriété de la classe Worksheet mais aussi de la classe Range For Each c In Worksheets("dimitri").Cells Cells(3,1) 3e ligne, 1ère colonne: L3C1 ou A3 Selection.Cells(5) la 5e (vers la droite, puis en bas) Rappel: Cells(3,1) ou Range("A2") ciblent ActiveSheet.Cells(3,1) et ActiveSheet.Range("A2") Range et Cells Range(Cells(3,1),Cells(6,4)) A3:D6 L3C1:L6C4 Range(Cells(3,1),Cells(6,4)).Cells(2,1) Dans la plage A3:D6, la cellule à la 2e ligne, 1ère colonne L4C1 Attention: Cells pour 1 cellule = partir de ce coin Cells(3,1).Cells(2,3) Cells(4,3) L4C3 C4 www.infodauphine.com Complément C2 page 4/6 En Degead 2 Les 2 plus importants: 1 cellule Cells(ligne,colonne) Cells(3,1).Value =5 1 plage Range(Cells(L1,C1),Cells(L2,C2)) Range(Cells(2,1),Cells(4,5)).Font.Bold=true La plage L2C1:L4C5 est en gras Maîtriser ces 2 là sur le bout des doigts! Parcourir les cellules Dim c As Range For Each c In Range(Cells(3,1),Cells(6,4)).Cells Dim c As Range For Each c In Range(Cells(3,1),Cells(6,4)) car Cells est la propriété collection par défaut de Range c sera une cellule (objet Range) différente à chaque tour Ou avec boucle For Parcourir les cellules avec For L'astuce qui change tout éviter d'utiliser une variable i quand vous parcourez des colonnes/lignes!!!! 10 cellules d'une ligne nc = n° de colonne For nc=1 To 10 10 cellules d'une colonne nl = n° de ligne For nl=1 To 10 Comme ça, nl et nc sont toujours au même endroit! Cells(nl,nc) Propriété et Classe Font La police du texte La propriété Font de la classe Range est une instance de la classe Font Size Name (exemple: "Verdana","Arial") Bold (true pour gras) Italic (true pour italique) Color (nombre indiquant la couleur du texte) Cells(1,1).Font.Bold=true Cells(1,1).Font.Size=12 Propriété et Classe Interior La "décoration" intérieure de la cellule (couleur et motif) La propriété Interior de la classe Range est une instance de la classe Interior Color numérique correspondant à une valeur de couleur fonction RGB(rouge,vert,bleu) [0-255] constantes: vbBlue, vbBlack Cells(1,1).Interior.Color = RGB(255,0,0) Cells(1,1).Interior.Color = vbRed www.infodauphine.com Complément C2 page 5/6 Mauvaises pratiques à Dauphine Malheureusement, certains profs donnent des habitudes catastrophiques à leurs élève. Ne tombez pas dans le piège, évitez les lignes en rouges ci-dessous. Omettre le .Value r = Cells(2,1).Value r = Cells(2,1) Marche généralement, peut provoquer problèmes et confusion Set r = Cells(2,1) r sera un Range (la cellule) à cause du Set r = Cells(2,1) r sera sa valeur (comme avec .Value) Conseillé fortement (pas d'ambiguïté, et réflexe du Set quand il n'y a pas .Value): Set r = Cells(2,1) Range r = Cells(2,1).Value valeur Omettre le .Cells For Each c In Range(Cells(4,1),Cells(6,4)).Cells For Each c In Range(Cells(4,1),Cells(6,4)) Cells: permet de mieux voir le lien entre For Each et Collection plus facilement transférable à in Worksheets/Workbooks Evite des bugs dans certains cas (j'y ai perdu des heures par le passé ) Les gros oublis du programme de Degead 2 Voici quelques points qui sont absents de votre programme, mais qui vous empêcheraient de réellement pouvoir profiter de VBA et de pouvoir progresser après votre semestre. affectation objet Si j'affecte un Range, Worksheet, etc, j'utilise Set devant l'affectation. Dim rg As Range Set rg = Cells(3,1) rg.Value=4 rg.Font.Italic=true Selection: objet Range correspondant à la plage sélectionnée. Selection.Value = Selection.Value + 1 For Each c In Selection.Cells IsEmpty(range): vrai si la plage est vide (pas de valeurs dans les cellules) Tester une cellule If IsEmpty(Cells(3,1)) Then Parcourir une colonne tant qu'elle est remplie nl=1 Do While Not IsEmpty(Cells(nl,1)) nl = nl +1 Loop si immédiat Iif(condition,valeur vrai,valeur faux): Cells(1,2).Value = Iif(note>=10,"ok","nul") Range (ou un autre objet en paramètre) en paramètre Sub noircir(ByVal rg As Range) Function celluleMax(ByVal ws As Worksheet) As Range les constantes: vbBlue, vbYellow, vbOk, vbYesNo www.infodauphine.com Complément C2 page 6/6