IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Désigner une feuille par son CodeName


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut Désigner une feuille par son CodeName
    Chaque feuille excel est identifier par deux propriétés :
    Son "Name" : C'est ce qui est écrit sur l'onglet et qui est visible par l'utilisateur.
    Son "CodeName" : C'est le nom de la feuille écris en dur. Le "CodeName" n'est pas visible par l'utilisateur et à partir de l'interface développeur, sa correspond à la propriété (Name) de chaque feuille.

    Sous Excel VBA on peut indifféremment sélectionner une feuille par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Nom_de_Mon_Onglet").Select
    ou

    Feuil1.Select

    L'avantage d'utiliser le "CodeName", c'est que si on utilisateur à l'idée de renommer l'onglet, ma macro trouvera quand même le "CodeName" Feuil1 !!

    Mon problème est que cette commande que j'utilise pourtant à foison, ne marche plus lorsque que travail sur un autre Workbook que celui qui exécute ma macro ....


    Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
    Sheets("Nom_de_Mon_Onglet").Select
    ça Marche ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
    Feuil1.Select
    Me renvoie une erreur :
    Erreur d'exécution '1004':
    La méthode 'Select' de l'objet '_Workshhet' a échoué

    ... J'ai essayé toute les combinaison possible :-/
    ActiveWorkbook.Feuil1.Select
    Worksheets(Feuil1.Name).Select

    Bref ... je sais plus quoi inventer ...
    Si quelqu'un a une idée !!
    Merci.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Quel message s'inscrit dans la fenêtre d'exécution quand tu lances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
    Debug.Print Sheets("Nom_de_Mon_Onglet").CodeName
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Invité
    Invité(e)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    "Feuil1" !!!
    Et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Feuil1.Name
    j'obtiens le "Name" de l'onglet de la feuille qui exécute la macro !! pas de l'ActiveWorkbook que je viens d'ouvrir avec mon Workbooks.Open

    :'-(

    Citation Envoyé par Menhir Voir le message
    Quel message s'inscrit dans la fenêtre d'exécution quand tu lances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.Open ("C:\Users\.....\Documents\Classeur2.xlsx")
    Debug.Print Sheets("Nom_de_Mon_Onglet").CodeName

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu répond à qui ? A Menhir ou à moi ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Nouveau2 Voir le message
    Tu répond à qui ? A Menhir ou à moi ?
    Je suis en train de lire ta réponse dsl. Je répondais à Menhir.

    Dons, dans le liens que tu m'as transmis on voit que ...
    par exemple on peut désigner "l'autre feuille" par son nom de projet ... ok , je m'y plonge et j'essai d'appliquer cette méthode ... des que j'aurais compris ce qu'est mon nom de projet et comment l'utiliser :-/

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas à être désolé, c'est surtout pour savoir à qui tu répond, sinon, on comprend rien aux réponses.

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    De toute manière, le CodeName ne s'applique directement qu'au classeur contenant le code !

    Pour utiliser le CodeName d'une feuille d'un classeur autre que ThisWorkbook,
    il faut boucler sur les feuilles de cet autre classeur pour lire leur CodeName afin de définir
    une variable de type Worksheet pointant sur la feuille désirée comme cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function GetSheetByCode(Wb As Workbook, CODE$) As Worksheet
             Dim Ws As Worksheet
        For Each Ws In Wb.Worksheets
              If Ws.CodeName = CODE Then Set GetSheetByCode = Ws: Exit For
        Next
    End Function
    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est effectivement une autre solution (qui ressemble à http://www.cpearson.com/excel/RenameProblems.aspx). Les 2 fonctionnent.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Ton lien cherche dans le classeur contenant le code, donc ThisWorkbook,
    ce qui est un peu idiot pour un CodeName fonctionnant directement justement avec ThisWorkbook !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Bonjour, bonjour !

    De toute manière, le CodeName ne s'applique directement qu'au classeur contenant le code !

    Pour utiliser le CodeName d'une feuille d'un classeur autre que ThisWorkbook,
    il faut boucler sur les feuilles de cet autre classeur pour lire leur CodeName afin de définir
    une variable de type Worksheet pointant sur la feuille désirée comme cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function GetSheetByCode(Wb As Workbook, CODE$) As Worksheet
             Dim Ws As Worksheet
        For Each Ws In Wb.Worksheets
              If Ws.CodeName = CODE Then Set GetSheetByCode = Ws: Exit For
        Next
    End Function
    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse



    Merci tout le monde !!
    La réponse est donc : "On ne peut pas" désigner une feuille appartenant à un autre classeur que ThisWorbook par son CodeName ...
    Il faut donc faire tourner la "moulinette" donné par Marc-L pour identifier le Name et faire référence à la feuille par son Name.
    Merci merci merci tout le monde. Je clôture le sujet.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ben je t'ai répondu que si.

    Cependant, la fonction de Marc-L est préférable car moins restrictive. Elle n'oblige pas à référencer le projet.
    Le classeur B n'est pas pris en référence par le classeur A et les erreurs interviennent en cours d'exécution (Run Time) par exemple si l'indice de la feuille n'existe pas. Avec l'autre solution, les erreurs interviennent en cours de conception (Design Time) ou en cours de compilation (Compile Time) si le projet est compilé. Ce sont 2 techniques différentes.

    Il n'y a absolument aucune raison de le faire, mais juste pour l'exemple, si tu devais mettre un (Custom) Event dans la Feuil de ton classeur A, tu ne pourrait pas utiliser WithEvents par exemple pour récupérer les événements déclenché par le classeur A car ce type de technique demande un typage fort pour fonctionner.

    Classeur A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Event CustomActivate()
    Private Sub Worksheet_Activate()
        RaiseEvent CustomActivate
    End Sub
    Classeur B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private WithEvents Feuil As VBAProject2.Feuil1
    Private Sub Workbook_Open()
        Set Feuil = VBAProject2.Feuil1
    End Sub
    Private Sub Feuil_CustomActivate()
        MsgBox "Custom Event déclenché."
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accéder à une feuille protégée, d'un autre classeur par son Codename
    Par stdonat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/12/2014, 20h41
  2. [XL-2013] selectionner une feuille par son nom
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2014, 11h19
  3. [XL-2003] Formule faisant référence à une feuille par codeName
    Par delorvallois dans le forum Excel
    Réponses: 2
    Dernier message: 08/03/2010, 09h11
  4. [XL-2000] Appeler une feuille par son CodeName
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2009, 17h42
  5. Réponses: 1
    Dernier message: 02/09/2009, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo