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 :

CodeName d'une feuille dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut CodeName d'une feuille dans une variable
    Bonjour tout le monde,


    Voilà, tout est dit dans le titre (ou presque), si vous voulez bien m'aider...

    En fait, je n'arrive pas à "identifier" une Worksheet dont je connais déjà son CodeName qui est stocké dans une variable.
    J'ai déjà tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(maVariableQuiContientLeCodeName).Range(...etc)
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(maVariableQuiContientLeCodeName).Range(...etc)
    ou même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maVariableQuiContientLeCodeName.Range(...etc)
    mais sans succès !

    Mais en fait, je ne sais pas si c'est "faisable" directement et simplement sans devoir boucler sur les onglets et tester leur CodeName (un peu lourd !)




    Là je bloque. J'attends vos réponses avec impatience,
    Merci d'avance...

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Comment as-tu défini et typé ta variable maVariableQuiContientLeCodeName ?

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Tu l'appelles par son nom d'objet (onglets objet de la fenêtre de projet)
    genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Nomvoulu = Feuil1
     MsgBox Nomvoulu.Name

    le msgbox retournant Toto si ton objet Feuil1 a pour nom d'onglet Toto...


    cordialement,

    Didier

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Salut Ormonth, ucfoutu, le forum et merci pour vos réponses,


    Oui, j'ai oublié de préciser, ma variable est de type String.
    Mon objet Worksheet, son CodeName c'est Modele.
    Donc maVariableQuiContientLeCodeName = "Modele"


    En faite, je veux absolument appeler la Worksheet par son CodeName et pas par le Name parce que ce dernier peut être modifié par l'utilisateur, donc j'ai choisi le CodeName pour éviter ça mais je sais pas à quoi correspond vraiment la propriété Index ! est ce qu'elle change quand on déplace les onglets ? puis je l'utiliser "sans crainte" à la place de CodeName (ça serait simple) ?

    Voilà -au passage- si vous pouviez m'en dire un peu plus sur Index...
    J'exagère ?!!!


    Merci...

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Vois les tutos et l’aide vba

    Dans l’aide vba tu as tout ce que tu désires à :
    - CodeName, propriété
    - Index, propriété

    Amuses-toi à déplacer l’onglet de ta feuille et à taper dans la fenêtre exécution de l’éditeur vba (CTRL+G) des choses genre :
    - ?activesheet.index
    - ?activesheet.codename
    - Etc…

    vois aussi ici :

    Qu'est-ce que l'onglet ? Est-ce le nom de la feuille ?
    http://www.developpez.net/forums/d82...emier-feuille/

    cordialement,

    Didier

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, et également http://silkyroad.developpez.com/VBA/...alcul/#LII-B-6

    L'intéret du CodeName est de ne pas avoir à modifier le code VBA en cas d'ajout de feuilles, de déplacement de feuilles ou d'onglet renommé

  7. #7
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Salut,


    Citation Envoyé par Ormonth Voir le message
    Bonjour,

    Vois les tutos et l’aide vba

    Dans l’aide vba tu as tout ce que tu désires à :
    - CodeName, propriété
    - Index, propriété

    ...
    Oh j'ai fait tout ça, crois moi !
    Je pense qu'on s'éloigne du problème initial, donc je retire ce que j'ai dit sur Index, je préfèrerais utiliser la propriété CodeName...

    Alors voilà :
    - ma variable : maVariableQuiContientLeCodeName = "Modele" (et est de type string)
    - et je n'arrive pas à appeler Modele (qui est le CodeName de l'onglet dont le Name est "Feuil1")

    Si ma variable contenait le Name de mon onglet, c'est à dire si elle était = "Feuil1", j'aurais fait Worksheets(maVariable).Range(...etc), et ça aurait marché, mais dans mon cas je ne trouve pas avec quoi remplacer "Worsheets"



    Citation Envoyé par kiki29 Voir le message
    Salut, et également

    ...

    L'intéret du CodeName est de ne pas avoir à modifier le code VBA en cas d'ajout de feuilles, de déplacement de feuilles ou d'onglet renommé
    Exactement !



    Merci à tous...

  8. #8
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Re, un exemple

  9. #9
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Oui kiki29, c'est exactement ce que je veux obtenir, j'avais pensé à ça moi aussi...
    pour les autres:
    on boucle sur les Worksheets et on teste leur CodeName


    Mais je voulais savoir si on pouvait faire plus simple !



    Merci en tout cas, je vais faire ça pour avancer...

  10. #10
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonsoir
    tu mets seulement et le cout est parti

    Bonne nuit.

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par Abed_H Voir le message
    Bonsoir
    tu mets seulement et le cout est parti

    Bonne nuit.
    Bonsoir,
    Sérieux ?
    Et il s'élève à combien, ce coût ?

  12. #12
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Citation Envoyé par Abed_H Voir le message
    Bonsoir
    tu mets seulement et le cout est parti

    Bonne nuit.
    Non c'est pas ça Abed_H, relis plus attentivement
    Merci quand même de t'être intéressé à mon cas

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    F1
    CodeName, propriété
    ...
    Notes
    Le nom de code d'un objet peut être utilisé à la place d'une expression qui renvoie l'objet. Par exemple, si le nom de code de la feuille de calcul 1 est « Sheet1 », les expressions suivantes sont identiques :

    Worksheets(1).Range("a1")
    Sheet1.Range("a1")

  14. #14
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Bonjour,


    mercatog :
    Merci mais je sais tout ça.
    Et si le CodeName de l'objet est dans une variable String :
    maVariable = "Sheet1" ???



    Ok, je vois...
    Il me reste plus qu'à exposer mon problème tel qu'il est pour me faire comprendre !

    Données :
    - J'ai plusieurs Worksheet
    - Sur certaines d'entre elles si je double-clique sur une cellule (pas toutes mais une en particulier), cela provoque l'apparition d'un UserForm
    - Dans mon UserForm, j'ai un bouton "Valider", qui une fois cliqué va insérer des trucs dans "LA cellule qui l'a appelé"

    Solutions :
    - Donc, je dois bien faire passer au UserForm l'objet Worksheet ET la cellule, pour qu'il insère "ces trucs" au bon endroit,
    On est bien d'accord sur ce point ?!!!

    Problème :
    - Entre l'affichage du UserForm et le Clique sur "Valider" l'utilisateur pourrait (c'est peu probable mais ça peut arriver) modifier le nom de l'onglet et/ou le déplacer (l'onglet) ou activer un autre onglet.
    Donc, je ne dois pas utiliser le Name de l'onglet ni son Index ni ActiveWorksheet ou ActiveCell.



    Voilà, je crois avoir tout dit...

    Merci à tous...

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour ceci, Il suffit d'instancier ta feuille avant l'appel de l'userform!
    ça dépend du code!
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Public sht As Worksheet
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Set sht = ActiveSheet
    Cancel = True
    If Target.Address = "$A$1" Then UserForm1.Show
    si ton usf est modal, l'utilisateur n'aura pas la main pour modifier tes feuilles

  16. #16
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour le fil le forum tu as essaye ???

    outils/ protection /proteger classeur /structure /un mot de passe
    ne peut pas deplacer les onglets & renommees
    user showModal=true

    en complement
    declare une variable public dans un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public i As String
    code evenement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    i = ActiveSheet.Name
    If Target.Address = "$A$1" Then UserForm1.Show
    End Sub
    dans user pour essayer tu met un bouton
    code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    MsgBox i
    End Sub

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  3. écrire le résultat d'une macro dans une cellule d'une feuille à choisir
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2008, 11h56
  4. Insérer une feuille dans une feuille
    Par PsychedeChed dans le forum Excel
    Réponses: 2
    Dernier message: 07/02/2008, 14h01
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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