DateDiff heures en VBA
Résolu
Pryn
-
Pryn29 Messages postés 16 Statut Membre -
Pryn29 Messages postés 16 Statut Membre -
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
-
Bonjour,
En lecture rapide : tu as un Range et un Cells sans parents
-
Oui j'ai modifié ce point mais ça ne change rien.
C'est toujours à zéro.-
dlt2 est un numéro de colonne utilisé comme numéro de ligne dans Range("f" & dlt2) et Range("g" & dlt2) ????
- 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à ^^
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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: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à :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à :
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 -
Je confirme qu'en découpant le process (arrêter + rafraîchir) du coup hfin a du contenu et ça génère un résultat en minutes :
Il faudrait donc que le découpage se fasse sur le premier bouton (si c'est possible)
On peut créer un temps de latence entre les deux fonctions ?