Double chrono dans un usf
#1
Débutant XLPages

Inscription: 25/10/2011

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2003, 2007, 2010
Posté le : 09-11-2012 12h04

Bonjour le Forum,

Je cherche à avoir 2 chrono sur un même userform.

Mon problème est le suivant, si un seul des chronos est utilisé (peu importe lequel) tout fonctionne très bien. Par contre si j'essaie d'utiliser les 2 chronos en même temps, seul le dernier chrono lancé défile à l'écran.

Le premier chrono continue de "tourner" en tache de fond mais ne défile plus à l'écran, il reprendra "sa course" avec les bonnes valeurs dès lors que j'aurai stoppé le 2ème chrono.

Je vous joins un petit fichier exemple.

Merci d'avance pour vos contributions.

Fabrice

Pièce jointe:
xlsm Classeur1.xlsm   [ Taille: 20.39 Ko - Téléchargements: 548 ]
Hors Ligne
Rapport   Haut 

Re: Double chrono dans un usf
#2
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 10-11-2012 09h38
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 





Pièce jointe:
zip Fabrice.zip   [ Taille: 22.05 Ko - Téléchargements: 625 ]
Edité par JeanMarie le 10/11/2012 20:56:29
Hors Ligne
Rapport   Haut 

Re: Double chrono dans un usf
#3
Débutant XLPages

Inscription: 25/10/2011

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2003, 2007, 2010
Posté le : 10-11-2012 10h50
Bonjour Jean-Marie, Didier, Le Forum,

Merci pour ta contribution Jean-Marie, pour quelqu'un qui ne maitrise pas trop le VBA tu t'en es plutôt bien sortie.

Je me rends compte en lisant tes explications et la logique de ta programmation quand voulant me simplifier la vie, avec notamment la gestion de 2 modules totalement indépendant l'un de l'autre, que je me suis finalement tiré une balle dans le pied tout seul.

Pareil pour la gestion des boutons, à la base je voulais limiter le nombre de bouton pour l'interface utilisateur, mais au final j'avais des conditions dans tout les sens en fonction de l'étape. Alors que ta solution de gérer plusieurs boutons superposés et de simplement les rendre visible ou non est tellement plus simple.

Pour preuve il suffit de comparer le nombre de ligne de code entre ta version et la mienne!

Le fichier corrigé par tes soins répond parfaitement à mes attentes, le sujet est donc pour moi résolu je ferme le topic.

Merci encore.

A+
Fabrice

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes