Comment désigner une feuille excel par son codename
Résolu
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 ???
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
-
ContributeurBonjour,
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
-
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 ?? -
ContributeurAlors 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.
Quand tu écris cela tu plaisantes, car juste au dessus il y a le code que je t'ai donné avec ceci:
MsgBox wsh.Name
MsgBox wsh.CodeName
Avec toi c'est un dialogue de sourd. Cela fait longtemmts que je connais la différence. C'est même moi dans un précédent post qui t'ai donné le lien sur la propriété des feuilles! -
:-/ ... 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 !! -
-
@cs_Le Pivert!! Hé hé hé !!
C'est brillant !!
Bon ... j'aurais préféré pouvoir sélectionner directement à partir du CodeName comme je le fais d'habitude !! Mais à défaut ... je suis bien content d'avoir un code qui marche :-/
Alors là, je dis bravo pour l'astuce ! :-D je vais m'en contenter bien volontiers !!
Merci ?ment cs_Le Pivert ...
Je laisse le sujet ouvert encore cet aprèm au cas ou un autre génie du mal me vienne en aide mais sinon je clôture ce sujet demain matin.
Thank you.
-