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 :

différence entre 2 heures


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut différence entre 2 heures
    Hello!

    J'ai un tableau qui contiennent, entre autres, 2 colonnes qui contiennent :

    - l'heure de départ (login) - format hh:mm
    - l'heure d'arrivée (logout) - format hh:mm

    Je dois trouver la durée écoulée entre ces deux heures et l'afficher sous forme #.## (par exemple 1.5 qui correspondrait à une durée de 1h30).

    J'ai un peu bricolé avec ce 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
    Private Sub CalculHeure()
    Dim i As Integer
    Dim login() As String
    Dim logout() As String
    Dim hlogin, mlogin, hlogout, mlogout, heurelogin, heurelogout As String
    Dim datelogin, datelogout, dureeheure
     
    Set WScible = Worksheets("Résumé")
     
    For i = 2 To WScible.Range("B65536").End(xlUp).Row
    With WScible
    datelogin = .Range(Cells(i, 2).Address).Value
    heurelogin = .Range(Cells(i, 3).Address).Value
    login = Split(Format(heurelogin, "[h]:mm"), ":")
    datelogout = .Range(Cells(i, 4).Address).Value
    heurelogout = .Range(Cells(i, 5).Address).Value
    logout = Split(Format(heurelogout, "hh:mm"), ":")
     
    'Coupe heure / minutes
    hlogin = login(0)
    mlogin = login(1)
    hlogout = logout(0)
    mlogout = logout(1)
     
    If datelogin = datelogout Then
        If hlogout = 0 Then
            hlogout = 12
        ElseIf hlogin = 0 Then
            hlogin = 12
        End If
        mlogin = mlogin / 60
        mlogout = mlogout / 60
        hlogin = hlogin + mlogin
        hlogout = hlogout + mlogout
        dureeheure = hlogout - hlogin
        dureeheure = Format(dureeheure, "#0.00")
        .Range(Cells(i, 6).Address).Value = dureeheure
     
        'Suppression des login / logout de durée 0
        If dureeheure = 0 Then
            .Range(Cells(i, 6).Address).EntireRow.Delete
        End If
     
    End If
    End With
    Next i
    End Sub
    Ca fonctionne, sauf pour quelques valeurs, ou il me renvoie un nombre négatif (toujours pour un logout de 21:36, 19:12, 16:48).

    J'avais aussi l'erreur pour 12:00, c'est pour ça que j'ai rajouté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        If hlogout = 0 Then
            hlogout = 12
        ElseIf hlogin = 0 Then
            hlogin = 12
        End If
    Est-ce que quelqu'un aurait une idée de mon erreur?

    Merci!

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Pour calculer une différence d'heures entre d1 et d2(type date) en heures décimales, tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    duréeHeure = datediff("n",login,logout)/60
    et donc pas besoin de toutes ses conversions...

    PGZ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    Bonsoir!

    Merci, ça a bien allégé mon code!

    Mais j'ai toujours des réponses incompréhensibles : par exemple il y a un login a 6:15, avec logout à 09:36 et il me donne comme réponse de durée : 878801.05... Sur quelques lignes, il me fait ce genre d'erreurs... Et sur chaque ligne ou le logout est à 12:00 pile!

    Ca peut être dû à quoi?

    Le nouveau 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
    Private Sub CalculHeure()
    Dim i As Integer
    Dim heurelogin, heurelogout As String
    Dim datelogin, datelogout, dureeheure
     
    Set WScible = Worksheets("Résumé")
     
    For i = 2 To WScible.Range("B65536").End(xlUp).Row
    With WScible
    datelogin = .Range(Cells(i, 2).Address).Value
    heurelogin = .Range(Cells(i, 3).Address).Value
    datelogout = .Range(Cells(i, 4).Address).Value
    heurelogout = .Range(Cells(i, 5).Address).Value
     
     
    If datelogin = datelogout Then
     
        dureeheure = DateDiff("n", heurelogin, heurelogout) / 60
        .Range(Cells(i, 6).Address).Value = dureeheure
     
        'Suppression des login / logout de durée 0
        'If dureeheure = 0 Then
            '.Range(Cells(i, 6).Address).EntireRow.Delete
        'End If
    End If
    End With
    Next i
    End Sub

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,

    pourrai tu vérifier le forma de tes heures dans ta feuille excel, est-tu sur que c'est une chaine de caractéres, menu excel format cellule nombre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    C'est une heure au format personalisé hh:mm

  6. #6
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par dawood Voir le message
    C'est une heure au format personalisé hh:mm
    la cellule : ou tu as durée : 878801.05 aussi ?

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

Discussions similaires

  1. [Dates] Différence entre deux heures
    Par covin85 dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2008, 19h47
  2. Différence entre deux heures en minutes ?
    Par moi&dev dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/08/2007, 11h39
  3. problème différence entre deux heures
    Par gwenhael dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2006, 15h16
  4. Réponses: 7
    Dernier message: 05/07/2006, 16h29
  5. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43

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