Code fermeture Userform

Code fermeture Userform - VB/VBA/VBS - Programmation

Marsh Posté le 04-04-2006 à 13:20:19    

Bonjour à tous,
 
Qui peut me venir en aide ?  Une partie du code de mon programme oblige la saisie, par InputBox, de toute donnée oubliée ou erronée dans une TextBox. La structure de boucle que j'ai mise en place est de type "Do While TextBox1="" or Not IsNumeric(TextBox1) then .....Code=InputBox(etc...)........ Loop. Cela fonctionne parfaitement.
 
Mon problème est que si je veux mettre fin à mon UserForm chargé à l'écran avec UserForm1.Show, en cliquant sur la croix rouge située à l'extrémité supérieure droite de ma boîte de dialogue, mon InputBox apparait quand même pour m'obliger à une saisie pour ma TextBox, ce que je ne veux pas.
 
Question :
 
Dans les structures If..... End If, j'ai donc l'obligation de positionner le code du clic pour décharger mon UserForm (croix rouge supérieure droite) à un niveau supérieur à celui du contrôle de la saisie dans ma TextBox.
 
Mais je bloque sur le code Vba pour Excel 2003 à écrire dans le cas où je veux mettre fin à mon affichage de boîte de dialogue par simple clic sur la croix rouge du UserForm, que l'information qui doit prendre place dans la TextBox1 ait été remplie ou pas.
 
Merci de votre coopération.
 
Alain_mc

Reply

Marsh Posté le 04-04-2006 à 13:20:19   

Reply

Marsh Posté le 04-04-2006 à 14:16:18    

Je ne comprends pas ce que vient faire ton inputbox là au milieu.
Quand une zone texbox est mal remplie on demande à ce qu'elle le soit avant de valider/sauvegarder/passer à l'écran suivant.
On ne détourne pas la saisie dans une inputbox. La saisie doit se faire dans la textbox.
Et si je comprends bien la structure de ton prog, ça t'éviterais d'avoir à gérer une boucle de validation inutile.
 
Il faut que tu sois plus précis sur le déclenchement actuel des événements et des traitements que tu fais. Ta structure IF.. Endif, elle sert à quoi ? Elle est dans quelle partie du code ? Elle se déclenche quand ?

Reply

Marsh Posté le 04-04-2006 à 16:12:33    

**** Pour une meilleure compréhension, je joins la procédure concernée dont les Inputbox fonctionnent très bien en cas de mauvaises saisies.
En clair, quel code dois-je insérer à l'intérieur pour que la boîte de dialogue soit automatiquement déchargée, si je clique sur la croix rouge en haut du Userform, sans tenir compte de la saisie ou non dans les Inputbox.
 
Merci d'avance.
 
Alain_mc
 

Code :
  1. Private Sub TbCorrectionCtsEuros_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  2. Do While TbCorrectionCtsEuros = ""
  3. CtsEuros = InputBox("Tu n'as saisi aucun centime d'euro ! Frappe les centimes !", "SAISIE OBLIGATOIRE :" )
  4. TbCorrectionCtsEuros = CtsEuros
  5. Loop
  6. Do While Not IsNumeric(TbCorrectionCtsEuros)
  7. CtsEuros = InputBox("Ce que tu viens de saisir ne correspond pas à des centimes ! : Recommence la saisie !", "SAISIE OBLIGATOIRE :" )
  8. TbCorrectionCtsEuros = Format(TbCorrectionCtsEuros, "00" )
  9. TbCorrectionCtsEuros = CtsEuros
  10. Loop
  11. 'Les 3 boutons doivent à présent s’afficher sur le formulaire.
  12. BtonMiseAJour.Visible = True 'Le bouton "Exporter ces données...base de données" qui était masqué réapparaît.
  13. 'Nouvelle position du bouton.
  14. BtonMiseAJour.Height = 60
  15. BtonMiseAJour.Left = 360
  16. BtonMiseAJour.Top = 24
  17. BtonMiseAJour.Width = 156
  18. 'Je repositionne les deux autres boutons.
  19. BtonRecommencer.Height = 60
  20. BtonRecommencer.Left = 360
  21. BtonRecommencer.Top = 102
  22. BtonRecommencer.Width = 156
  23. BtonAnnuler.Height = 60
  24. BtonAnnuler.Left = 360
  25. BtonAnnuler.Top = 174
  26. BtonAnnuler.Width = 156
  27. BtonMiseAJour.SetFocus
  28. End Sub


Message édité par alain_mc le 04-04-2006 à 16:18:12
Reply

Marsh Posté le 04-04-2006 à 16:52:29    

Il faut réussir à différencier :
la sortie en cliquant sur la croix (qui évite les contrôles)  
et les autres types de sortie (qui passent dans les contrôles).
 
Tu crées une variable booléenne « flag » qui est à True si tu veux passer dans les contrôles et à False sinon.
Tu places un grand « IF flag Endif » encadrant tes boucles de validation (éventuellement d'autres lignes) et le tour est joué.
Mais je n'en pense pas moins ce que jai écrit avant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed