Quand l'évenement Exit ne se déclenche pas...

GeoTrouvePas

XLDnaute Impliqué
Cher amis, BON - JOUR ! (cf Lucien Jeunesse dans le jeu des 1 000 francs ^^)

J'ai déjà trouvé une solution au problème que je vais vous exposer mais il reste tout de même entier.

J'ai un Userform comportant plusieurs Frames qui comportent eux même plusieurs Textobox. Mon soucis est que, lors de la sortie du dernier Textbox d'un Frame (quand je dis dernier, c'est dans l'ordre de TabIndex), l'évènement Textbox_exit ne se déclenche pas.

J'ai réussi à détourner la chose en utilisant l'évenement Change mais ce bidouillage ne sera pas possible de partout dans la suite de mon projet.

J'ai farfouillé sur le net et constaté que je n'étais pas le seul dans cette situation, mais aucune des solution proposée n'était satisfaisante.

Je vous sollicite donc afin de savoir si il existe une issue à ce problème.

Pour ma culture perso, je serais quand même curieux de savoir l'origine de ce disfonctionnement qui à mon avis ressemble d'ailleurs plus à un bug de l'évenement.

Merci et bonne journée à tous.
 

Pierrot93

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Bonjour GeoTrouvePas

A priori, rien d'anormal, l'événement "exit" se produit immédiatement avant qu'un contrôle perde le focus au profit d'un autre contrôle du même conteneur (ta "frame"), si tu sors de cette "frame" il ne se produira donc pas... Par contre l'événement "exit" de la "frame", lui, s'exécutera... Enfin remarque toute personnelle, basée sur l'aide vba et l'observation du fonctionnement des differents événements...

bonne journée
@+
 

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

C'est ce que j'avais constaté mais j'ai pas trouvé de vraie "définition" de l'évenement Exit et, malgrè une bonne centaine de rappels, le service informatique de ma boite ne m'as toujours pas désinstallé / réinstallé Office qui, à ce jour, plante systématiquement lorsque je pose une question à M. Trombonne. Pas facile de bosser correctement dans ces conditions.

Après moult réflexion, je pense que l'évenement frame_exit peut convenir dans ma situation^. Je vais l'utiliser mais ça me plait vraiment pas, je trouve pas ça "propre". Et puis, rien n'est dit que l'utilisateur va sortir du frame par ce fameux "dernier textbox".
 

Pierrot93

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Re,

ci-dessous extrait de l'aide sur les événement "enter" et "exit" :

Enter, Exit, événements


Enter se produit avant qu'un contrôle ne reçoive réellement le focus d'un contrôle de la même feuille. Exit se produit immédiatement avant qu'un contrôle perde le focus au profit d'un autre contrôle de la même feuille.

Syntaxe

Private Sub object_Enter( )

Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)

La syntaxe des événements Enter et Exit comprend les éléments suivants :

Élément Description
object Nom d'objet valide.
Cancel État de gestion d'événement. False indique que le contrôle doit gérer l'événement (par défaut). True indique que l'application gère l'événement et que le focus doit rester sur le contrôle courant.


Remarques

Les événements Enter et Exit sont similaires aux événements GotFocus et LostFocus en Visual Basic. Contrairement à GotFocus et LostFocus, les événements Enter et Exit ne se déclenchent pas lorsqu'une feuille reçoit ou perd le focus.

Par exemple, supposons que vous sélectionniez la case à cocher qui déclenche l'événement Enter. Si vous sélectionnez un autre contrôle de la même feuille, l'événement Exit est déclenché pour cette case à cocher (parce que le focus se déplace vers un objet différent dans la même feuille), puis l'événement Enter se produit pour le deuxième contrôle de la feuille.

L'événement Enter se déclenchant avant le déplacement du focus vers un contrôle particulier, vous pouvez utiliser la procédure d'événement Enter pour afficher des instructions : par exemple, vous pouvez utiliser une macro ou une procédure d'événement pour afficher une petite feuille ou une boîte de message identifiant le type de données que contient généralement le contrôle.

Note Pour empêcher le contrôle de perdre le focus, affectez la valeur True à l'argument Cancel de l'événement Exit.
 

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Mais comment c'est trop gentil ça !

Merci beaucoup Pierrot !

Je suis quand même scandalisé par ce #@?"#$ d'évenement qui se déclenche pas. Je sais que le contrôle Frame n'avait pas pour fonction, à l'origine, d'être utiliser comme séparateur visuel de contrôles. Le soucis vient peut être de là d'ailleurs.... En tout cas je trouve qu'une fois arrivé à la fin du TabIndex d'une frame, Textbox_exit devrait se déclencher juste avant Frame_exit.

ça m'éneeeerrrrrrrvvvvvvveeeeeeee ! :D:D:D
 

MJ13

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Bonjour GeoTrouvePas,Pierrot

Il est vrai que les USfs sont souvent délicats à programmer surtout si on commence à faire des déclenchements intempestifs sur les évênements.

Mais c'est comme ça. Il faut faire avec.

C'est pour cela, qu'en général, on demande le fichier avec des problèmes sur un Userform.

On peut aussi débogger son programme en regardant où cela cloche ou faires des application.EnableEvents=false ou true qui bloquent les évènements.
 

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Tout à fait Michel !

Je suis habitué à ce que VBA soi capricieux et il faut avouer que dans 95% des cas, celaa vient d'une erreur de ma part. Combien de fois j'ai tourné en rond pendant des heures avant de me rendre compte que je tentais de comparer une chaine de texte et un nombre ou de réaliser que la cellule(1, -180) n'existe pas...:rolleyes:

Mais là je dois quand même dire que le fait qu'un Textbox_Exit ne se déclenche pas pour la simple raison que c'est le dernier contrôle d'une frame et bien ça me laisse perplexe. Dans logique VBA que je me suis faite, je pensais qu'il exécuterai le Textbox_Exit avant de commencer à réfléchir sur sa position dans la frame et d'exécuter éventuellement un Frame_Exit.

Mais là encore, il se peut fortement qu'il y ait un solide raison pour que ça se passe comme ça et que je ne l'ai pas encore perçue.

Pour ce qui est du débogage, j'ai passé ma matinée à tout tester, j'ai viré tous les autres contrôles de mon userform au cas où il y en ai un qui fasse "interférence", j'ai farfouillé sur le net etc... J'avais prévu un fichier exemple pour mon post mais comme d'hab j'ai oublié de le joindre:eek:. Tu remarqueras d'ailleurs à la lecture de mon post que j'avais quand même pas mal analysé la situation. J'ai même usé et abusé des msgbox pour vérifier les endroits par lesquels ma procédure ne passait pas.

Je reste quand même un peu frustré que cet espèce de "bug" m'empêche d'aller plus loin dans le développement de ma gestion d'erreur "date". Mais bon, on va prendre un raccourci et se contenter d'un "If IsDate" ^^.

Bonne après midi à vous !
 

MJ13

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Re Geo

Moi aussi comme sur cette appli que j'avais développé, et bien cela ne fonctionnait pas bien.

J'ai demandé à Hasco (que je salue même si on ne le vois plus ;)), et il m'a gentiment aidé en reprenant mon code et en mofdifiant quelques éléments que je n'avais pas bien fait (un peu comme toi) et maintenant il fonctionne très bien.

A méditer:

"Le partage peut rendre bien des services" :p.

Voici le lien.

https://www.excel-downloads.com/threads/jeu-trouvez-le-mot-2010.133683/
 

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Merci Michel pour ce petit jeu bien sympa et surtout rudement bien programmé !

A un détail près quand même ! Ton petit jeu vient de me fermer grand peur !J'ai bien cru qu'il m'avait fermé Excel sans sauvegarder en me perdant ma dernière demi heure de boulot :eek: ! ça m'apprendra à bosser et jouer en même temps !

"Le partage peut rendre bien des services" .

Je suis tout à fait d'accord. Je ne sais plus quelle personne de quel forum avait cette phrase à laquelle j'adhère volontier dans sa signature :

Le savoir est la seule chose qui grossit quand on la partage

Mais vu que j'avais bien détecter que mon problème était d'ordre général puisque lié au comportement du Textbox_Exit et non pas au cas pratique sur lequel je bosse, je ne voulais pas vous embêter avec un fichier joint.

Mais puisque tu a l'air de réclamer ^^, voilà mon fichier "test". Aller hop on se dépèche pour trouver des tonnes de contrôles empéchant le moindre début d'erreur dans la saisie d'une date au format jj/mm/aaaa (sans que l'utilisateur ait à saisir les "/"). Je ramasse les copies dans 30min !:p:p:p

Je plaisante bien sur.

Bonne après midi à tous !:)
 

Pièces jointes

  • Problème évenment exit.xls
    43.5 KB · Affichages: 104

MJ13

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Re Geo

Enfin c'est pas moi qui réclame le fichier, mais la communauté d'XLD qui s'en nourrit :p.

Je regarde vite fait mais pas sur d'avoir trop le temps aujourdhui.

Super. Tu as raison, avec un fichier vide, tu n'auras aucun bug. c'est peut-être la solution :).
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Oh mais tu chipotes pour rien là ! ^^

Voici le bon fichier avec le code correct dans le UserForm
 

Pièces jointes

  • Problème évenment exit.zip
    21.1 KB · Affichages: 54
  • Problème évenment exit.zip
    21.1 KB · Affichages: 54
  • Problème évenment exit.zip
    21.1 KB · Affichages: 59

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Mais euh ! :confused:

Il est pas vide du tout ! Faut juste aller dans vba pour afficher le Userform.
Mais comme tu m'as l'air bien sympathique, je te remet une autre version avec un gros bouton qui le fera à ta place :p

Bonne journée
 

Pièces jointes

  • Problème évenment exit.zip
    14.6 KB · Affichages: 47
  • Problème évenment exit.zip
    14.6 KB · Affichages: 51
  • Problème évenment exit.zip
    14.6 KB · Affichages: 50

MJ13

XLDnaute Barbatruc
Re : Quand l'évenement Exit ne se déclenche pas...

Bonjour GeoTrouvePas

Ah et bien on y est arrivé (t'as eu peur de voir les Martiens débarqués :p).

Bon comme je débute en VBA, je n'ai pas trop compris tes hiéroglyphes :confused:.

Voici un exemple a adapter pour entrer tes dates assez facilement dans ton USF.
 

Pièces jointes

  • Entre_Date_Rapide_MJ.xls
    37.5 KB · Affichages: 113
  • Entre_Date_Rapide_MJ.xls
    37.5 KB · Affichages: 131
  • Entre_Date_Rapide_MJ.xls
    37.5 KB · Affichages: 136
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Quand l'évenement Exit ne se déclenche pas...

Ah et bien on y est arrivé

Je veux pas être méchant, mais le code était bien là dès le premier fichier joint. Alt + F11 pour le voir :D

Aller PAF ! 1 - 0

Bon comme je débute en VBA, je n'ai pas trop compris tes hiéroglyphes :confused:.

Comment ça des hiéroglyphes ??? Dis tout de suite que je sais pas me servir d'un clavier, j'ai une très belle écriture ! Surtout sous Word ^^

Je plaisante bien sur MJ, loin de moi l'idée de te rentrer dedans. Merci pour ta macro qui m'a l'air bien sympthique. Je ne peux pas trop m'en servir dans le cas présent car certaines dates seront bien antérieures aux années 2000 donc JJ MM AA obligatoire.

Mais je la garde de coté, elle va m'insiprer et je m'en servirai forcément un jour.


Bonne journée et encore merci !
 

Statistiques des forums

Discussions
312 198
Messages
2 086 145
Membres
103 130
dernier inscrit
FRCRUNGR