DateDiff heures en VBA
Résolu
Pryn
-
Pryn29 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Pryn29 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaie de calculer un intervalle, entre heure de début d'activité et de fin.
hdebut et hfin sont en hh:mm et je souhaiterai calculer la différence en heure 0,00 ou en minutes 000.
Mais ça m'affiche toujours 0 dans cette case.
colonne f : hdebut
colonne g : hfin
colonne h : calcul intervalle
L'heure de début se fait sur un autre code.
Voilà où j'en suis :
Merci d'avance de vos réponses ! :)
J'essaie de calculer un intervalle, entre heure de début d'activité et de fin.
hdebut et hfin sont en hh:mm et je souhaiterai calculer la différence en heure 0,00 ou en minutes 000.
Mais ça m'affiche toujours 0 dans cette case.
colonne f : hdebut
colonne g : hfin
colonne h : calcul intervalle
L'heure de début se fait sur un autre code.
Voilà où j'en suis :
If Sheets("TrackTime").Range("g2") = "" Then Sheets("TrackTime").Range("g2") = Now() Else Sheets("TrackTime").ListObjects(2).ListRows.Add End If dlt = Sheets("TrackTime").Range("g1048576").End(xlUp).Row dlt2 = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Column hdebut = Sheets("TrackTime").Range("f" & dlt2).Value hfin = Sheets("TrackTime").Range("g" & dlt2).Value Range("g" & dlt).NumberFormat = "hh:mm" Sheets("TrackTime").Range("g" & dlt) = Now() Sheets("TrackTime").Range("h" & dlt) = DateDiff("n", hdebut, hfin) Unload FormFin
Merci d'avance de vos réponses ! :)
Configuration: Windows / Chrome 80.0.3987.149
5 réponses
Oui j'ai modifié ce point mais ça ne change rien.
C'est toujours à zéro.
C'est toujours à zéro.
Je crois que le problème vient de cette partie-là.
Je me sers de dlt pour pouvoir écrire à la suite dans le tableau.
J'ai cherché pour dlt2 une seconde formule me permettant d'aller chercher la dernière cellule remplie de la colonne (formule qui ne fonctionne apparemment pas ^^).
Puisque là du coup il calcule avec les cellules suivantes et du coup forcément ça fait zéro.
Hdebut.....Hfin.......Temps
9:13.........9:15.........0,00
8:06.........9:16.........0,00
Merci beaucoup des réponses, ça fait un moment que je planche dessus, je me sens moins seule là ^^
Je me sers de dlt pour pouvoir écrire à la suite dans le tableau.
J'ai cherché pour dlt2 une seconde formule me permettant d'aller chercher la dernière cellule remplie de la colonne (formule qui ne fonctionne apparemment pas ^^).
Puisque là du coup il calcule avec les cellules suivantes et du coup forcément ça fait zéro.
Hdebut.....Hfin.......Temps
9:13.........9:15.........0,00
8:06.........9:16.........0,00
Merci beaucoup des réponses, ça fait un moment que je planche dessus, je me sens moins seule là ^^
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, si tes dates et heures sont bien enregistrées comme des nombres (et pas du texte), tu peux réaliser cela facilement avec une formule, en multipliant la différence par 24*60.
en vba:
en vba:
Option Explicit Private Sub mins() Dim hdebut As Date, hfin As Date, minutes As Single, dlt2 As Long, dlt As Long hdebut = Sheets("TrackTime").Range("f" & dlt2).Value hfin = Sheets("TrackTime").Range("g" & dlt2).Value minutes = (hfin - hdebut) * 24 * 60 Sheets("TrackTime").Range("h" & dlt) = minutes End Sub
Merci pour ta réponse !
Alors du coup j'ai essayé, j'en suis là :
Mais au lieu de donner zéro comme d'habitude maintenant ça fait ça :
Hdebut....Hfin.......Temps
9:13........9:15........0,00
8:06........9:16........0,00
9:22........9:31........-63252564,00
Comme je disais sur le commentaire au dessus je pense que le problème vient d'où il va chercher les hdebut et hfin, il va chercher sur la première case vide suivante et pas sur la dernière case remplie.
Je n'arrive pas à incrémenter une formule qui va chercher les bonnes informations, c'est pour ça que j'avais essayé de bidouiller la dlt2, qui ne fonctionne pas.
Alors du coup j'ai essayé, j'en suis là :
Dim hdebut, hfin As Date, minutes As Single, dlt2 As Long, dlt As Long Option Explicit Private Sub Bouton_Click() If Sheets("TrackTime").Range("g2") = "" Then Sheets("TrackTime").Range("g2") = Now() Else Sheets("TrackTime").ListObjects(2).ListRows.Add End If dlt = Sheets("TrackTime").Range("g1048576").End(xlUp).Row hdebut = Sheets("TrackTime").Range("f" & dlt).Value hfin = Sheets("TrackTime").Range("g" & dlt).Value minutes = (hfin - hdebut) * 24 * 60 Sheets("TrackTime").Range("g" & dlt) = Now() Sheets("TrackTime").Range("h" & dlt) = minutes
Mais au lieu de donner zéro comme d'habitude maintenant ça fait ça :
Hdebut....Hfin.......Temps
9:13........9:15........0,00
8:06........9:16........0,00
9:22........9:31........-63252564,00
Comme je disais sur le commentaire au dessus je pense que le problème vient d'où il va chercher les hdebut et hfin, il va chercher sur la première case vide suivante et pas sur la dernière case remplie.
Je n'arrive pas à incrémenter une formule qui va chercher les bonnes informations, c'est pour ça que j'avais essayé de bidouiller la dlt2, qui ne fonctionne pas.
Oui je t'y ai répondu :)
Je suis maintenant là :
Et résultat :
Hdebut....Hfin.......Temps
10:18.....10:19.....-63252620,00
Je suis maintenant là :
Dim hdebut, hfin As Date, minutes As Single, dlt2 As Long, dlt As Long Option Explicit Private Sub BtnFin_Click() If Sheets("TrackTime").Range("g2") = "" Then Sheets("TrackTime").Range("g2") = Now() Else Sheets("TrackTime").ListObjects(2).ListRows.Add End If dlt = Sheets("TrackTime").Range("g1048576").End(xlUp).Row dlt2 = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row hdebut = Sheets("TrackTime").Range("f" & dlt2).Value hfin = Sheets("TrackTime").Range("g" & dlt2).Value minutes = (hfin - hdebut) * 24 * 60 Sheets("TrackTime").Range("g" & dlt) = Now() Sheets("TrackTime").Range("h" & dlt) = minutes Unload FormFin End Sub
Et résultat :
Hdebut....Hfin.......Temps
10:18.....10:19.....-63252620,00
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question