IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Finaliser bouton Restart pour chronomètre [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut Finaliser bouton Restart pour chronomètre
    Bonjour,

    J'ai repris un code pour faire un chronomètre, tous marche bien. J'ai voulu rajouter le bouton STOP et Restart mais je n'arrive pas à finaliser le bouton Restart

    Voici le code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Private fin_chrono As Long
    Private DeltaT As String
    '========= Depart du Chrono
     
    Private Sub BTN_Depart_Click()
    Dim DEPART As Double
    Dim temps As Double
    BTN_Depart.Enabled = False
     
    fin_chrono = 0
    DEPART = [now()]
    Do While fin_chrono = 0
        temps = [now()] - DEPART
            If CheckBox1 = False Then
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss.00")
            Else
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss")
        End If
    DoEvents
    Loop
     
    End Sub
     
    Private Sub BTN_Reset_Click() 'Remet le chrono à zéro
     
    If fin_chrono = 0 Then
        fin_chrono = 1
     
            If CheckBox1 = False Then
                Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss.00")
            Else
                Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss")
            End If
     
        ElseIf fin_chrono = 1 Then
            Chrono.Caption = "00:00:00"   'hh:mm:ss
            BTN_Depart.Enabled = True
        End If
    End Sub
     
    Private Sub BTN_Stop_Click()
    fin_chrono = 1
    DeltaT = [now()] - DEPART
    End Sub
     
    Private Sub BTN_Restart_Click()
    Dim DEPART As Double
    Dim temps As Double
    BTN_Depart.Enabled = False
     
    fin_chrono = 0
     
    DEPART = [now()] + TimeValue(DeltaT)
    Do While fin_chrono = 0
        temps = [now()] - DEPART
            If CheckBox1 = False Then
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss.00")
            Else
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss")
        End If
    DoEvents
    Loop
    End Sub

    Erreur 13 : incompatibilité de type.

    Je ne sais pas comment récupérer l'écart ici sous la variable DeltaT pour tenir compte du décalage

    Merci d'avance

    Cordialement

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    je pense que ton probleme est que DeltaT est déclarée comme un string au lieu d'un Double en 2 eme ligne.

    L'idée de Restart est de redémarrer le chrono là où il s'est arreté.

    Donc je reprendrais la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub BTN_Depart_Click()
    en ajoutant le DeltaT

    Du coup il n'y aurait meme plus de fonction Restart puisque c'est la fonction départ qui aurait une variable en plus sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temps = [now()] - DEPART +DeltaT
    Et tu pourrais renommer le bouton plutot que sd'en avoir un autre.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    Merci pour ta réponse rapide

    J'ai donc effectué tes modifications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private DeltaT As Double
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temps = [now()] - DEPART +DeltaT
    mais quand je fais ca, j'ai l'heure actuelle qui apparait ??? et plus 00:00:15

    Je suis perplexe

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Ben Oui!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub BTN_Stop_Click()
    fin_chrono = 1
    DeltaT = [now()] - DEPART
    End Sub
    Mais que vaut DEPART?

    Je te suggere de sortir les déclarations de cette variable pour qu'elle soit commune à toutes les fonctions et que la variable soit stockée d'une fonction à l'autre

    Edit:
    Ensuite tu remarques que le fonctionnement est aléatoire à cause de la variable deltaT qui se charge mal.
    Donc il faut déclarer la variable temps avec les autres puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub BTN_Stop_Click()
    BTN_Depart.Enabled = True
    fin_chrono = 1
    DeltaT = temps
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    C'est vrai que ca parait logique

    Au départ la variable DEPART vaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub BTN_Depart_Click()
    Dim DEPART As Double
    Dim temps As Double
    BTN_Depart.Enabled = False
     
    fin_chrono = 0
    DEPART = [now()]
    
    ....
    J'ai donc sortie toutes mes variables comme tu me l'as conseillé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private fin_chrono As Long
    Private DEPART, DeltaT, temps As Double
    Mais c'est justement cet écart que je voudrais stocké dans la variable DeltaT
    mais je ne sais pas comment faire

    Merci pour tes lumières

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    Bon cette fois ça marche, j'ai supprimé le bouton Restart en adaptant un peu et voila le code complet pour ceux qui serait intéressé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private fin_chrono As Long
    Private DEPART, DeltaT, temps As Double
     
    '========= Depart du Chrono
     
    Private Sub BTN_Depart_Click()
     
    BTN_Depart.Enabled = False
    BTN_Depart.Caption = "Restart"
     
    fin_chrono = 0
    DEPART = [now()]
    Do While fin_chrono = 0
        temps = [now()] - DEPART + DeltaT
            If CheckBox1 = False Then
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss.00")
            Else
            Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss")
        End If
    DoEvents
    Loop
     
    End Sub
     
    Private Sub BTN_Stop_Click()
        fin_chrono = 1
        BTN_Depart.Enabled = True
        DeltaT = temps
    End Sub
     
    Private Sub BTN_Reset_Click() 'Remet le chrono à zéro
     
    If fin_chrono = 0 Then
        fin_chrono = 1
     
            If CheckBox1 = False Then
                Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss.00")
            Else
                Chrono.Caption = WorksheetFunction.Text(temps, "hh:mm:ss")
            End If
     
        ElseIf fin_chrono = 1 Then
            Chrono.Caption = "00:00:00"   'hh:mm:ss
            BTN_Depart.Enabled = True
            BTN_Depart.Caption = "Départ"
            DeltaT = Empty
        End If
    End Sub
    Encore merci à toi COCONUT2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur pour des checkbox et des boutons radio pour MySQL
    Par mounirha dans le forum Administration
    Réponses: 1
    Dernier message: 18/04/2006, 23h54
  2. bouton image pour afficher du texte
    Par froggies dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 12h09
  3. [C++ Builder 6] Timer de précision pour chronomètre
    Par doudoustephane dans le forum C++Builder
    Réponses: 9
    Dernier message: 27/09/2005, 10h45
  4. Problème de boutons radio pour récuperer les infos
    Par marsupilami34 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2005, 11h47
  5. Réponses: 4
    Dernier message: 20/04/2005, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo