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 :

Cascade UserForm - Textbox_Change () ne se déclenche pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur Process
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Par défaut Cascade UserForm - Textbox_Change () ne se déclenche pas
    Bonjour à tous,

    c'est la première fois que je poste sur ce forum et j'ai un niveau plutôt avancé en codage VBA, cependant je butte vraiment sur un point dans l'utilisation des UserForm. Le résultats que je souhaiterais obtenir doit suivre les étapes suivantes:
    - Ouvrir un UserForm1 dans lequel il y a une TextBox1 et un Bouton suivant1
    - à la modification de la TextBox1, TextBox1_Change () se déclenche, effectue un test et appelle suivant1_click() si le résultat est positif
    - suivant1_click() appelle UserForm2 : UserForm2.show qui contient TextBox2 et un Bouton suivant2
    - à la modification de la TextBox2, TextBox2_Change () se déclenche, effectue un test et appelle suivant2_click() si le résultat est positif

    Mon problème est le suivant : la partie concernant le UserForm1 fonctionne très bien, le UserForm2 est appelé, mais si je modifie la TextBox2 par entrée au clavier, rien ne se passe TextBox2_Change () ne se déclenche pas, impossible de trouver pourquoi...

    Pour clarifier l'utilité de ce fichier, les TextBox_Change () des deux UserForm servent à chronométrer le temps de saisie dans la TextBox entre le 1er caractère et le dernier pour identifier si la saisie a été faite au clavier ou à laide d'une douchette/d'un scanner. Il faut donc vraiment utiliser "Change()" à mon sens.

    J'attache aussi un fichier exemple pour mieux illustrer mon problème.

    Merci d'avance pour votre aide,
    Beline
    Cascade UserForm.xlsm

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    j'ai bien compris, que tu veux faire le distinguo entre un valeur saisie manuellement et une valeur place là par ta douchette.

    je présume que ta douchette ne t’expédie pas le retour de fin de ligne {chr(13)} si non tu testerais le code ASCII!

    j'imagine que tu veux compter le nombre de caractère taper dans un lapes de temps.

    en revanche je ne pige pas l'histoire des 2 UserForm! comment peuvent il chronométrée le temps entre 2 frappe;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_Change()
    Static Nb As Integer
    If Len(TextBox1.Text) > Nb + 1 Then MsgBox "douchette"
    Nb = Len(TextBox1.Text)
    End Sub
    Edit: comment récupères tu les donné"s de la douchette?

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Lol... Je suis un peu perturbé car ça fait pareil chez moi, même si je pars d'un fichier vierge et que je reconstruis le truc... Je n'ai jamais vu ça en fait :/

    Apparemment, peu importe que ta textbox clique sur un bouton, moi dans mon événement Textbox1_Change() j'ai directement glissé UserForm2.Show, ça fait exactement pareil... Le bouton fonctionne mais l'événement _Change de la TextBox du UserForm2 n'est plus déclenché...

    Si quelqu'un a une idée ???

    Si ça peut aider... Pour "débloquer" la situation, j'ai utilisé l'événement KeyPress comme ceci, pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call TextBox2_Change
    End Sub
    Et ça "marche"... C'est vraiment du bricolage et ça ne résout pas le problème, mais ça pourrait servir.

    Je suis vraiment curieux, là...

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les userforms ne sont pas en affichage modale ?

    si c'est le cas : mettre la propriété ShowModal à False sur les deux userforms et ça devrait fonctionner

    ou alors appeler les Formulaires en ajoutant l'argument False

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Si, ils sont en "Modal", mais que l'on hide/unload le premier, cela ne change rien et le TextBox_Change ne fonctionne plus...

    Lorsque l'on passe en Modal = False alors ça marche bien... Mais pourquoi est-ce que dans l'autre cas cet événement ne fonctionnerait plus ?? Surtout que le premier formulaire est même déchargé. Les autres événements fonctionnent pour la TextBox, au passage.

    PS : La TextBox2_Change de l'USF2 ne fonctionne pas si l'ouverture du USF2 est déclenchée par le TextBox1_Change... Si on appuie sur le commandbutton avec également dedans USF2.Show, alors la TextBox2_Change fonctionne.

  6. #6
    Invité
    Invité(e)
    Par défaut
    L'événement change, n'est pas le seule événements déclenché lors de la saisie d'un caractères.

    Kepressed; beforupdate; afterupdate; font leur apparition.

    L'événement change est libéré quand l'application décharge le userform2 , impossible dans ces conditions de gérer l'événement change du texbox2!

    Les évènements bref (surtout s'ils n'engage pas une avalanche d'événements) comme click ne pose pas de problème et sommes toutes il on été prévu pour faire le job!

    En d'autres termes le évènements bref peuvent réagir plus facilement que le évènements en cascades, et san doute que Microsoft leurs a accordé plus d'attention!

    Quelqu'un a fait le test d'appeler bouton1_click dans textebox_change?
    Dernière modification par Invité ; 02/09/2015 à 00h09.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si j'écris un autre poste c'est pour distinguer mes propos! Indépendamment de l'événement change, je n'ai pas compris le raisonnement pour identifier le temps de saisie (clavier ou douchette)

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Oui oui, j'ai essayé avec le CommandButton_Click, sans... Le truc c'est qu'on ne décharge pas l'UserForm2 !

    Le USF1 contient TB1 et CB1 (TextBox et CommandButton)
    Le USF2 contient TB2 et CB2

    CB1_Click : USF2.Show + Unload USF1 + d'autres trucs si on veut
    TB1_Change : MsgBox + CB1_Click ou directement USF2.Show, ça change rien de passer par le CB1 ou non...

    Donc ça charge le USF2 dès que l'on écrit quelque chose dans la TB1 (après avoir affiché le msgbox pour info)

    On n'a plus que le USF2 de visible et de chargé (en fait, peu importe d'ailleurs, j'ai essayé avec/sans et tout, ça change rien) :

    CB2_Click : MsgBox → fonctionne dans tous les cas
    TB2_Change : MsgBox → ne fonctionne pas si on a écrit dans la TB1 (qui a du coup déclenché l'affichage du USF2) mais si on a cliqué manuellement sur CB1 ça marche !

    En rajoutant l'intermédiaire TB2_KeyDown ou KeyPress qui renvoie vers TB2_Change, alors ça simule un TB2_Change fonctionnel, mais c'est vraiment moyen...

    Y'a aucune raison d'après moi pour que ça ne fonctionne pas !

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

Discussions similaires

  1. Evènement qui ne se déclenche pas
    Par max.lille dans le forum Langage
    Réponses: 8
    Dernier message: 09/05/2006, 15h46
  2. [VB.NET] La croix rouge de fermeture ne déclenche pas close
    Par LaChips dans le forum Windows Forms
    Réponses: 10
    Dernier message: 07/04/2006, 16h45
  3. onmouseover qui ne se déclenche pas sous IE...
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/03/2006, 17h26
  4. Un JOB qui ne se déclenche pas
    Par blids dans le forum Oracle
    Réponses: 15
    Dernier message: 09/02/2005, 21h14
  5. [trigger] ... qui ne se déclenche pas
    Par bozo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/01/2004, 11h31

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