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 :

[E-00] définition d'un raccourci inutilisable avec textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut [E-00] définition d'un raccourci inutilisable avec textbox
    bonjour,

    j'ai un petit problème avec mes textbox, je voudrais utiliser un raccourci pour le nom de ma feuille or ce raccourci marche si la methode qui suit est par exemple range mais si je met un controle apres du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim sh As Worksheet
     
    set sh =Sheets("Survey")
     
      sh.TBx_NRW.Value = ""
      sh.TBx_XG.Value = ""
    ca ne marche plus.... donc aucun souci d'orthographe, les textbox existent bien sur cette page

    j'ai l'impression que vba n'aime pas beaucoup ce genre de code ... ou alors j'oublie quelquechose mais quoi?(une étape dans le code par exemple)

    merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    L'accès aux contrôles situés à l'intérieur d'une feuille ne se fait pas de la même façon que pour des contrôles d'un Userform: tu dois utiliser une collection pour les référencer.

    Dans ton cas, ça doit être comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sh.Shapes("TBx_NRW").Value = ""
      sh.Shapes("TBx_XG").Value = ""
    J'espère que ça fonctionne...

    Le référencement "direct" ne fonctionne que dans les modules de feuilles, et seulement pour les contrôles de la feuille concernée.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut
    non il aime toujours pas mais l'erreur a changé maintenant : erreur '438' object doesn't support this property or method

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Ah ben ça moi je peux pas le deviner: vu l'erreur qu'il te sort il y a fort à parier que ce que tu as entre guillemets n'est pas le nom de tes textbox dans la collection Shapes. Ca c'est à toi de scruter le contenu de la collection et de trouver l'attribut Name de tes textbox.

    Vu qu'il ne trouve pas d'élément correspondant, ça te renvoie probablement un objet de type Nothing, et après c'est un peu évident que objet de type Nothing ne supporte pas la propriété Value.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut
    Citation Envoyé par decondelite Voir le message
    Vu qu'il ne trouve pas d'élément correspondant, ça te renvoie probablement un objet de type Nothing, et après c'est un peu évident que objet de type Nothing ne supporte pas la propriété Value.


    Citation Envoyé par decondelite Voir le message
    Ah ben ça moi je peux pas le deviner: vu l'erreur qu'il te sort il y a fort à parier que ce que tu as entre guillemets n'est pas le nom de tes textbox dans la collection Shapes. Ca c'est à toi de scruter le contenu de la collection et de trouver l'attribut Name de tes textbox.
    ....euuuuh.... la honte je sais même pas faire ca

    mais sinon j'ai regardé en faisant un pas a pas et ce TBx_NRW est bien dans la page c'est dingue quand même

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par anyah Voir le message
    mais sinon j'ai regardé en faisant un pas a pas et ce TBx_NRW est bien dans la page c'est dingue quand même
    Ca ça m'étonnerait: le pas à pas ne te permet de savoir qu'une propriété est bien définie que pour les objets issus de classes définies dans un module de classe du projet, pas pour les classes définies en dehors du projet comme celles des bibliothèques Excel.

    Ca je veux bien te croire que tes 2 éléments existent, mais ce qu'il faut que tu comprennes c'est que ce n'est probablement pas comme ça que tu dois les appeler dans Shapes pour y avoir accès.

    Là, même conseil que pour quelqu'un d'autre que je suis en train d'aider en parallèle: utilise un espion sur la collection Shapes, regarde le contenu de tous les éléments Item qui sont dedans, et regarde dans les porpriétés s'il y en a pas où tu lis tes 2 noms. Si tu trouves un item où tu trouve un de ces noms, alors lis la propriété Name: c'est le texte qui est écrit en face que tu dois utiliser dans Shapes().

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Je pense qu'on peut accéder à une textbox directement par si sh est une instance de la feuille.

    Mais tes objets sont-ils des textboxes, ou des labels?

    PGZ

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut
    ce sont des textbox et j'ai essayé par cette technique et ca ne marche pas.

    sh est une instance de la feuille.
    c'est-à-dire ?

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Effectivement ça marche, mais bon je partais du principe que ça ne marche pas.

    En plus, je viens de regarder plus en profondeur: la propriété Value n'existe pas pour un objet Shape. Qui plus est je ne retrouve aucun propriété me renvoyant le texte de la textbox. Donc on oublie avec Shape...

    Petite question qui ne mange pas de pain: est-ce que ça marche quand tu fais comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Survey").TBx_NRW.Value = ""
    Sheets("Survey").TBx_XG.Value = ""

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut
    Citation Envoyé par decondelite Voir le message
    utilise un espion sur la collection Shapes, regarde le contenu de tous les éléments Item qui sont dedans
    j'ai ajouté un espion sur shapes (j'ai essayé avec le module et la procédure en cours et aussi en mettant tout a all) et pendant tout le pas a pas ca m'affiche seulement <expression not defined in context>

    oui ca marche nickel en faisant un copier coller de la definition de sh

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    A mon avis on pointe du doigt une faiblesse du langage VBA Excel...

    Quand tu fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set sh =Sheets("Survey")
    Il doit probablement y avoir une perte de propriétés et d'informations lorsque tu affectes ta référence à sh, vu que tu déclare sh comme étant un Worksheet.

    Je m'explique d'avantage: si tu regardes dans l'explorateur d'objets la classe WorkSheet, tu ne vois aucune propriété TBx_NRW ou TBx_XG, ce qui fait donc que l'objet de destination n'aura pas ces propriétés. En revanche, si tu regardes dans la bibliothèque "VBA Project", tu constate que l'un des objets feuille possède ces propriétés.

    Lorsque tu fais Sheets("Survey"), cela te renvoie ta feuille "complète", c'est à dire la feuille correspondant à l'objet présent dans VBA Project. Mais lorsque tu l'affectes à sh, tu ne gardes plus que les propriétés Worksheet asociées.

    Si tu ne comprends pas, ce n'est pas grave, car je te suggère alors une seule chose: essaie de déclarer sh comme étant du type Object, et dis-moi ce que ça donne.

  12. #12
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Anyah:
    sh est une instance de la feuille.

    c'est-à-dire ?
    je veux dire si sh est une variable représentant l'objet feuille en question.

    oui ca marche nickel en faisant un copier coller de la definition de sh
    SI ne marche pas et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Survey").TBx_NRW.Value = ""
    marche, c'est que tu as un problème de portée de sh.

    Sinon, mais c'est une autre question utiliser peut poser des problèmes si tu as plusieurs classeurs ouverts dans la même application.
    Je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Thisworkbook.sheets("NomFeuille")
    mais ce n'est pas le problème.

    Cordialement,

    PGZ

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut
    Citation Envoyé par decondelite Voir le message
    essaie de déclarer sh comme étant du type Object, et dis-moi ce que ça donne.
    arf malheureusement j'étais déjà dans cette configuration

    Citation Envoyé par pgz Voir le message
    Sinon, mais c'est une autre question utiliser peut poser des problèmes si tu as plusieurs classeurs ouverts dans la même application.
    Je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Thisworkbook.sheets("NomFeuille")
    mais ce n'est pas le problème.
    merci pour l'info

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par pgz Voir le message
    Sinon, mais c'est une autre question utiliser peut poser des problèmes si tu as plusieurs classeurs ouverts dans la même application.
    Je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Thisworkbook.sheets("NomFeuille")
    mais ce n'est pas le problème.
    Il n'y a pas de raison que ça ne marche pas: si Sheets("NomFeuille") est implicitement lié au ActiveWorkbook, et si ça fonctionne sans rien, alors ça ne fonctionnera pas mieux pour sh.

    Je suis bien d'accord sur le fait que les références implicites peut poser problème si on ne maîtrise pas correctement le concept, mais là ne semble pas être le problème.

    Autre solution anyah: repère sur la gauche de l'éditeur VBA, la feuille correspondant à ta feuille. Par exemple si tu as "Feuil1 (Survey)", tu peux déclarer sh comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim sh As Feuil1
    Set sh = Sheets("Survey")
    sh.TBx_NRW.Value = ""
    sh.TBx_XG.Value = ""
    Et là je suis sûr que ça marche j'ai testé.


    PS: je l'avais bien dit que c'était un problème de typage de sh et de perte de données/attributs.

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Par défaut

    ca marche ! allehuiah ... j'y croyais plus là j'avais commencé a faire un code en remplacant sh par sheets(i) avec i ce que je veux pfiouuuuuuuu

    merci beaucoup ca va m'aider pour simplifier

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/06/2007, 09h55
  2. créer un raccourci automatiquement avec le setup
    Par pierrot2908 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 26/04/2007, 15h44
  3. Créer un chemin de raccourci (rallongé) avec des " "
    Par TicTac75 dans le forum VBScript
    Réponses: 2
    Dernier message: 01/03/2007, 17h41
  4. [C# 2.0] Pb de raccourcis clavier avec form non principale
    Par Thunder_nico dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/12/2006, 13h02
  5. Lancer un raccourci.lnk avec Start ou autre
    Par Lorponos dans le forum Windows
    Réponses: 4
    Dernier message: 24/07/2006, 21h20

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