Mon neurone va exploser [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 09-04-2006 à 20:05:34
Je suppose que tu parles de VBA et plus précisément de UserForm dans Excel... (il serait bon de le préciser )
Pour l'événement KeyPress, il faut savoir que si le focus est sur un contrôle situé sur le UserForm, alors c'est ce contrôle qui déclenchera l'événement KeyPress.
Si tu programmes en VB, tu peux mettre la propriété KeyPreview de ta forme à True. Ainsi, les touches pressées sur un contrôle renverront sur l'événement de la forme (et peut-être aussi du contrôle, je sais plus).
Pour l'événement Terminate, je sais pas.
Marsh Posté le 09-04-2006 à 20:10:04
Excuez moi,
Oui je suis en VB.
Merci pour KeyPress cela marche. J'aurai pu le voir plus vite mais j'ai le crâne en bouilli. Et merci pour la rapidité.
Il me reste plus qu'un savant en Terminate.
Marsh Posté le 09-04-2006 à 20:22:33
La seule chose que je peux dire, c'est que l'événement Terminate intervient lorsqu'on décharge la forme :
Unload Form2 |
C'est pas le cas si on se contente de la cacher :
Form2.Hide |
Marsh Posté le 09-04-2006 à 20:25:43
En fait sur un projet vierge l'évenement réagi quand l'utilisateur clique sur la croix en haut à droite de la page pour la fermer.
Si on ne met rien derrière Terminate, quand l'utilisateur va cliquer il ne va rien se passer et le programme reste en mémoire.
Marsh Posté le 09-04-2006 à 21:00:32
J'arrive pas à voir où tu veux en venir.
Le fait de décharger tes formes ne met pas pour autant un terme au programme. Il faut utiliser l'instruction End
Pour la forme principale, sers-toi de l'événement Unload pour gérer son déchargement.
Marsh Posté le 09-04-2006 à 21:10:24
he bien je veux que le programme se ferme quand l'utilisateur clique sur la croix de fermeture.
Et le seul évenement que j'ai vu derrière cette croix est Terminate. Après dans Terminate je m'ai "end".
Mais mon problème c'est Terminate ne marche pas.
Du coup, quand l'utilisateur clique sur la croix , il ne se passe rien.
Es ce que c'est plus claire ?
Marsh Posté le 09-04-2006 à 21:20:14
OK, je vois. En fait, t'as pas saisi quelques trucs :
Un événement se produit lorsqu'il se passe quelque chose sur un contrôle (bouton, forme, textbox...).
Par exemple, quand l'utilisateur clique sur le bouton nommé Command1, c'est l'événement Click qui réagit, donc la routine Private Sub Command1_Click se lance. Quand il passe la souris au-dessus d'une zone de texte nommée Text1, c'est la routine Text1_MouseMove qui va se lancer.
Quand l'utilisateur clique sur la croix qui ferme la forme, c'est l'événement Unload qui se lance. Tu dois placer l'instruction End dans cet événement :
Private Sub Form_Unload(Cancel As Integer) |
N'hésite pas à demander si ça marche toujours pas
Marsh Posté le 09-04-2006 à 22:20:11
Excuse moi , mais ca ne marche toujours .
Et je ne suis pas totalement un débutant en VB.
Mais c'est vraiment bizarre, car sur un projet vierge les évenements Terminate et Unload (comme tu m'as dis) marche très, il y a même QueryUnload qui marche. Mais pas sur mon projet principal.
Marsh Posté le 09-04-2006 à 22:37:35
Il se passe quoi si tu mets l'instruction End sur un bouton ? Ton programme se termine quand même ?
edit : content que tu ne le prennes pas mal pour le coup du débutant
je suis pas un spécialiste non plus, mais bon, sur un forum, on discute de certaines choses, ça fait réfléchir, et les deux parties y gagnent
Marsh Posté le 09-04-2006 à 22:50:55
Avec End ca ne fait rien, car il n'effectue pas l'évenement. Il n'en effectue aucun quand je clique sur la croix, ni Terminate, Unload,...
J'ai même mis des points d'arrêts pour voir si il passait dans ces évenemets en débogage mais rien.
Mais la chose qui est bizarre, c'est que ca marche très bien sur un projet vierge et pas sur mon gros programme.
Marsh Posté le 09-04-2006 à 22:56:08
J'ai déjà remarqué des différences entre l'exécution sous VB et l'exécution avec l'exe créer pour de vrai. On sait jamais...
Marsh Posté le 09-04-2006 à 23:04:45
C'était une hypothèse plausible, mais j'ai compilé mais toujours rien.
Marsh Posté le 10-04-2006 à 08:16:47
Tu as essayé cette instruction ?
Si c'est du Excel : Application.Quit
Si c'est du Access : Docmd.Quit
Marsh Posté le 10-04-2006 à 09:36:47
salut asmfox
Quand tu fermes avec la croix il me semble que c'est la sub userform_queryclose qui s'exécute en tout cas sous excel.
bon courage
Marsh Posté le 10-04-2006 à 18:53:56
Je ne suis pas en VBA, mais bien VB et n'y a pas de queryclose juste queryunload (qui ne marche pas).
La chose bizarre dans mon histoire c'est que ca a marché, une fois je crois puis après plus rien. Je ne sais evidemment pas ce que j'ai changé (je crois pas avoir changé les paramètres des feuilles).
Marsh Posté le 10-04-2006 à 21:43:26
Je ne sais pas comme, mais j'ai secoué ... je sais pas quoi ... et maintenant ca marche.
Je comprends rien mais je suis content c'est principale.
Et si y en a qui veulent des nouvelles de mon neurone est bien il est en train d'ouvrir sa deuxième bouteille de champagne. (Heureusement que c'est pas lui qui paye).
Et encore merci pour tout ceux qui se sont penché sur le problème.
Marsh Posté le 09-04-2006 à 19:57:23
Bonjour,
Voila, après avoir passer de multiple heures à chercher à résoudre mon problème, je viens vous demander de l'aide.
J'ai dans un projet avec des feuilles, dans certaines feuilles les évenements Terminate et Keypress ne marche pas.
J'ai fait des points d'arrêts .... rien.
J'ai comparé avec un projet vierge (avec ces évenements qui marche) les paramètres des feuilles. Mais les paramètres sont identiques.
La chose bizarre, c'est que ces évenements marche sur une de mes feuilles de mon projets mais pas les autres.
Pourquoi?
Quelqu'un qui aurait rencontrer ce même problème, pourait-il m'aider ?
Merci.
Message édité par Asmfox_sweden le 10-04-2006 à 21:40:51