Comment désigner une feuille excel par son codename

Résolu/Fermé
wire less Messages postés 210 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 - 3 nov. 2015 à 15:00
wire less Messages postés 210 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 - 13 nov. 2015 à 13:54
Bonjour,
Désigner une feuille excel par son codename, c'est parfois très facile !

Ainsi, au lieu d'écrire, Sheets("Nom_de_mon_onglet").Activate
on a qu'à écrire par exemple Feuil1.Activate

C'est super ... mais voila ...
quand on ouvre un second classeur par exemple avec la commande
Workbooks.Open("c:\Mes_Documents\...\Mon_Doc.xls")

et que l'on veut activer la nouvelle feuille 1 avec "Feuil1.Activate" ben ... la méthode n'est plus accepté !!

Quelqu'un aurait une idée ???


5 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
3 nov. 2015 à 16:20
Bonjour,

Toujours avec le code Name!

Option Explicit
Private Sub CommandButton1_Click()
  Dim wsh As Worksheet
Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
'boucle sur toutes les feuilles
 For Each wsh In ActiveWorkbook.Worksheets ' pour chaque feuille du classeur
       MsgBox wsh.Name 
  Next 'on passe à la feuille suivante
'feuille active
MsgBox ActiveSheet.Name
End Sub



1
wire less Messages postés 210 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 5
9 nov. 2015 à 10:22
Merci CS_Le Pivert.
Mais il s'agit bien d'une confusion ... et j'essai justement de la résoudre.

Si je reprend ton script et que je le complète avec ce dont j'ai besoin :

For Each wsh In ActiveWorkbook.Worksheets 
       MsgBox wsh.Name 
       MsgBox wsh.CodeName
  Next 


Alors tu te rendra compte que chaque feuille possède un "Name" : c'est le nom de l'onglet écris sur l'onglet Excel, et un CodeName. Le CodeName c'est le vrai nom de l'objet feuille.

J'ai besoin du CodeName parce qu'il est écris en dur et que l'utilisateur ne peut pas le modifier simplement en cliquant-droit sur l'onglet et en le renommant. Ainsi, pas de possibilité d'erreur pour mon script.

Malheureusement, il est facile d'appeler un CodeName sur l'instance d'excel à l'origine de la macro ... (Feuil1.Select ou lieu de Sheets("Nom_de_Mon_Onglet").Select
Mais lorsqu'il s'agit d'une autre feuille Excel ... ben c'est plus la même chose !!

Si je fait :

Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
Sheets("Nom_de_Mon_Onglet").Select

ça marche.

Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
Feuil1.Select

J'ai une erreur :
Erreur d'exécution '1004':
La méthode 'Select' de l'objet '_Workshhet' a échoué

...

Quelqu'un aurait une idée ??
1
wire less Messages postés 210 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 5
9 nov. 2015 à 11:55
:-/ ... t'énerve pas ...

MsgBox wsh.CodeName

Il me semble que c'est moi qui l'ai écris ... toi tu n'as fait référence qu'à

MsgBox wsh.Name

Mon problème reste le même.
Dans ma feuille je ne connais que mon "CodeName" ... et pas mon "Name".

Le "CodeName" en question c'est "Feuil1". Si je veux connaitre le "Name" associé je n'ai qu'à faire :
MsgBox Feuil1.Name

Je reviens à mon problème :

Sheets("Nom_de_Mon_Onglet").Select

ça marche

Feuil4.Select

ça marche pas.
ou encore :
Sheets(Feuil1.Name).Select

qui ne marche pas non plus.

Je précise que ces méthodes marchent très bien quand je travail que sur les feuilles de l'excel qui exécute la macro.

J'aurais aimé faire un par exemple ...
ActiveWorkbook.Worksheets.Feuil1.Select 

mais sa ne marche pas non plus ...
J'ai plus d'idée !
Merci encore tout le monde !!
0