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 :

Problème de passage de TextBox en argument. [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème de passage de TextBox en argument.
    Bonjour,

    Après avoir cherché une demi-journée sur mon problème, je me résigne à poser un post. La plupart du temps, je trouve ma solution sans devoir en arriver là.

    J'essaie de passer un objet TextBox dans une routine. Au lieu de passer l'objet, VBA me passe la propriété Text de la TextBox.

    Au lancement du code, j'obtiens un merveilleux message : 'Erreur 424' objet requis.

    l'exemple du code que j'ai fait est ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub MiseEnFormeTB(ByRef t As MSFORMS.TextBox)
        t.ForeColor = couleur.rouge
        t.Backcolor = couleur.blanc
     
        ..... la suite du code n'a pas vraiment d'importance car c'est l'ensemble de traitement pour la chaine de caractère s'y trouvant.
     
    End sub 
     
     
    sub test()
        MiseEnForme(usrForm.TB1)       ' TB1 étant ma TextBox
    end Sub
    Si j'omets le type de variable dans la routine (MSFORMS.TextBox) et que je demande par la commande VarType ce que la routine reçoit, j'obtiens 8 qui est une chaine de caractère.

    J'arrive au bout de mes idées et je ne vois pas comment résoudre ce problème. Si quelqu'un peut m'aider, je suis preneur.

    Merci pour votre patience.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    Dans l'exemple, il y a des choses non définie. (couleur, MiseEnForme() ou MiseEnFormeTB()).
    Pour être sûr, est-ce que tu peux tester le code ci-dessous stp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Call MiseEnForme(TB1)
    End Sub
     
    Sub MiseEnForme(t As MSFORMS.TextBox)
        t.ForeColor = ColorConstants.vbRed
        t.BackColor = ColorConstants.vbWhite
    End Sub

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    waouh merci beaucoup.

    Pour les objets non défini
    - couleur était une énumération de couleurs que j'ai défini par une valeur hexadécimale.
    - TB1, le nom d'une de mes TextBox.
    - MiseEnFormeTB le nom de ma routine pour mettre en forme mes TextBox.

    Un simple call a résolu mon problème. C'est une function que je n'avais jamais employé auparavant. Je vais devoir l'approfondir.

    Encore merci.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Re.

    En fait pour la partie Call c'est surtout une particularité historique de VBA. Les appel de routine peuvent se faire sans parenthèse.
    Si on veut mettre les parenthèses, il faut faire précéder le nom de routine par Call. (ce n'est pas vrai pour les fonctions = qui retourne une valeur)

    Sinon on peut très bien écrire MiseEnForme TB1. (sans le Call). Mais venant d'un autre langage ça me choque
    toujours un peu d'appeler des routines ou fonctions sans mettre de parenthèse.

    Quoiqu'il en soit, content pour toi que ce soit résolu .

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

Discussions similaires

  1. problème en passage d'arguments
    Par soumti84 dans le forum Général Java
    Réponses: 9
    Dernier message: 29/03/2009, 17h53
  2. Passage d'un textBox en argument
    Par GruZloR dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2008, 13h44
  3. [Syntaxe] problème de passage de type en argument
    Par coyotte507 dans le forum C++
    Réponses: 2
    Dernier message: 25/05/2007, 15h50
  4. [Configuration] Problème de passage d'argument
    Par bugs58 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 15/12/2006, 11h20
  5. [Registre] Problème de passage d'arguments
    Par nicolas.pied dans le forum C++
    Réponses: 5
    Dernier message: 12/11/2006, 14h11

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