Comprendre les objets d’Excel VBA

Un objet est un élément d’Excel : les trois principaux objets sont  le classeur, la feuille et la cellule.

L’intérêt de manipuler des objets est de pouvoir les manipuler par des variables. Ainsi, au lieu d’écrire :

Workbooks("vente.xlsx").Activate
Activeworkbook.Close SaveChanges:=True

Dans cette exemple 1, on met au premier plan le classeur Vente.xlsx, qui est censé être ouvert.

En utilisant des objets, on écrira plutôt :

'Déclare la variable vbVente en tant que variable Classeur (Workbook)
Dim vbVente As Workbook
'Affecte le classeur actif à la variable vbVente.
'On met le mot-clé Set justement parce que vbVente est une variable Objet
Set vbVente = Activeworkbook
'On demande de fermer le classeur wbVente, qu'il soit ou non au premier plan.
wbVente.Close SaveChanges:=True

Dans cet exemple 2, on a donc plus de ligne (3) que dans l’exemple 2 (2 lignes). Pour autant, les avantages à utiliser les objets dans des variables sont immenses. Voici un premier avantage : quand je lis la ligne wbVente.Close, je sais immédiatement de quel classeur il s’agit, puisque le nom de la variable me l’indique. Alors que dans je lis la ligne Activeworkbook.Close, je dois retrouver la précédente commande demandant de mettre un classeur au premier plan.

Voici un exemple un peu plus complexe, pour mettre en avant d’autres avantages de l’utilisation des objets dans des variables.

Voici d’abord un exemple sans objet :

Workbooks("vente.xlsx").Activate
'On ajoute une feuille au classeur actif
Activeworkbook.Worksheets.Add
'On crée un classeur
Workbooks.Add
'On ajoute une feuille au (nouveau) classeur actif
Activeworkbook.Worksheets.Add
'On remet un classeur au premier plan
Workbooks("vente.xlsx").Activate
Activeworkbook.Close SaveChanges:=True

Et voici l’exemple avec objet et variable objet :

Dim wbVente As Workbook
Dim wbRetour As Workbook

Set wbVente = Activeworkbook
Set wbRetour = Workbooks.Add
'On ajoute une feuille au classeur wbVente,
'qui n'est pourtant pas au premier plan, ce qui n'est pas un problème !
wbVente.Worksheets.Add
'Idem pour le nouveau classeur, qui se trouve être au premier plan mais on ne s'en occupe pas, on utilise la même commande
wbRetour.Worksheets.Add
'On ferme le classeur vbVente qui n'est toujours pas au premier plan
wbVente.Close SaveChanges:=True

Au final, la méthode classique est fragile : chaque action sur un classeur dépend de la précédente action qui aura mis le classeur au premier plan. Dans la méthode objet, on ne s’occupe pas de cet aspect : on manipule une variable qui pointe vers un objet, et non l’objet « physique ». C’est un atout énorme pour comprendre le code et maintenir plus facilement.

Gonzague DUCOS a écrit 35 articles

Formateur et développeur Office VBA et Windev

Laissez une réponse

Votre adresse e-mail ne sera pas publié Les champs requis sont marqués *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.