HEURES EN NOMBRE DECIMAL
Résolu
stef
-
stef. -
stef. -
Bonjour a tous,
J'utilise xl 2007 mais j'ai un soucis pour modifier les heures en nombre décimal dans mon tableau j'ai une formule qui me permet de convertir jusqu'à 767:59:00 mais une fois dépassé ce nombre d'heure le résultat est faux.
=(JOUR(A1)*24+HEURE(A1))&","&ENT(100*(MINUTE(A1)*60+SECONDE(A1))/3600)
exemple :
A1 je tappe 767:40:00
B1 je place ma formule et le résultat me donne 767,66
mon soucis est que je dois mettre des nombres d'heures plus important comme 4085:37:00 et le résultat me donne 437,31 alors qu'il devrait afficher 4085,61
qui peut m'aider dans ce problème ?
merci pour votre réponse et si possible avec un exemple
J'utilise xl 2007 mais j'ai un soucis pour modifier les heures en nombre décimal dans mon tableau j'ai une formule qui me permet de convertir jusqu'à 767:59:00 mais une fois dépassé ce nombre d'heure le résultat est faux.
=(JOUR(A1)*24+HEURE(A1))&","&ENT(100*(MINUTE(A1)*60+SECONDE(A1))/3600)
exemple :
A1 je tappe 767:40:00
B1 je place ma formule et le résultat me donne 767,66
mon soucis est que je dois mettre des nombres d'heures plus important comme 4085:37:00 et le résultat me donne 437,31 alors qu'il devrait afficher 4085,61
qui peut m'aider dans ce problème ?
merci pour votre réponse et si possible avec un exemple
A voir également:
- HEURES EN NOMBRE DECIMAL
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Ascii nombre de caractères - Guide
- Casio fx-92 affichage décimal - Forum calculatrices
- 24 heures chrono torrent magnet ✓ - Forum Cinéma / Télé
4 réponses
g : c'est de l'humour ?
Bon, le problème c'est que les dates/heures sont gérées à partir du 1/1/1900 et que ton nombre d'heures passe un mois.
La seule façon que je vois, c'est une fonction personnalisée. Tu fais ALT-F11, tu cliques droit sur la racine du projet, tu fais ajouter - module, tu balance ceci dedans
Option Explicit
Function HDec(Dt As Date) As Single
Dim Dt2 As Date
Dim Delta As Long
Dim Hrs As Long
Dim Mnt As Long
Delta = DateDiff("n", 0, Dt)
Hrs = Delta \ 60
Mnt = Delta - Hrs * 60
HDec = Hrs + Mnt / 60
End Function
Ensuite dans ta feuille, pour ta cellule de résultat :
=HDec(A1)
Et zou...
Bon, le problème c'est que les dates/heures sont gérées à partir du 1/1/1900 et que ton nombre d'heures passe un mois.
La seule façon que je vois, c'est une fonction personnalisée. Tu fais ALT-F11, tu cliques droit sur la racine du projet, tu fais ajouter - module, tu balance ceci dedans
Option Explicit
Function HDec(Dt As Date) As Single
Dim Dt2 As Date
Dim Delta As Long
Dim Hrs As Long
Dim Mnt As Long
Delta = DateDiff("n", 0, Dt)
Hrs = Delta \ 60
Mnt = Delta - Hrs * 60
HDec = Hrs + Mnt / 60
End Function
Ensuite dans ta feuille, pour ta cellule de résultat :
=HDec(A1)
Et zou...
Merci les zamis pour l'intéret que vous avez apporté a mon problème mais je ne suis pas un super expert en excel donc je veux bien mettre en application vos conseil mais une fois que j'ai fait le alt F11 ou dois je cliquer y a t'il quelqu'un qui puisse me donner un exemple.
d'avance merci pour votre aide et votre temps.
pour info la formule =A1*24 cela fonctionne jusqu'a une certaine limite
exemple
A1 je tappe 10035:56
B1 je mets la formule =A1*24 ==> résultat : #VALEUR! et la cellule est bien au format standard
merci Stef.
d'avance merci pour votre aide et votre temps.
pour info la formule =A1*24 cela fonctionne jusqu'a une certaine limite
exemple
A1 je tappe 10035:56
B1 je mets la formule =A1*24 ==> résultat : #VALEUR! et la cellule est bien au format standard
merci Stef.
La réponse se trouve dans mon poste de 12:24, testé... et fonctionnel. Plus simple on meurt.
C'est bien d'avoir deviné qu'il fallait que ça aille jusqu'à 10035, mais as-tu réellement testé ta fonction sur cette valeur ?
Autre proposition qui prend en compte les saisies numériques ou bien sous forme de chaine si dépassement des limites :
A mettre dans un module, le temps doit être saisi sous la forme h:mm:ss
eric
C'est bien d'avoir deviné qu'il fallait que ça aille jusqu'à 10035, mais as-tu réellement testé ta fonction sur cette valeur ?
Autre proposition qui prend en compte les saisies numériques ou bien sous forme de chaine si dépassement des limites :
Function HDec(t As Range) As Double Dim ch If IsNumeric(t) Then HDec = t * 24 Else ch = Split(t, ":") HDec = ch(0) + ch(1) / 60 + ch(2) / 3600 End If End Function
A mettre dans un module, le temps doit être saisi sous la forme h:mm:ss
eric
Il y en a vraiment qui n'ont que ça à faire, on dirait. Pour le reste, mon code était fonctionnel. J'ai pensé à le prendre en chaine mais cela supposait une conversion des valeurs entrées, et c'est nettement plus lourdingue que mon code en terme de vitesse. Les limites sont celles des dates de windows, et il y a de quoi faire.
merci les gars,
désolé mais au début je ne comprenait pas directement le chemin pour le module, je ne suis pas un expert comme vous.
j'ai testé le module du poste de 12:24 mais le résultat est ==> #VALEUR! pour 10035:56.
puis j'ai testé la formule d'eric 19:52 et la ca fonctionne a merveille.
un trés grand merci pour votre aide et votre temps.
stef.
désolé mais au début je ne comprenait pas directement le chemin pour le module, je ne suis pas un expert comme vous.
j'ai testé le module du poste de 12:24 mais le résultat est ==> #VALEUR! pour 10035:56.
puis j'ai testé la formule d'eric 19:52 et la ca fonctionne a merveille.
un trés grand merci pour votre aide et votre temps.
stef.
Bonjour,
Excel considère tes nombres comme une DateSerial, il est donc impossible de calculer à partir de cela.
Une solution (parmis d'autre)
Mettre A1 en format Texte
Coller cette fonction dans un module public.
et en B1 .. =Test(A1)
A+
Excel considère tes nombres comme une DateSerial, il est donc impossible de calculer à partir de cela.
Une solution (parmis d'autre)
Mettre A1 en format Texte
Coller cette fonction dans un module public.
Function Test(Rg As Range) As Double Dim A As String, TB Application.Volatile A = Rg & ":00" 'au cas ou il n'y a pas de seconde TB = Split(A, ":") Test = TB(0) + TB(1) / 60 + TB(2) / 3600 End Function
et en B1 .. =Test(A1)
A+