Bonjour
@cathodique ,
set f=Thisworkbook.ShAgent ''le code plante erreur de compilation
Le CodeName (comme son nom l'indique) est fait pour être utilisé dans le code du classeur où se trouve le code qui l'utilise. Le CodeName fait référence à une feuille du classeur où est placé le code. On ne peut pas
(directement) utiliser CodeName pour référencer une feuille d'un
autre classeur.
Concernant :
set f=Thisworkbook.ShAgent ''le code plante erreur de compilation
Dans cette écriture, vous désignez ThisWorkbook suivi d'un point
.
Le point doit être suivi soit d'une
propriété soit d'une
méthode appartenant à la classe générique "Workbook".
Or si vous examinez les propriétés et les méthodes au sein de la classe Workbook, il n'y en a aucune avec le nom
ShAgent !
ShAgent n'est ni une
propriété ni une
méthode correcte pour aucun objet de type Workbook. Donc le compilateur refuse l'instruction.
set f =ShAgent ''ne plante pas, pourquoi?
Cette expression est correcte car
ShAgent est le CodeName d'une feuille du classeur où est situé le code de cette instruction.
Chose amusante :
Vous modifiez le CodeName d'une feuille de votre classeur pour "
Parent".
Ensuite vous utilisez : Set f = ThisWorkbook.Parent
Cette instruction sera considérée comme correcte par le compilateur mais ne renverra pas la feuille de CodeName "Parent" mais l'objet
application !
En effet après le point, VBA s'attend à une propriété ou méthode de la classe Workbook. Or tout objet Workbook a une propriété nommée Parent. F sera donc la propriété Parent de l'objet ThisWorkbook qui n'est autre que l'objet
Application et pas la
feuille de CodeName "Parent".