XL 2010 Problème avec le CodeName

cathodique

XLDnaute Barbatruc
Bonjour,

Je rencontre un problème en utilisant le codeName d'une feuille de calcul.
Les feuilles de mon classeur sont susceptibles d'être renommées et/ou déplacées.
J'ai fait comme ci-dessous mais le code plante. Où est mon erreur, merci? J'ai renommé le codename.
ex: initialement codename Feuil3 renommée en ShAgent, l'onlget de cette feuille est "Coordonnées".

VB:
Dim f As Worksheet
set f=Thisworkbook.ShAgent ''le code plante erreur de compilation
'mais'
set f=Thisworkbook.sheets("Coordonnées") 'ne plante pas
'et
set f =ShAgent  ''ne plante pas, pourquoi?
1713071632061.png

J'ai mis ThisWorkBook car quelques fois je travaille avec 2 classeurs ouverts.

Je voudrai bien avoir une explication.

Merci.

Bon dimanche.
 

Oneida

XLDnaute Impliqué
Bonjour,

Le classeur (thisworkbook) ne connait que les noms d'onglet pas les noms de feuille
vous pouvez utiliser les noms de feuille ou les noms d'onglets seuls, mais pour ThisWorkBook seulement les noms d'onglet
VB:
Sub test()
    Dim f As Worksheet
    
    Set f = ThisWorkbook.Worksheets("Coordonnées") 'ne plante pas
    'ou
    Set f = ShAgent
    'ou
    Set f = Worksheets("Coordonnées")

End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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".
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Messieurs Bonjour;),

Je vous remercie. Donc si j'ai bien compris, je peux utiliser le CodeName dans mon classeur actif, sans risque de plantage du code bien qu'il y ait d'autres classeurs ouverts. En faisant
VB:
set f =ShAgent

Bon dimanche.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Je vous remercie. Donc si j'ai bien compris, je peux utiliser le CodeName dans mon classeur actif, sans risque de plantage du code bien qu'il y ait d'autres classeurs ouverts. En faisant VB:
VB:
set f =ShAgent
Non ce n'est tout à fait pas cela !

On ne parle pas de classeur actif. On se moque que le classeur soit actif ou non.

Le CodeName s'applique au classeur où est écrit le code VBA qui utilise le CodeName, celui-là et pas un autre, qu'il soit actif ou non.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
CodeName est le nom d'une propriété String en lecture seule qui reproduit le nom de l'objet VBA implanté par l'application hôte dans le projet du classeur qui détient l'entité Excel que cet objet représente et permet de manipuler.
 

Discussions similaires

Statistiques des forums

Discussions
312 242
Messages
2 086 536
Membres
103 244
dernier inscrit
lavitzdecreu