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 :

Calcul ecart de temps [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut Calcul ecart de temps
    Bonjour,

    Je suis en train de mettre en place un fichier excel qui va me permettre de calculer l'écart entre deux heures.
    En fait, dans mon fichier excel j'ai des données qui sont mises à jour, quand une certaine donnée passe à 1 je dois déclencher mon compteur de temps. Puis si elle passe à 0 je dois le stopper. Si elle repasse à 1, je dois le redémarrer.
    Ainsi de suite jusqu'à ce que l'utilisateur clique sur un bouton RAZ qui remette tout à 0.
    J'ai trouver des fonctions comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("s", date1, date2)
    mais ça ne me convient pas parce que je veux avoir un écart en seconde mais également en minute voir en heure.
    Pourriez-vous m'aider ?
    Merci par avance.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Analyse ce petit test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim T1 As Date, T2 As Date
    Dim S As Long
     
    T1 = TimeValue("01:13:45")
    T2 = TimeValue("06:51:21")
    S = DateDiff("s", T1, T2)
    MsgBox S & "   :   " & TimeSerial(0, 0, S)
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut
    Merci bien pour ce bout de code !

    Quand je le test il marche très bien par contre quand je le modifie avec ce que je veux faire j'ai un petit problème de dépassement de capacité ...

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
     
    Dim tempDepart As Date
    Dim tempsArret As Date
    Dim tempsExecution As Date
     
     
    Dim T1 As Date, T2 As Date
    Dim S As Long
     
    If Feuil1.Range("A1").Value = 1 Then
    tempsDepart = Time
     
    End If
     
    If Feuil1.Range("A1").Value = 0 Then
     
    tempsArret = Time
    S = DateDiff("s", tempsDepart, tempsArret)
    MsgBox S & "   :   " & TimeSerial(0, 0, S)
    End If
     
    End Sub
    La fonction Time renvoie la même chaine que tu passes à TimeValue nan ?

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En effet, les paramètres de TimeSerial(h,m,s) sont des Integer

    Il faudra faire le calcul basique
    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
    Option Explicit
    Dim TempsDepart As Date, TempsArret As Date, TempsExecution As Date
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    Dim S As Long, H As Long, M As Long
     
    If Range("A1").Value = 1 Then TempsDepart = Time
    If Range("A1").Value = 0 Then
        TempsArret = Time
        S = DateDiff("s", TempsDepart, TempsArret)
        H = Int(S / 3600)
        M = Int((S - 3600 * H) / 60)
        S = S - 3600 * H - 60 * M
        MsgBox TimeSerial(H, M, S)
    End If
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Par défaut
    Je ne comprends pas ce que fait la fonction TimeSerial ...
    En tout cas la ligne suivante m'affiche l'heure courante du système et pas l'écart de temps entre mes deux changements de valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox TimeSerial(H, M, S)
    J'ai essayé en laissant quelques secondes et plusieurs minutes et le résultat est le même.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Parce que ton heure de départ est nulle, c'est pourquoi le Msgbox indique l'heure actuelle

    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox H &":" & M & ":" & S
    Essaies ce code pour voir
    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
    Dim TempsDepart As Date, TempsArret As Date, TempsExecution As Date
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    Dim S As Long, H As Long, M As Long
     
    If Range("A1").Value = 1 Then TempsDepart = Time
    MsgBox "temps départ: " & TempsDepart
    If Range("A1").Value = 0 Then
        TempsArret = Time
        MsgBox "temps arrêt: " & TempsArret
        S = DateDiff("s", TempsDepart, TempsArret)
        H = Int(S / 3600)
        M = Int((S - 3600 * H) / 60)
        S = S - 3600 * H - 60 * M
        MsgBox H & ":" & M & ":" & S
    End If
    End Sub

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

Discussions similaires

  1. [AC-2003] calcul ecart de temps
    Par blandinais dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 08h35
  2. Calcul d'un temps pour un réglage.
    Par AgriPhilou dans le forum Excel
    Réponses: 2
    Dernier message: 05/05/2008, 20h50
  3. Calcul sur des temps de fonctionnement
    Par micbett dans le forum Modélisation
    Réponses: 10
    Dernier message: 28/02/2008, 16h44
  4. [MySQL] Ecart de temps décomposé en différentes unités (années, mois, jours, etc)
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/03/2006, 09h38
  5. [TP]Calculer delai de temps
    Par Alkangelis dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 03/11/2004, 13h05

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