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 :

référence à un controle dans une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Points : 67
    Points
    67
    Par défaut référence à un controle dans une feuille
    Bonjour le forum.

    Une question qui me turlupine, que j'ai posée il y a quelques jours (avec un combo à la place d'un bouton de commande dans l'exemple qui suit masi c'est pareil) et qui fait partie de celles qui ont été perdues. En passant bravo à l'équipe de developpez.com pour le traitement et résolution du problème qu'ils ont rencontré.
    C'est pas que la question soit vitale, mais j'aimerai bien comprendre le pourquoi de la chose:
    Un classeur avec un controle (mettons un bouton appelé Btn1) issu de la barre "controles" (pas de la barre "forms") et incrusté dans une des feuilles (feuil1).
    On veut faire référence à ce bouton de commande depuis un module autre que celui de la feuille, mettons depuis l'évent workbooks_open().

    1er cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Workbook_Open()
     
    ThisWorkbook.Worksheets("feuil1").Btn1.Caption = "KK"
     
    end sub
    Pas de problème, tout marche au poil.

    2eme cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Workbook_Open()
      Dim wsht As Worksheet
     
        Set wsht = ThisWorkbook.Worksheets("feuil1")
     
        wsht.Btn1.Caption = "KK"
     
    end sub
    Erreur de compilation ("btn1" surligné et message dans le genre: ne trouve pas la méthode ou le membre).


    Pour moi, depuis mon petit niveau (je ne suis vraiment pas une bête de la prog) les deux codes devraient être totalement équivalents, mais il semble bien que ce n'est pas le cas.
    Quelqu'un sait-il pourquoi?? Si oui, je lui serais très reconnaissant de m'éclairer de son savoir

    Merci d'avance et à bientôt.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous,

    Bien qu'étant Nouveau, si tu as un code qui fonctionne pourquoi vouloir cappilotracter...

    A+

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Points : 67
    Points
    67
    Par défaut
    Bonjour JCGL38 et le fil,

    Ma question est motivée par un soucis de lisibilité du code. Il est bien clair que dans l'exemple que je donne ça ne change pas grand chose, mais dans un code plus long, il est bien plus lisible d'asigner une variable à une feuille (wsht dans l'exemple) et donc de faire référence aux plages, objets ou autres s'y trouvant en utilisant cette variable plutot que d'écrire à chaque fois la référence complète au classeur, feuille etc...

    Par ailleurs, je cherche à comprendre, tout simplement, ce qui fait que le compilateur n'interprète pas le code de la même façon alors qu'à priori il le devrait. Comprendre comment les choses marchent, ça permet d'avancer par la suite bien plus vite.

    voilà, il est possible que ça ne te paraisse pas être de bonnes raisons, mais moi perso, je pense que cette question en vaut bien d'autres.

    merci quand même pour ton intérêt!
    Bonne nuit à toutes/tous.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonjour

    En fait, quand tu écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("feuil1").Btn1.Caption = "KK"
    tu fais référence au codeName de la feuille de calcul . c'est l'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Btn1.Caption = "KK"



    Lorsque tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim wsht As Worksheet
     
    Set wsht = ThisWorkbook.Worksheets("feuil1")
    wsht.Btn1.Caption = "KK"
    Ta déclaration de variable fait référence à la feuille de calcul (Dim wsht As Worksheet) et cela provoque l'erreur.


    Pour faire fonctionner la procédure dans le deuxième exemple, utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim wsht As Object
     
    Set wsht = ThisWorkbook.Worksheets("feuil1")
    wsht.Btn1.Caption = "KK"



    bonne journée
    michel

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Points : 67
    Points
    67
    Par défaut SilkyRoad
    Bonjour SilkyRoad et le forum.

    Ben je ne peux que te remercier chaleureusement pour ta réponse, claire, précise et très enrichissante.
    Tu viens de m'expliquer le pourquoi de plusieurs erreurs que je ne comprenais jamais dans mes divers essais de code et que je résolvais à base de: "si ça ne marche pas comme ça, alors j'essaye comme ceci" sans bien savoir ce que je faisais. De "la bidouille", j'appelle ça.

    Merci encore pour ton aide.
    Plus généralement merci à tous les gens qui de façon totalement désintéressée prennent sur le temps libre pour répondre aux questions des autres.


    PS: j'espère grâce à vous tous apprendre vite et pouvoir "rembourser" ce temps précieux que vous me faites gagner.

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

Discussions similaires

  1. Cut et controles dans une feuille excel
    Par Uranne-jimmy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/01/2015, 15h30
  2. Faire une boucle de control dans une feuille
    Par srikiki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/03/2011, 11h13
  3. Références d'assembly dans une feuille de propriété
    Par sephirostoy dans le forum C++/CLI
    Réponses: 2
    Dernier message: 10/03/2011, 11h18
  4. utilisation de controle dans une feuille
    Par jazziestan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2009, 11h00
  5. [VB6] [Interface] Nbre de contrôles maxi dans une feuille
    Par Midou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/10/2002, 16h09

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