End Sub or not End Sub ?

[Résolu]
Signaler
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour,
Voici la question :
Dans un ormulaire F, j' ai :
Sub cmdOk_Click
  ....
Unload Me
If MsgBox("...Continuer  ",vbyesNo+VbQuestion,"saisie...")=VbYes Then _
  PREPARE_SAISIE
 
End Sub


 ' PREPARE_SAISIE est une  procedure qui initialise mon form pour une
   nouvelle saisie, or dans cette Sub on retrouve également :
       Load F :  F.Show 1


Question : Que se passe t- il avec End Sub ? est- elle executée ou je suis encore dans
cmdOk_Click lors du chargement de F ?


NB: le code fonctionne très bien et il n' y a aucun souci de ce côte-ci.
J' ai souvent procédé ainsi: Tout ce qu' il y' a c' est que je me suis toujours la question sans en faire pour autant un drame.
Aujourd' hui que j' ai un peu de temps libre, j' ai décidé d' en finir avec ça ...
Si vous avez vous aussi un peu de temps libre, et surtout une explication,
j' attend vos réponses.
Merci et bonne journée...

8 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour chaibat,

Je me suis souvent posé la question également, y compris pour plus grave (fermeture de l' application alors qu'une autre commande était déjà "envoyée")....
Je dirais que tout se passe trop vite pour que la deuxième commande n'ait aucune chance...
Je prends personnellement la porécaution, malgré tout (même si "çà marche"), de ne pas décharger avant d'avoir "envoyé".
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
tu es effectivement toujours dans le cmdOk_click, et même plutot dans PREPARE_SAISIE. Pour etre plus precis tu es bloqué sur l'instruction F.Show 1.

Cette instruction affiche la feuille F en modal, c'est à dire toute execution du code autre que celui de cette feuille est suspendu tant que cette feuille ne sera pas fermée.
Donc l'instruction qui suit F.show 1 ne sera executée que lorsque la feuille F sera fermée et donc par conséquent la sortie respective des routines PREPARE_SAISIE et cmdOK_click n'interviendra que lorsque la feuille F sera fermée.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Je pense aussi comme Casy et aussi jmf pour l'ordre des appels.
Tu peux faire le test en mettant un point d'arrêt sur le End Sub

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Peut-être que je comprends mal la question... mais le point d'arrêt sur le End Sub permet de savoir si tu y est arrivé... Si tu réponds Oui à la question, tu te retrouves dans le formulaire, sinon tu devrais te retrouver au point d'arrêt, non ?

Et le Unload Me avant la question devrait logiquement, je pense, se trouver après cette question puisque tu laisses le choix de continuer ou d'arrêter.

MPi
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
D' abord merci à tous pour vos réponses...
@ Mpi
le point d' arrêt ne te permet pas de savoir si la Sub est terminée ou pas puis
que tu tu entamme PREPARE_SAISIE...


@ Casy
Il n' y as pas de suspension de code.
Le traitement continue comme lors du premier chargement et je peux saisir
une seconde fois et les entrées sont prises en compte.
F est bien rechargée en Modal dand PREPARE_SAISIE...
la question est donc est ce qu' il y' a encore une image d' elle même après
unload.


@jmf,
j' ai pas compris le "...décharger avant d'avoir "envoyé".  "
si tu envoies tu ne peux pas exécuter le déchargement puisqu' elle est Modal.


En tout cas merci d' avoir éclairer le sujet.et d' avoir confirmer que le
problème éxiste


 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Pardon casy, j' ai relu et j'ai compris ton raisonnement.au sujet de
suspension(j' ai confondu)
ça confirme ce que je pensais
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
si si  MpI , tu as bien fait de proposer le point d' arrêt...
c' est juste que j' ai suivi le raisonnement de casy selon le quel
LE FORMULAIRE étant affiché en modal, cmdOk_Click est bloqué
à ce niveau.
D' autre part, le formulaire doit être déchargé quelque soit la réponse,
et si tu le places après la condition, et si la réponse est oui,
PREPARE_SAISIE bloquera son exécution.En plus il ne sera pas encore
déchargé que tu relances son affichage,puisqu il y' a Load f dans
PREPARE_SAISIE
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,
étant donné qu' il a été prouvé que End Sub ne s' éxécutera
que  si la réponse au msgbox est non, et de se fait les appels
s' accumulent tant que cette réponse reste oui, j' ai trouvé une
parade pour sortir de ce cycle vicieux :


Sachant que le formulaire F est chargé pour la première
fois à partir d' un autre form  M quand on je clisue sur
une commande "Ajouter..." , j' ai mis ceci:


Dans M
Sub Form_Activate()
  iF Me.Tag="Saisie active" Then
      If MsgBox("...Une autre saisie    ",vbYesNo+VbQuestion,"saisie...")=VbYes Then
          PREPARE_SAISIE
      Else
          Me.Tag=""
     End If
  End If
      'sachant bien qu' au départ Me.Tag=""
End Sub


Sub cmdAdd_Click()
   Me.Tag="Saisie active"
   PREPARE_SAISIE
End Sub


Dans F
Sub cmdOk_Click
  <traitement: enregistrement de la saisie>
    ....
    Unload Me
End Sub


F étant en premier plan sur M, quand F se décharge, M s' active
et le msgbox est affiché...


Bon début de soir à tous