XL 2016 Décompte Fermeture UserForm (dans le caption)

Lorenzini

XLDnaute Occasionnel
Bonjour,

A l'ouverture de mon formulaire (il a bien sa propriété ''ShowModal'' à False), le Caption affiche le décompte comme ceci : "A propos (fermeture dans x secondes)".
J'ai tenté de programmer un bout de code qui me semblait assez simple et pourtant, çà ne fonctionne pas le temps que je l'aurais souhaité (affichage pendant 10 sec. et puis fermeture automatique).
Pouvez-vous m'aider ?
Où ai-je mal codé ? Je suis en train de m'emberlificoter les pinceaux avec les quelques variables que je change une à une et franchement, je commence à clignoter comme un sapin de Noël !! HELP !!
Le fichier est joint pour illustrer l'exemple.
Merci pour toutes vos aides :)
 

Pièces jointes

  • Décompte fermeture UserForm.xlsm
    215 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Bonsoir.
J'ai cliqué sur l'image, l'UserForm s'est affiché, avec un titre montrant un décompte, puis fermé lorsqu'il celui ci est arrivé à 0.
Qu'est-ce qui ne va pas ?

Remarque: je préfère toujours programmer dedans les réactions d'un UserForm, non le piloter de l'extérieur.
 

Lorenzini

XLDnaute Occasionnel
Bonsoir.
J'ai cliqué sur l'image, l'UserForm s'est affiché, avec un titre montrant un décompte, puis fermé lorsqu'il celui ci est arrivé à 0.
Qu'est-ce qui ne va pas ?

Remarque: je préfère toujours programmer dedans les réactions d'un UserForm, non le piloter de l'extérieur.
ce qui ne va pas, c'est que lorsque l'UserForm arrive à : "A propos (fermeture dans 0 secondes)", il reste ENCORE affiché pendant 13 secondes... j'ai chronométré. En principe, j'aurais souhaité qu'il se ferme et non qu'il reste encore affiché pendant 13 secondes avec ce caption !?! Voilà ce que je ne comprends pas : pourquoi ne se ferme-t'il pas arrivé à 0 et reste encore affiché pendant ces 13 secondes ?
 

Lorenzini

XLDnaute Occasionnel
ce qui ne va pas, c'est que lorsque l'UserForm arrive à : "A propos (fermeture dans 0 secondes)", il reste ENCORE affiché pendant 13 secondes... j'ai chronométré. En principe, j'aurais souhaité qu'il se ferme et non qu'il reste encore affiché pendant 13 secondes avec ce caption !?! Voilà ce que je ne comprends pas : pourquoi ne se ferme-t'il pas arrivé à 0 et reste encore affiché pendant ces 13 secondes ?
pendant 13 secondes, le caption est celui-ci : "A propos (fermeture dans 0 seconde)".
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
@Dranreb,
C'est vrai que la gestion de l'userform ainsi est peu orthodoxe.
Mais le souci est "bizarre".
J'ai fini la macro avec :
VB:
Application.ScreenUpdating = True
[E8] = "End Sub atteint"
End Sub
Il se passe plusisurs secondes entre l'affichage du message et la fermeture de l'userform.
Là, je sèche. :rolleyes:
 

Pièces jointes

  • Décompte fermeture UserForm (1).xlsm
    217.4 KB · Affichages: 1

Lorenzini

XLDnaute Occasionnel
Bonsoir,
@Dranreb,
C'est vrai que la gestion de l'userform ainsi est peu orthodoxe.
Mais le souci est "bizarre".
J'ai fini la macro avec :
VB:
Application.ScreenUpdating = True
[E8] = "End Sub atteint"
End Sub
Il se passe plusisurs secondes entre l'affichage du message et la fermeture de l'userform.
Là, je sèche. :rolleyes:
c'est curieux ce décalage ou temps d'attente alors que le temps est arrivé à 0 ?
 

Dranreb

XLDnaute Barbatruc
En l'écrivant comme je l'aurais écrit ça ne se produit pas, mais je ne sais pas trop pourquoi :
VB:
Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   Dim Décompte As Integer, TPréc As Long
   UserForm1.Label1.Caption = Chr(13) & "   Ce fichier a été développé par ..." & _
   Chr(13) & Chr(13) & "   Il aura fallu pour y arriver :" & _
   Chr(13) & Chr(13) & "   environ 1 mois de travail (de mi-avril à fin mai 2023)," & _
   Chr(13) & "   + d'une dizaine de macros et formulaires," & _
   Chr(13) & "   + de 50 formules différentes," & _
   Chr(13) & "   + de 4.000 lignes de codes de programmations en VB." & _
   Chr(13) & Chr(13) & "   Pour toutes questions/suggestions," & _
   Chr(13) & "   merci d'envoyer un mail à :" & _
   Chr(13) & Chr(13) & "   on_verra_plus_tard@pas_demain.be"
   UserForm1.Caption = "À propos": UserForm1.Show
   Décompte = 10: TPréc = Int(Timer)
   Do
      Do: DoEvents: Loop Until Int(Timer) <> TPréc
      TPréc = TPréc + 1
      If Décompte = 0 Then Exit Do
      UserForm1.Caption = "A propos (fermeture dans " & Décompte & " seconde" & IIf(Décompte > 1, "s", "") & ")"
      Décompte = Décompte - 1: Loop
   UserForm1.Hide
   End Sub
Peut être que ça mettait beaucoup de finalisations en attente d'une occasion de s'exécuter, parce que l'UserForm1.Caption était modifié à chaque passage dans une petite boucle, et pas seulement quand il changeait effectivement, je ne sais pas …
 

Lorenzini

XLDnaute Occasionnel
En l'écrivant comme je l'aurais écrit ça ne se produit pas, mais je ne sais pas trop pourquoi :
VB:
Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   Dim Décompte As Integer, TPréc As Long
   UserForm1.Label1.Caption = Chr(13) & "   Ce fichier a été développé par ..." & _
   Chr(13) & Chr(13) & "   Il aura fallu pour y arriver :" & _
   Chr(13) & Chr(13) & "   environ 1 mois de travail (de mi-avril à fin mai 2023)," & _
   Chr(13) & "   + d'une dizaine de macros et formulaires," & _
   Chr(13) & "   + de 50 formules différentes," & _
   Chr(13) & "   + de 4.000 lignes de codes de programmations en VB." & _
   Chr(13) & Chr(13) & "   Pour toutes questions/suggestions," & _
   Chr(13) & "   merci d'envoyer un mail à :" & _
   Chr(13) & Chr(13) & "   on_verra_plus_tard@pas_demain.be"
   UserForm1.Caption = "À propos": UserForm1.Show
   Décompte = 10: TPréc = Int(Timer)
   Do
      Do: DoEvents: Loop Until Int(Timer) <> TPréc
      TPréc = TPréc + 1
      If Décompte = 0 Then Exit Do
      UserForm1.Caption = "A propos (fermeture dans " & Décompte & " seconde" & IIf(Décompte > 1, "s", "") & ")"
      Décompte = Décompte - 1: Loop
   UserForm1.Hide
   End Sub
Peut être que ça mettait beaucoup de finalisations en attente d'une occasion de s'exécuter, parce que l'UserForm1.Caption était modifié à chaque passage dans une petite boucle, et pas seulement quand il changeait effectivement, je ne sais pas …
et une fois de plus, vous êtes mon sauveur Dranreb !
Je viens de tester le code que vous venez de m'envoyer et il fonctionne à merveille ! 👌😁
J'étais en train de me demander : "pourquoi chez Dranreb, çà fonctionne et pas chez moi ni Sylvanu ?" C'est quoi le truc ? Un rapport avec la vitesse du processeur ? franchement, j'étais perdu !
Mais du coup, ce code-çi est nickel et fonctionne !
MERCI !!
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Une piste en cherchant autour du type d'évènement utilisé.

Si on utilise l'évènement MouseUp alors tout clique sur la feuille de calcul (yc sur le ruban) ou sur le USF relance le décompte pour 10 s. La fermeture de l'USF par la croix est donc impossible.

Si on utilise l'évènement MouseDown alors aucun clique sur la feuille de calcul ni sur le USF ne relance le décompte. La fermeture de l'USF par la croix est possible.

Pour tester, cliquer sur l'image de chacune des deux feuilles.

Le code est identique pour chaque évènement (MouseDown ou MouseUp) :
VB:
Dim PauseTime, Start
   UserForm1.Label1.Caption = Chr(13) & "   Ce fichier a été développé par ..." & _
                                      Chr(13) & Chr(13) & "   Il aura fallu pour y arriver :" & _
                                      Chr(13) & Chr(13) & "   environ 1 mois de travail (de mi-avril à fin mai 2023)," & _
                                      Chr(13) & "   + d'une dizaine de macros et formulaires," & _
                                      Chr(13) & "   + de 50 formules différentes," & _
                                      Chr(13) & "   + de 4.000 lignes de codes de programmations en VB." & _
                                      Chr(13) & Chr(13) & "   Pour toutes questions/suggestions," & _
                                      Chr(13) & "   merci d'envoyer un mail à :" & _
                                      Chr(13) & Chr(13) & "   on_verra_plus_tard@pas_demain.be"
   UserForm1.Show
   PauseTime = 10: Start = Timer
   Do While Timer < (Start + PauseTime)
      DoEvents
      UserForm1.Caption = "A propos (MouseDown) - fermeture dans " & Int((PauseTime - (Timer - Start))) & " s"
   Loop
   Unload UserForm1
 

Pièces jointes

  • Lorenzini- Décompte fermeture USF.xlsm
    326 KB · Affichages: 1
Dernière édition:

Lorenzini

XLDnaute Occasionnel
Bonsoir,

Une piste en cherchant autour du type d'évènement utilisé.

Si on utilise l'évènement MouseUp alors tout clique sur la feuille de calcul (yc sur le ruban) ou sur le USF relance le décompte pour 10 s. La fermeture de l'USF par la croix est donc impossible.

Si on utilise l'évènement MouseDown alors aucun clique sur la feuille de calcul ni sur le USF ne relance le décompte. La fermeture de l'USF par la croix est possible.

Pour tester, cliquer sur l'image de chacune des deux feuilles.

Le code est identique pour chaque évènement (MouseDown ou MouseUp) :
VB:
Dim PauseTime, Start
   UserForm1.Label1.Caption = Chr(13) & "   Ce fichier a été développé par ..." & _
                                      Chr(13) & Chr(13) & "   Il aura fallu pour y arriver :" & _
                                      Chr(13) & Chr(13) & "   environ 1 mois de travail (de mi-avril à fin mai 2023)," & _
                                      Chr(13) & "   + d'une dizaine de macros et formulaires," & _
                                      Chr(13) & "   + de 50 formules différentes," & _
                                      Chr(13) & "   + de 4.000 lignes de codes de programmations en VB." & _
                                      Chr(13) & Chr(13) & "   Pour toutes questions/suggestions," & _
                                      Chr(13) & "   merci d'envoyer un mail à :" & _
                                      Chr(13) & Chr(13) & "   on_verra_plus_tard@pas_demain.be"
   UserForm1.Show
   PauseTime = 10: Start = Timer
   Do While Timer < (Start + PauseTime)
      DoEvents
      UserForm1.Caption = "A propos (MouseDown) - fermeture dans " & Int((PauseTime - (Timer - Start))) & " s"
   Loop
   Unload UserForm1
Bonjour mapomme,

Et bien merci pour cette nuance subtile que j'ignorais 🤔.
Je prends bonne note et vous remercie pour votre contribution. :)