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 ?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.
pendant 13 secondes, le caption est celui-ci : "A propos (fermeture dans 0 seconde)".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 ?
Application.ScreenUpdating = True
[E8] = "End Sub atteint"
End Sub
c'est curieux ce décalage ou temps d'attente alors que le temps est arrivé à 0 ?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 :
Il se passe plusisurs secondes entre l'affichage du message et la fermeture de l'userform.VB:Application.ScreenUpdating = True [E8] = "End Sub atteint" End Sub
Là, je sèche.
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
et une fois de plus, vous êtes mon sauveur Dranreb !En l'écrivant comme je l'aurais écrit ça ne se produit pas, mais je ne sais pas trop pourquoi :
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 …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
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,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