La notion d’objet dans le langage VBA [#10 FORMATION EXCEL VBA COMPLETE]
Téléchargement
Vous pouvez obtenir le fichier d'exemple de cet article et découvrir la méthode d'apprentissage de VBA pas-à-pas en cliquant sur le lien suivant :
Tutoriel Vidéo
Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !
1. La notion d’objet
Lorsque l’on parle de programmation d’une manière générale, nous entendons souvent parler « d’objet ».
Il s’agit en effet d’une notion fondamentale dans de nombreux langages de programmations, qui sont dit « orientés objets ». Nous parlons alors de « Programmation Orientée Objet ».
Dans ce chapitre, nous allons justement revenir sur cette notion que nous avons déjà eu l’occasion d’aborder rapidement dans le chapitre précédent « Analyse d’une macro VBA [#04 FORMATION EXCEL VBA COMPLETE] ».
Nous avions alors défini un objet comme étant « en quelque sorte une super variable qui est elle-même composée de propriétés (c’est-à-dire des variables propres à cet objet) et méthodes (c’est-à-dire des procédures qui permettent d’agir sur cet objet). ».
Pour reprendre une analogie simple de la vie de tous les jours, nous pouvons comparer un objet pris dans le sens qui nous intéresse ici (c’est-à-dire du point de vue de la programmation) avec une voiture :
- Ici nous avons donc un objet tangible qui porte le nom de « voiture »,
- Cet objet dispose d’un certain nombre de propriétés (marque, modèle, couleur,…),
- Il est possible de réaliser des actions avec cet objet (rouler, tourner,…)
- Cet objet est également composé d’autres objets (roues, moteur,…)
En programmation, la logique est relativement similaire.
Imaginons maintenant que nous développions un jeu de course, dans lequel nous retrouverons bien évidemment des voitures !
Dans ce cas-là, l’analogie que nous venons de voir à l’instant prend alors tout son sens !
Nous retrouverons en effet un objet qui portera bien sûr pour nom « voiture », auquel nous affecterons des propriétés, des méthodes (actions) et des sous-objets !
2. Et VBA alors ?
Alors évidemment dans VBA il n’est pas question de voiture.
Vous vous demandez surement quel rapport entre une application Excel développée en VBA et cette notion d’objet que nous découvrons ensemble ?
Et bien figurez-vous qu’Excel est justement un objet !
Il s’agit en effet du super objet duquel toutes les actions que nous allons exécuter de manière automatique sur nos feuilles de calculs vont découler.
Pour illustrer cette notion, imaginons que nous souhaitions simplement modifier la valeur d’une cellule en VBA.
- La valeur d’une cellule est une propriété de cette cellule
- Cette cellule appartient à une feuille de calcul.
- La feuille de calcul appartient elle-même à un classeur
- Ce classeur est exécuté au sein de l’application Excel !
Par cet exemple, nous retrouvons la notion de hiérarchisation des objets.
Nous partons en effet, de l’objet le plus général (ici l’objet Application) pour arriver sur l’objet sur lequel nous souhaitons exécuter une action (l’objet Range).
Pour passer d’un objet à un sous-objet ou une propriété, nous utilisons un point de séparation (« . ») :
Sub modifierCellule()
Application.Workbooks("Excelformation.fr - Formation VBA.xlsm").Worksheets("10-Les objets").Range("A6").Value = "Hello !"
End Sub
Ici, nous ne faisons qu’effleurer l’étendue des possibilités offertes par l’objet Application et ses sous-objets.
Il suffit en effet de saisir son nom, puis le point pour visionner faire apparaître le menu de sélection des propriétés :
Voyez comme cette liste est énorme !
Heureusement, lorsque nous développons des applications, même lorsque de celles-ci commencent à être relativement importantes, nous n’utiliserons qu’une poignée de propriétés de cette liste. Il est évidemment inutile de toutes les connaître par cœur ! Ouf !
D’ailleurs, vous vous rendrez vite compte que nous serons toujours amenés à utiliser les mêmes sous-objets, propriétés et méthodes.
3. La simplification du code
Reprenons l’exemple que nous venons de voir juste dans la partie :
Sub modifierCellule()
Application.Workbooks("Excelformation.fr - Formation VBA.xlsm").Worksheets("10-Les objets").Range("A6").Value = "Hello !"
End Sub
Ici, chaque élément de la hiérarchie de l’objet qui permet de modifier la valeur de la cellule a été clairement qualifié. Comprenez par-là que nous spécifions clairement le nom de chaque éléments (nom du classeur et de la feuille).
Cela permet de générer un code sans la moindre ambiguïté, mais alourdi considérablement la phase de développement.
Heureusement, VBA dispose d’une panoplie de raccourcis qui permettent de se passer d’une partie de la saisie de cette ligne de code !
Tout d’abord, l’objet principal Application étant à la base de tous les autres objets de VBA, celui-ci est implicite, il n’est pas nécessaire de le préciser à chaque fois.
Nous pouvons donc raccourcir le code de la manière suivante :
Sub modifierCellule()
Workbooks("Excelformation.fr - Formation VBA.xlsm").Worksheets("10-Les objets").Range("A6").Value = "Hello !"
End Sub
Il est également possible de se passer de préciser sur quel classeur et quelle feuille de calcul nous travaillons lorsqu’il s’agit des éléments actifs.
Nous pouvons donc supprimer l’appel du classeur :
Sub modifierCellule()
Worksheets("10-Les objets").Range("A6").Value = "Hello !"
End Sub
Ainsi que l’appel de la feuille de calcul :
Sub modifierCellule()
Range("A6").Value = "Hello !"
End Sub
Evidemment, ces deux derniers raccourcis sont à utiliser avec la plus grande des prudences ! En effet, si une autre feuille de calcul est sélectionnée, alors la valeur contenue dans la cellule A6 va être écrasée, et aucun retour en arrière ne sera plus possible !
Un bon moyen d’éviter ce genre de mésaventure consiste à créer un bouton directement sur la feuille de calcul concernée pour lancer la macro
Pour en savoir plus sur les différents moyens de lancer une macro, je vous invite à consulter le chapitre correspondant.
Enfin le dernier raccourci consiste à ôter l’appel à la propriété Value, qui est également implicite dès lors qu’elle est appelée depuis un objet Range (objet de plage de cellules) :
Sub modifierCellule()
Range("A6") = "Hello !"
End Sub
Sachez qu’il ne s’agit pas vraiment du dernier raccourci, il est également possible d’appeler une cellule en utilisant les symboles d’encadrement :
Sub modifierCellule()
[A6] = "Hello !"
End Sub
Mais il s’agit là davantage d’une astuce que d’un véritable raccourci !
4. Collectionnons les objets
Revenons sur l’exemple que nous avons vu dans la première partie et dans lequel nous nous attelions à développer un jeu de course automobile.
Nous avions alors vu qu’il est tout à fait possible d’utiliser un objet qui porte le nom de « voiture ».
Mais un jeu dans lequel nous n’aurions qu’une seule voiture manquerait à coups sûr de fun !
Nous pourrions alors créer une infinité d’objets différents pour chaque voiture, mais cela serait une perte de temps et de ressource considérable…
Et c’est là qu’intervient la notion de « Collection d’objets ».
Une collection d’objets permet de regrouper des ensembles d’objets de même type.
Ainsi, nous aurions une collection d’objets qui porterait le nom de « voitures » (au pluriel donc) et dans laquelle nous retrouverions plusieurs fois le même objet, disposant de ces propres propriétés (voitures("joueur1"), voitures("joueur2"),…).
De cette manière, nous pourrions imaginer passer en revue tous les objets appartenant à la collection « voitures » pour effectuer une action (démarrer, …).
En VBA, c’est un peu la même chose : nous pouvons ainsi passer en revue toutes les feuilles de calculs (« Worksheets ») pour effectuer une action (protéger les cellules,…).
Pour effectuer une action sur un seul objet appartenant à une collection, nous saisissons son identifiant entre parenthèses comme le montre l’exemple vu dans la partie précédente :
Sub modifierCellule()
Application.Workbooks("Excelformation.fr - Formation VBA.xlsm").Worksheets("10-Les objets").Range("A6").Value = "Hello !"
End Sub
En effet, ici nous souhaitons modifier la cellule A6 de la feuille de calcul « 10-Les objets » (Worksheets("10-Les objets").
Evidemment, s’agissant d’une chaîne de caractère, nous utilisons également les guillemets pour saisir le nom de l’objet.
Lorsque nous ne connaissons pas le nom de l’objet, il est également possible de l’appeler par son numéro d’identifiant au sein de la collection (sans guillemets cette fois-ci) :
Sub modifierCellule()
Application.Workbooks("Classeur1").Worksheets(1).Range("A1").Value = "Hello !"
End Sub
Attention toutefois, utiliser un numéro non attribué entraînerait une erreur d’exécution :
Ici nous appelons la 15ème feuille du classeur qui n’en contient que 14… Soyez donc vigilent, en réalisant des tests préalables, mais cela nous le verrons dans les prochains chapitre de la formation !
Maintenant que nous venons de faire le tour de la notion d’objet en VBA, nous nous retrouverons la semaine prochaine un nouveau chapitre dans lequel nous verrons comment créer nos propres classes afin de manipuler nos propres objets personnalisés !