DateDiff heures en VBA
Résolu/Fermé
Pryn
-
Modifié le 3 avril 2020 à 18:36
Pryn29 Messages postés 16 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 avril 2020 - 4 avril 2020 à 16:52
Pryn29 Messages postés 16 Date d'inscription mardi 2 janvier 2018 Statut Membre Dernière intervention 4 avril 2020 - 4 avril 2020 à 16:52
5 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
3 avril 2020 à 19:08
3 avril 2020 à 19:08
Bonjour,
En lecture rapide : tu as un Range et un Cells sans parents
En lecture rapide : tu as un Range et un Cells sans parents
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
3 avril 2020 à 19:17
3 avril 2020 à 19:17
Oui j'ai modifié ce point mais ça ne change rien.
C'est toujours à zéro.
C'est toujours à zéro.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
4 avril 2020 à 00:39
4 avril 2020 à 00:39
dlt2 est un numéro de colonne utilisé comme numéro de ligne dans Range("f" & dlt2) et Range("g" & dlt2) ????
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
>
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
Modifié le 4 avril 2020 à 09:34
Modifié le 4 avril 2020 à 09:34
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
23312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 novembre 2024
Ambassadeur
1 552
4 avril 2020 à 09:09
4 avril 2020 à 09:09
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
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
4 avril 2020 à 09:44
4 avril 2020 à 09:44
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.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
Modifié le 4 avril 2020 à 10:18
Modifié le 4 avril 2020 à 10:18
As-tu vu ma réponse au sujet de dlt2 ?
Ne serait-ce pas plutôt :
Ne serait-ce pas plutôt :
dlt2 = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
>
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
4 avril 2020 à 10:20
4 avril 2020 à 10:20
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
yg_be
Messages postés
23312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 novembre 2024
1 552
>
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
4 avril 2020 à 10:58
4 avril 2020 à 10:58
comment obtiens-tu les valeurs que tu nous montres pour hdebut, hfin et minutes?
peut-être
peut-être
msgbox cstr(hdebut)+" | "+cstr(hfin)+" | "+cstr(minutes)+" | "+cstr(dlt)+" | "+cstr(dlt2)
yg_be
Messages postés
23312
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 novembre 2024
1 552
>
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
4 avril 2020 à 10:59
4 avril 2020 à 10:59
le code que tu montres ne peut pas fonctionner, tu devrais avoir un message d'erreur.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
>
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
4 avril 2020 à 11:14
4 avril 2020 à 11:14
Mauvaises déclarations aussi, mettre :
Dim hdebut As Date, hfin As Date, minutes As Double, dlt2 As Long, dlt As Long
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pryn29
Messages postés
16
Date d'inscription
mardi 2 janvier 2018
Statut
Membre
Dernière intervention
4 avril 2020
4 avril 2020 à 12:01
4 avril 2020 à 12:01
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 ?
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 ?