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