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

  • Initiateur de la discussion Initiateur de la discussion Lorenzini
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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 ?
 
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)".
 
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. 🙄
 

Pièces jointes

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. 🙄
c'est curieux ce décalage ou temps d'attente alors que le temps est arrivé à 0 ?
 
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 …
 
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 !!
 
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

Dernière édition:
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. 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour