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