Titre du sujet : Re: Double chrono dans un usf par JeanMarie le 10/11/2012 09:38:57
Bonjour Fabrice, Didier, le forum
Mes connaissances en VBA sont plutôt faible, j'espère que je ne vais pas trop dire de bêtises.
Un premier point, tu utilises un bouton qui va avoir plusieurs actions différentes en fonction de l'étape ou tu te trouves, je pense personnellement que cela complique les choses, il vaut mieux avoir plusieurs boutons que l'on affiche ou que l'on masque ou que l'on rend provisoirement actif ou inactif.
J'ai donc créer 2 boutons "Stop", et 2 boutons "Reset" supplémentaires aux mêmes emplacements que les boutons Start.
Ensuite supprimé un module de gestion d'affichage du Timer, pour n'en avoir qu'un seul.
Modifier des déclarations de variables au niveau du module Timer
'Déclaration des variables, variable utilisable pour la globalité du projet
Public Temp1 As Double
Public Temp2 As Double
Public Depart1 As Double
Public Depart2 As Double
Public FinChrono1 As Byte
Public FinChrono2 As Byte
et ensuite modifier la sub de gestion de l'affichage des Timer, et supprimé tous les autres codes
Sub StartTimer()
'La gestion des chronos a été demandée
Do While (FinChrono1) = 0 Or (FinChrono2 = 0)
'tant que FinChrono1 ou que FinChrono2 est à 0
'cette boucle est exécutée
If FinChrono1 = 0 Then
'le chrono1 est lancé, actualisation du Timer1
Temp1 = [now()] - Depart1
UserForm1.Timer1.Caption = WorksheetFunction.Text(Temp1, "mm:ss.00")
End If
If FinChrono2 = 0 Then
'le chrono2 est lancé, actualisation du Timer2
Temp2 = [now()] - Depart2
UserForm1.Timer2.Caption = WorksheetFunction.Text(Temp2, "mm:ss.00")
End If
DoEvents
Loop
End Sub
Cette Sub prend en charge la gestion globale des Timer
C'est dans le code du Userform1 qu'il y a le plus de modifications.
Rajout dans l'initialisation du Userform de l'affichage des boutons
Private Sub UserForm_Initialize()
'Initialisation de l'userform
Lap1.Enabled = False 'pour éviter de lancer le chrono par erreur
Lap2.Enabled = False 'pour éviter de lancer le chrono par erreur
Timer1.Caption = "00:00.00"
Timer2.Caption = "00:00.00"
'Affichage des boutons "Start"
UserForm1.Go1.Visible = True
UserForm1.Go2.Visible = True
'Masque à l'affichage les autres Boutons
UserForm1.Stop1.Visible = False
UserForm1.Stop2.Visible = False
UserForm1.Reset1.Visible = False
UserForm1.Reset2.Visible = False
'Initialisation à 1 des deux variables
FinChrono1 = 1
FinChrono2 = 1
End Sub
Rajout des codes Reset des 2 chronos
Private Sub Reset1_Click()
'Clic sur le Bouton Reset du chrono1
'RAZ des variables du chrono1
Depart1 = 0
UserForm1.Timer1.Caption = "00:00.00"
'Masque le bouton Reset du chrono1 de l'affichage
UserForm1.Reset1.Visible = False
'Affichage du bouton Start du chrono1
UserForm1.Go1.Visible = True
End Sub
Rajout des codes Stop des 2 chronos
Private Sub Stop1_Click()
'Arrêt de la gestion du chrono1
FinChrono1 = 1
'Masque le bouton Stop du chrono1 de l'affichage
UserForm1.Stop1.Visible = False
'Affichage du bouton Reset du chrono1
UserForm1.Reset1.Visible = True
'Supprime la possibilité de cliquer sur le bouton RAZ du chrono1
UserForm1.Lap1.Enabled = False
End Sub
De la modification des boutons Start
Private Sub Go1_Click()
'Sub pour le lancement du chrono1
'la variable Depart1 prend l'heure actuelle
Depart1 = [now()]
'Active la gestion du chrono1
FinChrono1 = 0
'Masque de l'affichage le bouton Start du chrono1
UserForm1.Go1.Visible = False
'Affichage du bouton Stop du chrono1
UserForm1.Stop1.Visible = True
'Active le bouton RAZ du chrono1
UserForm1.Lap1.Enabled = True
UserForm1.Lap1.SetFocus
If FinChrono2 = 1 Then
'Lance la gestion du chrono, si celle-ci ne l'est pas
StartTimer
End If
End Sub
Deux petites choses sur cette sub, La première instruction de cette sub est la mémorisation de l'heure machine dans la variable, pour coller au plus près de l'action du clic de l'utilisateur, les autres actions pouvant être effectuées pas la suite.
On ne relance pas la procédure StartTimer de gestion des Timers si celle-ci l'est déjà.
Modification du code de RAZ du timer, la RAZ est réduite à sa plus simple expression
Private Sub Lap1_Click()
'ici des lignes de codes seront rajoutées pour copier la valeur de la variable Temp1 dans un feuille du classeur
'ici on relance le chrono1
Depart1 = [now()]
End Sub
Modification de la procédure de fermeture du Userform
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Le Ueserform n'est plus actif
'Suppression de la gestion des chronos
'La sub StatTimer s'arrêtera d'elle même
FinChrono1 = 0
FinChrono2 = 0
End Sub
C'est le passage des variables qui arrête la gestion des Timers,
Et pour finir la modification de fermeture du fichier
Private Sub Workbook_BeforeClose(Cancel As Boolean) '
FinChrono1 = 0
FinChrono2 = 0
End Sub
Voilà pour ce qui est des modifications de tes codes.
@+Jean-Marie
|