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 durée en heures/minutes entre 2 dates/2heures [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut Calcul durée en heures/minutes entre 2 dates/2heures
    Bonjour à Tous,

    Je suis entrain de créer un fichier pour réaliser un suivi production.

    Dans un userform, je rentre une date et heure de début et une date et heure de fin et je souhaiterais que dans un textbox nommé "durée" apparaissent en heures/minutes la durée entre le début et la fin.

    Mais c'est là que cela se gâte !!! Je n'arrive pas à écrire cette formule...

    Voici ce que j'ai écrit pour l'instant mais qui ne marche pas.

    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 TextBox10_AfterUpdate()
      If Len(TextBox10) = 4 Then
     conversionHeure TextBox10
     TextBox10.SetFocus
     End If
     
      Dim H1 As Date
      Dim H2 As Date
      Dim H3 As Date
      Dim H4 As Date
      H1 = CDate(TextBox7.Value)
      H2 = CDate(TextBox8.Value)
      H3 = CDate(TextBox9.Value)
      H4 = CDate(TextBox10.Value)
      TextBox11.Value = Format((H2 - H1) + (H4 - H3), "hh:mm")
     
      End Sub
     
    Private Sub conversionHeure(ctlTextBox As MSForms.TextBox)
     'Convertir les texte des textBox en heure minutes
     Dim heures As Byte, minutes As Byte
     'Heures = les deux chiffres de gauche
     heures = Val(Left(ctlTextBox.Text, 2))
     'minutes= les deux chiffres de droites
     minutes = Val(Right(ctlTextBox.Text, 2))
     'conversion
     ctlTextBox.Text = Format(TimeSerial(heures, minutes, 0), ("hh:mm"))
    End Sub
    Je vous joins aussi mon fichier en cours de construction.

    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Que de complications! Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TextBox10_AfterUpdate()
    Dim debut As Date
    Dim fin As Date
    Dim duree As Date
    debut = UserForm1.TextBox7.Value & " " & UserForm1.TextBox9.Value & ":00"
    fin = UserForm1.TextBox8.Value & " " & UserForm1.TextBox10.Value & ":00"
    duree = fin - debut
    TextBox11 = duree
    End Sub
    pour remplacer cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    '  If Len(TextBox10) = 4 Then
    ' conversionHeure TextBox10
    ' TextBox10.SetFocus
    ' End If
     
     ' Dim H1 As Date
     ' Dim H2 As Date
     ' Dim H3 As Date
     ' Dim H4 As Date
     ' H1 = CDate(TextBox7.Value)
     ' H2 = CDate(TextBox8.Value)
     ' H3 = CDate(TextBox9.Value)
     ' H4 = CDate(TextBox10.Value)
     ' TextBox11.Value = Format((H2 - H1) + (H4 - H3), "hh:mm")

  3. #3
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    un peu de lecture

    Comprendre et gérer les dates sous Excel et en VBA

    cordialement,

    Didier

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Bonjour Keygen08 et Ormonth (ainsi qu'à tout le forum !!!),

    J'ai donc appliqué le code de keygen08 mais par contre cela n'apparait pas dans le bon format : je souhaiterais qu'il apparaisse sous forme hh:mm. Mais quand je lui stipule cette mise en format cela ne marche pas ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox11.Value = Format(duree, "hh:mm")
    Par exemple,
    Date début = 17/04/2013
    Heure début = 03:00
    Date fin = 19/04/2013
    Heure fin = 03:00

    Je souhaiterais que cela affiche 48:00.

    Je ne comprends pas d'où vient le pb, j'ai beau lire le lien de Ormonth mais je ne trouve pas ???

    Merci d'avance pour votre aide

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une autre piste avec le code ci-dessous.
    Le traitement des dates et heures n'est pas évident. Il faut effectuer des conversions successives.
    C'est un exemple de code de conversions. Je n'ai pas traité les cas où l'on rencontre des heures/minutes négatives comme dans :
    Début 02/04/2013 10:00
    Fin 03/04/2013 09:45

    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 TextBox10_AfterUpdate()
      If Len(TextBox10) = 4 Then
     conversionHeure TextBox10
     TextBox10.SetFocus
     End If
     
    '*******************
    If IsDate(TextBox10) Then
      Dim DiffJour As Long
      Dim DiffHeure As Long
      Dim DiffMinute As Long
      Dim MessageJour As String
      '--- Calcul des différences après conversions (résultats en Entier Long)---
      DiffJour = CLng(CDbl(CDate(TextBox8)) - CDbl(CDate(TextBox7)))
      DiffHeure = CLng(Hour(CDate(TextBox10)) - Hour(CDate(TextBox9)))
      DiffMinute = CLng(Minute(CDate(TextBox10)) - Minute(CDate(TextBox9)))
      '--- Message approprié concernant la différence de jours ---
      Select Case DiffJour
        Case 0
          'si 0 jour alors pas de message
        Case 1
          MessageJour = DiffJour & " jour "
        Case Is > 1
          MessageJour = DiffJour & " jours "
      End Select
      TextBox11 = MessageJour & Format(DiffHeure & ":" & DiffMinute, "hh:mm")
    End If
    End Sub

  6. #6
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    TextBox11.Value = Format(duree, "hh:mm")
    S'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox11.Value = Format((duree), "hh:mm")

  7. #7
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Pour une différence de date en (heure, minute), appliqué à ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TextBox10_AfterUpdate()
     
        Dim debut As Date, fin As Date
        Dim dureeMinutes As Long
     
        With UserForm1
            debut = CDate(.TextBox7.Value & " " & .TextBox9.Value & ":00")
            fin = CDate(.TextBox8.Value & " " & .TextBox10.Value & ":00")
        End With
        dureeMinutes = DateDiff("n", debut, fin)
     
        TextBox11.Text = Format(Fix(dureeMinutes / 60), "00") & ":" & Format(dureeMinutes Mod 60, "00")
     
    End Sub
    D'autre part KeyGen, ton code n'est pas effectif si la durée dépasse 24h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestKeyGen()
     
        Dim t1 As Date, t2 As Date
        Dim duree As Date
     
        t1 = "17/04/2013 00:00:00"
        t2 = "18/04/2013 00:00:00"
        duree = t2 - t1
     
        Debug.Print "Déb: " & t1, "Fin: " & t2, "Duree : " & duree, "Duree formatée : " & Format((duree), "hh:mm")
        'Affiche Déb: 17/04/2013   Fin: 18/04/2013   Duree : 31/12/1899    Duree formatée : 00:00
     
    End Sub
    Cordialement.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Bonjour à Tous,

    Tout d'abord merci de m'avoir répondu et dépanné.

    J'ai testé donc les 2 codes de PMO2017 et issoram, les 2 fonctionnent très bien. celui de PMO2017 me donne un résultat par exemple, du type 2 jours et 1h00 et celui de issoram me donne 49h00.

    C'est exactement ce que je cherchais, merci à vous tous (Keygen08, Ormonth, PMO2017 et issoram) de votre aide et du temps que vous m'avez consacré.

    @+

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

Discussions similaires

  1. [XL-2010] VBA calcul en heures ouvrées entre 2 dates
    Par Stefane1969 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/04/2015, 07h10
  2. Nombre d'heures et de minutes entre deux dates
    Par Bes74 dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/03/2014, 19h34
  3. Calcul des minutes entre 2 dates
    Par fabien14 dans le forum Langage
    Réponses: 5
    Dernier message: 14/05/2010, 16h25
  4. nombre de minutes entre deux dates
    Par missmarion dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/02/2006, 18h12
  5. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22

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