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.