par , 01/02/2021 à 11h51 (1906 Affichages)
PREAMBULE
Le VBA est un programme orienté objet (POO)
Un classeur, une feuille, une cellule, un tableau croisé dynamique, un graphique, etc. sont des objets.
Lorsque l’on applique une méthode à un objet ou que l’on modifie l’une de ses propriétés il est important de préciser sa parentalité au risque de se tromper d’objet.
La parentalité d’un objet mais quésaco ?
Tout objet a un parent.
Ainsi une cellule ou une plage de cellules a comme parent la feuille dans laquelle elle se trouve et cette feuille a comme parent le classeur où elle se trouve et lui-même a comme parent l’application Excel et ainsi de suite.
EXEMPLE
Dans le classeur où se trouve notre code VBA, nous avons trois feuilles nommées respectivement [Client], [Facturier d'entrée] et [Facturier sortie] et nous souhaiterions mettre en couleur jaune les cellules A16 et B16 de la feuille nommée [Facturier entrée]
Au moment où nous écrivons la ligne de code la feuille active est celle où se trouve les cellules que nous voulons mettre en évidence or suite à un appel téléphonique nous consultons la liste des factures clients présente dans la feuille [Facturier sortie].
Nous lançons la procédure VBA avec cette ligne de code
Range("A16:B16").Interior.Color = vbYellow
Alors que nous voulions mettre en évidence deux cellules dans la feuille [Facturier d'entrée], nous avons en réalité mis en jaune les cellules de la feuille [Facturier sortie].
Si nous pouvons considérer que cette erreur là n'a pas beaucoup de conséquence, elle aurait pu en revanche s'avérer catastrophique si nous avions écrit des valeurs dans ces cellules.

Le risque de travailler avec un objet sans spécifier la parentalité complète de celui-ci est immense.
PRECISONS LA PARENTALITE
Reprenons notre exemple et rappelons nous que l'on souhaite mettre en évidence les cellules A16:B16 de la feuille nommée Facturier entrée présente dans le classeur où se trouve le code VBA.
Exemple 1 - L'objet est orphelin. Nous traiterons donc la plage A16:B16 de la feuille active
Range("A16:B16").Interior.Color = vbYellow
Exemple 2 - Le parent de la plage A16:B16 étant la feuille nommée Facturier entrée, nous allons donc le préciser dans notre code, ce qui nous permettra de traiter la bonne plage de cellules
Worksheets("Facturier entrée").Range("A16:B16").Interior.Color = vbYellow
Est-ce suffisant ?
Non évidemment, le fait de préciser la feuille ne nous met pas à l'abri des problèmes.
En effet, si par exemple plusieurs fichiers sont ouverts et que la feuille active, n'est pas l'une des feuilles du classeur dans lequel nous avons écrit le code VBA. Nous aurons une erreur 9 renvoyé par le code VBA.
Il est donc primordial de préciser l'objet classeur également (voir l'exemple 3, ci-dessous)
Exemple 3 - La parentalité totale de l'objet est précisé.
ThisWorkbook.Worksheets("Facturier entrée").Range("A16:B16").Interior.Color = vbYellow
Nous précisons bien dans cet exemple
- le classeur soit l'objet Workbook (ThisWorkbook)
- la feuille soit l'objet Worksheet (Worksheets("Facturier entrée")
- la plage de cellules soit l'objet Range (Range("A16:B16"))