Les objets Excel : hiérarchie, collection d’objets
Le VBA est un langage de programmation orienté objet, c’est à dire qu’il permet de manipuler tous les objets inclus dans excel (ainsi que d’autres objets comme ceux d’Access, de Word,…).
Les objets sont hiérarchisés :
Application (Correspond à l’objet application Excel)
WorkBook : Objet Classeur
WorkSheet : Objet Feuille
Range : Objet plage de cellules
Les objets de même nature appartiennent à une collection d’objets. On accède à un objet d’une collection par un numéro d’index ou son nom :
Exemple :
Application.Workbooks(1).WorkSheets(« Feuil1 ») fait référence à la feuille « feuil1 » du classeur n° 1.
Remarque : le nom d’une collection correspond au nom d’objet auquel est ajouté un s
Propriétés d’un objet
Chaque objet possède des propriétés que l’on peut lire et/ou modifier par code Pour faire référence à une propriété, on fait suivre le nom de l’objet d’un point et du nom de la propriété
Exemples :
Debug.Print Application.Name
Affiche le nom de l’application en cours dans la fenêtre de déboguage (soit « Microsoft Excel »)
Si la cellule A5 contient la formule =SOMME(A1:A4) soit un total de 2000, le code VBA suivant :
Debug.Print Range(« A5 ») .Formula
Affichera : « SOMME(A1:A4) »
Et
Debug.Print Range(« A5 ») .Value
Affichera la valeur 2000
Méthodes d’un objet
Chaque objet comporte des méthodes : une méthode correspond à une action applicable à l’objet
Exemple 1 :
Application.Close
Ferme l’application en cours (soit Excel) La méthode Close est ici appliquée à l’objet Application
Exemple 2
Range(« A1 »).Copy
Range(« A2 »).PasteSpecial
Copie la cellule A1 (méthode Copy) et le colle dans la cellule A2 (Méthode PasteSpecial)
Remarque : les méthodes correspondent très souvent aux commandes de menu d’Excel
Définition et affectation d’une variable à un objet
L’utilisation d’une variable objet est souvent plus pratique que de manipuler l’objet lui même. La définition d’une variable objet en VBA se fait avec l’instruction Dim. L’affectation d’un objet à une variable objet se fait avec l’instruction Set (et non = comme pour les variables ordinaires).
Exemple :
Dim Classeur As Workbook | Déclare la variable Classeur en tant que WorkBook |
Dim Feuille As Worksheet | Déclare la variable Feuille en tant qu’objet WorkSheet |
Set Classeur = Application.ActiveWorkbook | Affecte à la variable objet Classeur, l’objet classeur actif de l’application courante |
Set Feuille = Classeur.Sheets("Feuil2") | Affecte l’objet Feuille « Feuil2 » à la variable feuille |
Debug.Print Feuille.Range("A1") | Affiche le contenu de la cellule A1 appartenant à l’objet |
Sans les 4 premières instructions, le résultat aurait été obtenu directement par l’instruction suivante :
Debug.Print Application.ActiveWorkbook.Sheets("Feuil2").Range("a1")
Ce qui peut s’avérer fastidieux si dans la suite du code on est amené à utiliser souvent la feuille « Feuil2 »
Remarque : pour manipuler des cellules, on peut aussi utiliser la propriété Cells(NumLigne, NumColonne). RANGE(« C1 ») devient alors RANGE(Cells(1,3),Cells(1,3)) ou si les variables i et j contiennent respectivement les valeurs 1 et 3, on pourra écrire Range(Cells(i,j),Cells(i,j)). Range(« A1 :C4 ») équivaut à Range(Cells(1,1),Cells(4,3))
Libération de la mémoire
Lorsqu’on n’a plus besoin d’utiliser une variable objet, il faut libérer l’occupation mémoire utilisée grâce à l’instruction Set NomVariableObjet=Nothing
Exemple :
Set Feuille=Nothing
Set Classeur=Nothing
Set WorkBook=Nothing
L’environnement de développement integré (IDE) de VBA
Cet environnement est accessible depuis l'onglet Développeur – Visual Basic
L’éditeur de code VBA comporte des fonctionnalités intéressantes comme :
- la vérification automatique de la syntaxe : la première lettre des mots clés se met automatiquement en majuscule, ce qui garantit une syntaxe correcte
- La frappe de certains mots clés comporte une aide contextuelle (Infos expresses) qui facilitent l’écriture du code.
Exemple :
- La frappe de certains mots clés provoque l’affichage de méthodes et propriétés en rapport avec le mot clé.
Exemple :
Utilisation de l’aide de VBA
La manipulation de code VBA passe nécessairement par le recours aux fichiers d’aide VBA (à moins de recopier du code, ce qui ne présente aucun intérêt). Dans l’aide figure de plus de nombreux exemples de codes pouvant être repris.
L’aide peut s’utiliser de différentes manières :
- Dans l’éditeur de code : sélectionnez un mot clé et appuyez sur la touche de fonction F1 :
Exemple : MsgBox
- Par le menu ? :
On peut alors consulter l’aide par rubrique :
ou faire une recherche intuitive en saisissant une phrase significative :
Compléments
Parcours d’une collection d’objets
Pour parcourir l’ensemble des objets appartenant à une collection, on utilise une boucle For Each… Next
Exemple : affichage du nom de toutes les feuilles ouvertes du classeur actif
Public Sub LireCollectionFeuilles() | |
Dim Classeur As Workbook | Déclaration de la variable Classeur en tant qu’objet WorkBook |
Dim Feuille As Worksheet | Déclaration de la variable Feuille en tant qu’objet WorkSheet |
Set Classeur = ActiveWorkbook | Affectation de l’objet ClasseurActif à la variable classeur |
For Each Feuille In Classeur.Sheets | Pour Chaque Feuille de la collection Sheets du classeur actif |
Debug.Print Feuille.Name | Afficher nom de la feuille |
Next | Suivant |
End Sub |
Le bloc d’instructions With… End With
Ce bloc permet de lire ou de modifier plus rapidement plusieurs propriétés pour un même objet.
Exemple :
Le code ci-dessous modifie la police de caractères utilisée dans les cellules A1 à A5 de la feuille active (nom : Arial, gras, couleur : vert, taille : 14)
Public Sub SansWith()
Range("A1:A5").Font.Name = "Arial"
Range("A1:A5").Font.Bold = True
Range("A1:A5").Font.Color = vbGreen
Range("A1:A5").Font.Size = 14
End Sub
Ce code est correct d’un point de vue syntaxique mais est long à rédiger et difficile à lire.
Avec With …et End With le code devient le suivant :
Public Sub AvecWith()
With Range("A1:A5").Font
.Name = "Arial"
.Bold = True
.Color = vbGreen
.Size = 14
End With
End Sub
---------------------------------------------------------------------------------------------------
Aucun commentaire:
Enregistrer un commentaire