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

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur Process
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Points : 2
    Points
    2
    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 averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    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
    Points : 412
    Points
    412
    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 éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    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 averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    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
    Points : 412
    Points
    412
    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 averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    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
    Points : 412
    Points
    412
    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 !

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Quentin,
    Je suis convaincu que ça devrait marcher.
    Change n'est qu'une sub et il est possible d'exécuter un userfor d'une sub sinon on ne pouvait plus rien faire.

    J'ai effectivement vérifier le problème , vue que je n'effectue jamais ce genre d'action sur change et je suis tombé sur le cul!

    Sachant qu'il n'est pas possible d'avoir 2 évènements en même temps, je ne pense pas que l'événement soit acquitté a l'intérieur de la classe du contrôle!

    Ça me paraît incompréhensible et logiquement bizarre non! Et je pense que Microsoft n'a pas gérer ce cas de figure???

    Après il est possible que suivant la version d'Excel??????

  10. #10
    Candidat au Club
    Femme Profil pro
    Ingénieur Process
    Inscrit en
    Septembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour rdurupt et Quentin,

    Merci beaucoup pour vos réponses et pour vous être creuser la tête J'ai continué les recherches de mon côté et aussi. Il se trouve que comme le UserForm 2 fonctionne très bien si on le lance tout seul (Change() se déclenche), j'ai voulu essayer de le lancer autrement. J'ai donc mis une condition sur une variable publique dans CommandButton_Click() de la feuille excel, qui entraine le déclenchement du UserForm1 puis du UserForm2 une fois que le code du UserForm1 a été déroulé, et ça fonctionne TextBox2_Change() se déclenche! (cf. fichier joint) Cascade UserForm v2.xlsm

    Je ne comprends néanmoins pas pourquoi la solution de déclencher UserForm2 via le code de UserForm1 ne fonctionne pas... Et ce serait beaucoup plus simple pour mon code, bref...

    Pour répondre à ta question rdurupt, j'ai besoin d'empêcher les saisies clavier dans ma Textbox, tout en comptant le nombre de caractères, pour compter le temps de saisies d'un certains nombre de caractères. Mais cette partie de mon code fonctionne très bien, c'est vraiment le déclenchement des Change() qui cause problème.
    J'avais effectivement essayer d'utiliser KeyPress, mais cette fonction ce déclenche dès la touche pressée, avant que le caractère ne soit placer dans la TextBox, ce qui ne me convient pas. Le plus simple reste selon moi d'utiliser Change(), quand ça fonctionne bien sûr

    Je ne sais pas s'il s'agit d'une question de version ou autre, en tous cas ce problème est un grand mystère pour moi...

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    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...
    Bonjour,

    Il faut différer l'ouverture de UserForm2 pour permettre de terminer le code de UserForm1.

    1) Code dans UserForm1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Suivant1_Click()
    MsgBox ("ok")
    Unload UserForm1
     
     
    Application.OnTime Now + TimeValue("00:00:00"), "'LaunchSuivant ""UserForm2""'"   '///ajout
    '--- "'LaunchSuivant " est la procédure qui est appelée
    '--- "UserForm2""'" est le paramètre String que la procédure appelée a en argument
     
    End Sub
    2) Code dans un module Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub LaunchSuivant(USFcible As String)
    VBA.UserForms.Add(USFcible).Show
    End Sub
    Fichiers attachés Fichiers attachés

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour Beline11,
    comment est intercepté a la douchette?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub LaunchSuivant(USFcible As String)
    Dim Usf As New UserForm2
    Usf.Show
    End Sub

  13. #13
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    cela ne résolvera pas le probleme que la procedure ne se lance pas si la précédente n'est pas terminée sauf si l'on modifie l'état modal.
    Cependant, et pour le problème de départ, c'est-à-dire passer d'une page à l'autre, ne serait-il pas plus judicieux depasser par un controle multipage???

    Cela fonctionnera comme il le souhaite.... sauf que l'on n'aura qu'une seule userform.
    Alleï Bonjour chez vous!

  14. #14
    Invité
    Invité(e)
    Par défaut
    pour moi pas besoin de 2 userform. si l'utilisateur utilise la douchette il ne tape pas au clavier.

    donc comment la douchette renseigne le textbox?

  15. #15
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    comment est intercepté a la douchette?
    si je ne m'abuse, c'est un instrument qui se substitue au clavier tout simplement

    aussi, pour le temps de saisie, ne serait-il pas plus judicieux de simplement mettre le textbox.locked sur true... comme cela pas de possibilité d'entrer de code à la main...
    Alleï Bonjour chez vous!

  16. #16
    Invité
    Invité(e)
    Par défaut
    peut-être mais le driver de la douchette ne pas sans génère d’événement!
    Dernière modification par AlainTech ; 08/09/2015 à 07h38. Motif: Suppression de la citation inutile

  17. #17
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    peut-être mais le driver de la douchette ne pas sans génère d’événement!
    euh.. il doit manquer des mots
    Alleï Bonjour chez vous!

  18. #18
    Invité
    Invité(e)
    Par défaut
    Oui effecticement, mais peut importe!

    la douchette renseigne le textbox en une passe alors que l'utilisateur saisie les caractère l'un après l'autre!

    si tu regarde mon post #2 lamprillon de code permet de faire le distinguo!
    Dernière modification par AlainTech ; 08/09/2015 à 07h39. Motif: Suppression de la citation inutile

  19. #19
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Je suis d'accord, seulement, son problème si je l'ai bien compris c'est qu'il veux juste que l'on n'encode rien manuellement dans la textbox.

    et que donc, je proposais pour résoudre l'ensemble du probleme, de passer par des multipage (car effectivement, je ne vois pas non pus l'utilité de plusieurs formulaires) et ensuite simplement de 'locker' le textbox.
    Alleï Bonjour chez vous!

  20. #20
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    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
    Points : 412
    Points
    412
    Par défaut
    Après, je ne pense pas que la question était de savoir comment gérer la douchette mais plutôt "pourquoi lancer un USF depuis une TextBox_Change arrête les TextBox_Change de l'USF2 ?"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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