Application représente l’application en cours d’utilisation (Excel, Word, Access)
Workbooks représente les classeurs Excel (Documents, les documents Word)
Sheets pour les feuilles du classeur
Cells pour les cellules
Range pour une plage de cellules
Pour désigner une seule feuille de l’ensemble (collection) de feuilles, on peut utiliser son nom (entre guillemets) ou son numéro d’ordre :
Sheets("machin") ou Sheets(2)
Range("B2") désigne la cellule B2 (on peut écrire [B2] à la place de Range("B2"))
Cells(3) désigne la 3ème cellule
Cells(2,3) désigne la cellule située à la 2ème ligne et 3ème colonne (dans une feuille de calcul, c’est la cellule $C$2).
On parle en anglais,
Pour dire la 3ème cellule Cells(3) de la feuille machin Sheets("machin") du classeur chose.xls Workbooks("chose") , on dira
Workbooks("chose").Sheets("machin").Cells(3)
Ou bien Workbooks("chose.xls").Sheets("machin").Cells(3)
Noter les points séparant les objets et les "s" à la fin de chaque collection.
Attention, Workbooks ne désigne que des classeurs OUVERTS
Si on ne précise pas le classeur, on parle du classeur actif , si on ne précise pas la feuille, on parle de la feuille sélectionnée :
Sheets("machin").Range("A1") renvoie la cellule A1 de la feuille machin du classeur actif
On peut également dire ActiveWorkbook.Sheets("machin").Range("A1")
Attention, ActiveWorkbook n’est pas forcément le classeur contenant la macro en cours, ce dernier s’appelle ThisWorkbook.
Dans VBA, pas de ";" seulement des points(.) pour séparer les objets, et des virgules (,) pour séparer les arguments.
®
Exemple
Sub truc()
Lin = Inputbox("n° de ligne ?")
Col = 5
Val = Inputbox("valeur ?")
Sheets(2).Cells(lin,col) = val
End Sub
®
Ou, plus court,
Sheets(2).Cells(Inputbox("n° de ligne ?"), 5) = Inputbox("valeur ?")
Attention !
Quand on dit Sheets("machin"), machin est le nom de la feuille désignée
Sheets("machin") est un objet et machin ou Sheets("machin").Name est un texte
De même Range("A1:B2") est un objet, "A1:B2" est un texte qui représente d'adresse de la plage. Si on a écrit adr = "A1:B2", on peut écrire Range(adr)
adr (sans guillemet) représente l'adresse. Range(adr).Address renvoie le texte "A1:B2"
ne pas confondre
Cells(1).Value = truc (inscrit la valeur de truc dans la cellule) et
truc = Cells(1).Value (affecte la valeur de la cellule à truc)
Sheets("chose").Cells(2,2) = Sheets("truc").Cells(1,1) recopie en B2 de chose la valeur de la cellule A1 de la feuille truc, ce qui est donc très différent de
Sheets("truc").Cells(1,1) = Sheets("chose").Cells(2,2) qui fait l'inverse.
chose = Cells(1,1) chose est la valeur contenue dans la cellule A1 (en toute
rigueur, il faudrait dire chose = Cells(1,1).Value
Set chose = Cells(1,1) chose est la cellule A1 (objet), on peut écrire chose.Value
pour désigner la valeur de chose
Autres objets utiles :
On peut facilement insérer dans une feuille de calcul Excel ou dans une feuille Word divers objets (des "contrôles") comme
des boutons
des boutons d’option, des cases à cocher
des zones de texte modifiables (TextBox)
des barres de défilement (ScrollBar)
ou bien des boutons-toupies (SpinButton), des zones de liste, des listes déroulantes,
des zones de texte (label)…
Il suffit de cliquer sur l’icône "boîte à outils" de la barre d’outils VBA (ou bien Affichage / Barres d'outils / Commandes), de sélectionner le contrôle souhaité et de l’insérer à la souris à l’endroit désiré.
On peut également utiliser tous ces "contrôles" dans une boite de dialogue (Userform) que l’on peut créer dans VBA par Insertion / Userform, puis faire apparaître à l'exécution d'une macro par
Userform("truc").Show
et disparaître par
Useform("truc").Hide.
Les différents paramètres de réglage des contrôles peuvent être visualisés et modifiés par la fenêtre propriétés dans VBA.
(pour les contrôles insérés dans une feuille de calcul, passer en mode création grâce à la barre d'outils VBA, et double-cliquer sur le contrôle).
Par exemple, pour un simple bouton, on peut modifier les dimensions, position, texte, police du texte, aspect de la souris sur le bouton, verrouillage…
Pour écrire une macro liée à un contrôle, rechercher l'événement adéquat dans les deux listes déroulantes
Remarque : pour des opérations simples avec des contrôles dans une feuille Excel, on peut se passer de macro VBA avec Affichage / Barres d'outils / Fomulaires
Les propriétés des objets :
Il s'agit de nombres (dimensions, valeurs), textes (adresses, nom), ou variables booléennes (le fait d'être visible ou non, d'être verrouillé ou non) relatifs à un objet.
Le nom (Name), le chemin d'accès (Path) d'un fichier, le texte (Caption) d'un contrôle, l'adresse d'une cellule (Address), la valeur (Value) d'une cellule ou d'une barre de défilement, le fait pour un contrôle d'être visible (Visible) ou déverrouillé (Enabled)…
Syntaxe : toujours commencer par l'objet auquel s'applique la propriété
La propriété peut être lue :
MsgBox(ActiveWorkbook.Path) annonce le chemin du fichier Excel actif
(ActiveDocument dans Word)
…ou modifiée :
Cells(1,1).Value = 10 inscrit 10 dans la cellule A1
Sheets(1).Name = "truc" va renommer la première feuille
CommandButton1.Visible = False fait disparaître le bouton
exemple :
Private Sub ScrollBar1_Change()
Label12.Caption = ScrollBar1.Value
End Sub
Label12.Caption est le texte de la zone de texte, ScrollBar1.Value est la valeur associée à la position de la barre de défilement
Agir sur les objets (les "méthodes")
On peut ouvrir (Open), fermer (Close), enregistrer (Save, SaveAs), activer (Activate), imprimer (Print)… des classeurs :
Workbooks("truc").Save
Sélectionner (Select) ou activer (Activate) des feuilles :
Workbooks("truc").Sheets("chose").Select
Sélectionner (Select), activer (Activate), copier (Copy), couper (Cut), coller (Paste)… des cellules ou des plages
Cells(1,1).Copy
Syntaxe : on commence toujours par l'objet sur lequel on veut agir, et on termine par la méthode.
Exemples :
®
saisie manuelle de cours de bourse ,
Dans la feuille de code de la feuille "simvhist" :
Private Sub CommandButton1_Click()
ThisWorkbook.Sheets("simvhist").Activate
UserForm1.Show
End Sub
Dans la feuille de code de Userform1 :
Private Sub CommandButton2_Click()
'fin
UserForm1.Hide
End Sub
Sub tous()
'déclenché à chaque modification
ThisWorkbook.Sheets("simvhist").Activate
'date
Label3.Caption = ThisWorkbook.Sheets("simvhist").Cells(ScrollBar1.Value, 1)
'valeur
Label2.Caption = ThisWorkbook.Sheets("simvhist").Cells(1, ScrollBar2.Value) & Chr(13) & "(der. " & ThisWorkbook.Sheets("simvhist").Cells(ScrollBar1.Value - 1, ScrollBar2.Value) & ")"
ThisWorkbook.Sheets("simvhist").Cells(ScrollBar1, ScrollBar2).Select
TextBox2.Text = ThisWorkbook.Sheets("simvhist").Cells(ScrollBar1.Value, ScrollBar2.Value)
TextBox2.SetFocus
End Sub
Private Sub CommandButton1_Click()
'entrer, valeur suivante (inscrit la valeur, déplace vers la droite, idem avec touche enter)
ThisWorkbook.Sheets("simvhist").Activate
ActiveCell.Value = TextBox2.Value
ScrollBar2.Value = ScrollBar2.Value + 1
tous
End Sub
Private Sub ScrollBar1_Change()
'choix de la date
tous
End Sub
Private Sub ScrollBar2_Change()
'choix de la valeur
tous
End Sub
Private Sub textbox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'modif au clavier (flèche vers le bas ou haut = scrollbar1, droite gauche scrollbar2)
If KeyCode = vbkeydown Then
ScrollBar1.Value = ScrollBar1.Value + 1
End If
If KeyCode = vbKeyUp Then
ScrollBar1.Value = ScrollBar1.Value - 1
End If
If KeyCode = vbKeyRight Then
ScrollBar2.Value = ScrollBar2.Value + 1
End If
If KeyCode = vbKeyLeft Then
ScrollBar2.Value = ScrollBar2.Value - 1
End If
tous
End Sub
Autres exemples :
®
examen des courbes d'évolution de cours (graphiques sur plage de données variable)
®
examen des courbes gestion de portefeuille
®
ajout et suppression d'éléments dans une liste déroulante :
Une liste déroulante avec zone de saisie s'appelle "ComboBox".
Les éléments du Combobox sont réunis dans une liste "List".
ComboBox1.List(0) renvoie le premier élément de ComboBox1, ComboBox1.List(1) le second...
Le numéro de l'élément sélectionné est ComboBox1.ListIndex.
Le texte affiché dans la zone de saisie s'appelle Combobox1.Text.
Pour ajouter l'élément Zaza, il suffit d'écrire ComboBox1.AddItem ("Zaza").
Pour retirer le 3ème élément, on écrit : ComboBox1.RemoveItem (2).
A partir de ces bases, on peut écrire une macro qui permet d'ajouter des noms dans la liste simplement en les entrant dans la
zone de saisie et en validant par "Entrée", et d'en supprimer en les séléctionnant puis en tapant "Suppr".
Dans l'exemple présenté ci-dessous, l'événement déclencheur est la frappe d'une touche
(avec test pour savoir si la touche est Suppr ou Entrée).
Private Sub ComboBox1_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then 'la touche tapée est Entrée
'on vérifie si l'ément entré existe déjà dans la liste
For num = 0 To ComboBox1.ListCount - 1
If ComboBox1.Text = ComboBox1.List(num) Then trouvé = True
Next num
'si l'élément n'existe pas, on l'ajoute à la liste
If Not trouvé = True And ComboBox1.Text <> "" Then ComboBox1.AddItem (ComboBox1.Text)
End If
If KeyCode = 46 And ComboBox1.ListIndex > -1 Then 'la touche est Suppr
If MsgBox("voulez-vous supprimer " & ComboBox1.List(ComboBox1.ListIndex) & "?", vbYesNo) = vbYes Then
ComboBox1.RemoveItem (ComboBox1.ListIndex) 'on retire l'ément sélectionné de la liste
End If
End If
End Sub
>>>