Compte à rebours dans Userform

Résolu/Fermé
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 - 23 févr. 2015 à 21:56
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 - 6 mars 2015 à 22:40
Bonjour,
Je suis coincé avec un petit bug.
Je veux que mon fichier, s'il reste inactif pendant 15 minutes un userform s'affiche et inscrit un compte à rebours de 30 secondes avant fermeture avec un bouton 'Annuler' qui permettrait de continuer à travailler sur ce fichier.
Présentement j'ai un début pas si mal mais je n'arrive pas à Cancellé sur
userform, La commande fermeture continue quand même;

'Dans Workbook

Private Sub Workbook_Open()
StartTimer
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ReiniTimer
End Sub


'Dans Module
Dim HeureProgrammer As Double

Public Sub FermetureAuto()
ActiveWorkbook.Close SaveChanges:=True
'sauvegarde et ferme

End Sub

Sub StartTimer()
'Lance le timer une première fois
HeureProgrammer = Now + TimeValue("00:15:00")
Application.OnTime HeureProgrammer, "ExecutionTimer"
End Sub

Public Sub ExecutionTimer()
'Place ici le code à effectuer
UserForm2.Show

End Sub

Public Sub ReiniTimer()
'Arrete le timer
Application.OnTime EarliestTime:=HeureProgrammer, Procedure:="ExecutionTimer", Schedule:=False

'Le relance avec une nouvelle heure
HeureProgrammer = Now + TimeValue("00:15:00")
Application.OnTime HeureProgrammer, "ExecutionTimer"
End Sub

'Dans Userform2

Private Sub UserForm_Activate()
For i = 30 To -1 Step -1
If Application.Wait(Now + TimeValue("00:00:01")) Then
DoEvents
Label4.Caption = i & " Sec"
End If
Next
Unload Me
Call FermetureAuto
End Sub

Sub CommandButton1_Click() 'annuler

Unload Me

End Sub

svp aidez-moi
A voir également:

17 réponses

Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
6 mars 2015 à 22:40
Re,

Si à l'usage tu remarquais un dysfonctionnement du fichier, reviens sur la discussion ou envoie moi un message privé avec tes remarques, ce fichier mérite d'être perfectionné même si ce type de demande est rare.
Cordialement
1
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
Modifié par Mike-31 le 23/02/2015 à 23:21
Bonsoir,

Je connais ce code, mais pourquoi mettre un bouton annuler, il suffit d'avoir une activité sur le fichier comme un simple déplacement de la cellule active et la procédure recommence pour 15 minutes d'attente puis le compte à rebours.
A moins que le bouton annuler sorte de la procédure
Il se fait tard pour moi je regarde demain en fonction de ta réponse
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
24 févr. 2015 à 02:23
Parce que le but avec le Userform c'est d'aviser avant la fermeture, au cas ou la personne ne désire pas quitter le document. Mais dès que le userform (avec le décompte de 30 secondes) est lancé je ne suis plus capable de faire quoique se soit dans le document comme si dès ce moment il est déjà trop tard.
J'ai lu que se serait peut-être "Application.wait" qui serait le problème ?
Merci déjà de ta réponse et au plaisir de lire tes suggestions demain si tu trouve, d'ici là je continue de chercher.
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
24 févr. 2015 à 10:30
Re,

Regarde ce fichier, pour des raison de rapidité de test le décompte d'attente est de 2 minutes avant avertissement et délai avant fermeture est de 60 secondes.
à l'apparition de l'UserForm, il suffit d'avoir une activité sur le fichier comme déplacer la cellule active pour relancer la procédure d'attente.
Dès que j'ai un moment je remplace le Label de l'UserForm par un compte à rebours
https://www.cjoint.com/c/EBykOt7NHzT
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
24 févr. 2015 à 16:28
C'est super ça marche exactement comme je le voulais
Mais j'aime bien comprendre ce que je fais pas juste copier un code,
Je comprend tout sauf le "Beep" qu'est-ce que c'est ?
Il me manque juste le chrono que j'essaie toujours de trouver en attendant.
Déjà un gros merci.
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
24 févr. 2015 à 16:32
Re,
Le Beep c'est un son pour attirer l'attention que tu peux virer si tu ne le souhaite pas

je regarde le compte à rebours
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
Modifié par July74 le 24/02/2015 à 21:58
Si tu trouve un moyen pour le chrono ça m'aiderait, j'ai cherché toute la journée et là je suis écoeurer.
Étant très débutante j'ai un peu de difficulté à appliquer se que je trouve sur les forum à mon application.
D'habitude je me débrouille pas pire mais là rien à faire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
25 févr. 2015 à 17:08
Re,

j'ai écrit plusieurs codes mais le timer compte à rebours que l'on place sur l'userform rentre en conflit avec celui de la fermeture du fichier en cas d'inactivité.
je ne vois pas comment le contourner, dès que j'ai un peu de temps je me penche sur ce problème pertinent qui peux en intéresser plus d'un
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
25 févr. 2015 à 22:24
Contente d'apprendre que c'est pas parce que je suis complètement nulle.
Je ne comprend pas que personne n'ai posté ce genre de complication avant ??
Mais au moins, grâce à ton aide mon fichier est opérationnel quand même,
Le chrono c'est pas si grave, Mais j'aimerais bien quand même trouvé, Juste parce que je suis comme ça, des questions sans réponse ça me fatigue.
Alors Si toi aussi tu veux savoir et que tu le trouve c'est Super,
sinon merci pour ton aide très précieuse jusque là!
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
Modifié par Mike-31 le 25/02/2015 à 23:44
Re,

J'ai écrit un code qui semble tenir la route, je te le livre brut pour tester, je ferai le ménage demain.
la msgbox à l'ouverture du fichier peut être supprimée si tu la juges inutile.
les durées sont réduite pour permettre des tests rapides
https://www.cjoint.com/c/EBzx1D0o2Kw
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
26 févr. 2015 à 02:40
Trop génial !!!
Vraiment je m'incline devant ton grand savoir faire.
J'espère un jour devenir aussi bonne.
Merci en plus pour les explication afin de m'aider à apprendre.
Très très apprécié ! Merci!
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
26 févr. 2015 à 11:20
Re,

j'ai commencé à revoir le code, en début de code dans le module j'ai ajouté des constantes pour adapter au besoin les différentes action du code que tu peux modifier

Const Veille As Variant = "00:05:00"
Const Rebours As Variant = "60"
Const Alert As Variant = "10"

j'ai également ajouté une alerte sonore Beep que je peux faire varier crescendo pour avoir une alerte sonore discrète au début

https://www.cjoint.com/c/EBAlFgFZw8T
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
26 févr. 2015 à 18:06
Re,

voila le fichier avec un code en clair et annoté
https://www.cjoint.com/c/EBAsrinrpOc
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
27 févr. 2015 à 18:53
Re,

Que ce passe t il, tu décroches !

si le sujet est toujours d'actualité après plusieurs essais dans des conditions peu commune, j'ajouterais un bouton sur l'userform, mais bon j'attends ton retour
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
3 mars 2015 à 13:39
Re,

C'est tout !
plus de nouvelle, dommage que cette discussion pertinente ne soit pas prolongée.
Confirme nous qu'en ce qui te concerne tes attentes sont satisfaites afin de mettre le statut de la discussion en résolu et puisse servir de référence
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 18:28
Je suis désolé !
Je n'avait pas quitté seulement j'ai dû m'absenter pendant plusieurs jours,
De retour, je regarde ce que j'ai manqué!
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 18:28
Si toi tu y es encore!
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
6 mars 2015 à 18:45
Re,

merci du retour, comme je te l'ai dit, ta demande est pertinente ce qui m'a motivé et donc ma poussé a tester le fichier dans moultes utilisations
et si l'utilisateur du fichier travaille sur plusieurs fichiers en même temps il lui sera difficile d'arrêter la procédure de fermeture automatique en revenant sur le fichier.
Comme l'Userform s'ouvre toujours en premier plan, j'ai donc ajouter trois boutons sur l'userform
1 bouton pour relancer le délai avant fermeture sans revenir sur le fichier
1 deuxième bouton pour revenir sur le fichier et relancer le délai de fermeture
et 1 pour forcer la fermeture du fichier

https://www.cjoint.com/c/ECgs3naiiDx
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
Modifié par Mike-31 le 6/03/2015 à 18:51
PS: dès fois que tu zappes un post, en début de code j'ai mis des constantes pour moduler les différents réglages sans avoir à toucher au code
Veille pour le temps de mise en attente
Rebours la durée du décompte sur l'userform
Alert la durée finale pour entendre le Beep

Const Veille As Variant = "00:05:00"
Const Rebours As Variant = "60"
Const Alert As Variant = "10"
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 19:28
Tout ce travail!
Merci pour moi et pour les autres dans ma branche de débutant qui veulent apprendre.
Très bien fait avec tes explications c'est super claire.

Peut-être suis-je trop ignorante, trop débutante, j'ai quelque question pour bien comprendre le code,
Allons-y une à la fois si tu veux bien m'aider?

Dans le code suivant;

Sub Minuterie(Sec As Single)
' ------------------- Lance le timer du compte à rebours
Dim Arret As Single
On Error Resume Next
Arret = Timer + Sec
Do While Timer < Arret
DoEvents
Loop
On Error GoTo 0
End Sub


Je ne comprends pas d'où vient Timer & Sec
Sec est une variable, tu l'as déterminé "As Single"
Sec est déterminé comment?
Timer est quoi? pas une macro ou une variable car Il y en a pas ailleurs dans le code.
Est-ce une commande vba ?
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
Modifié par Mike-31 le 6/03/2015 à 19:58
Re,

C'est pour reprendre le cadencé du processeur (de l'horloge interne) ce code m'a permis de l'intégré dans le code juste au dessous "Decompte(Optional i As Integer = 15)"
et d'adapter la vitesse du décompte avec l'affichage sur l'userform.

ce qui m'a permis d'utiliser deux fois le Timer, une fois "StartTimer" pour la programmation du décompte avant fermeture et à l'intérieur de ce décompte ajouter un décompte sur l'userform

dans ce code "Sub Decompte(Optional i As Integer = 15)"

tu trouveras Minuterie 1
si a Minuterie je mets 2 le décompte visuel sur l'userform sera de seconde en seconde mais le changement sera de 2 secondes en 2 secondes et si je mets Minuterie 3 l'affichage visuel sera de seconde en seconde mais le changement sera lent de 3 secondes

Fait un essai à Minuterie 3 et lance la procédure en déplaçant ta souris et laisse faire jusqu'à l'apparition de l'userform et observe
C'est le même code que "StartTimer"
avec Attente = Now + TimeValue(Veille)


A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 20:16
Ok,
Donc le temps de la minuterie n'est pas nécessairement, dans ce cas-ci, 60 Secondes, dépendant si tu met Minuterie 1 oui mais ex Minuterie 2 le décompte 60-59-58... prendra le double du temps réel ?
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
6 mars 2015 à 20:45
Re,

voila oui tout à fait
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 21:11
Bon je viens de testé ton dernier fichier envoyé avec les boutons ajoutés dans Userform, c'est une très bonne observation, je n'avais pas eu l'occasion dans l'utilisation que j'en ai fait jusqu'à maintenant d'être sur un autre fichier en même temps.
c'est bien merci beaucoup!
0
July74 Messages postés 47 Date d'inscription vendredi 4 avril 2014 Statut Membre Dernière intervention 23 décembre 2018 1
6 mars 2015 à 21:27
Merci bcp pour toutes ces lumières!
0