HEURES EN NOMBRE DECIMAL

Résolu/Fermé
stef - 21 nov. 2010 à 11:44
 stef. - 22 nov. 2010 à 20:59
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


4 réponses

g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
21 nov. 2010 à 12:02
Bonjour,
Et si tu faisais tout simplement

B1= A1*24 avec format standard

Bonne journée.
0
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...
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 21/11/2010 à 13:10
Bonjour,

g ne plaisantait pas...
B1= A1*24 avec format standard
et zou..

eric
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 21/11/2010 à 13:23
Bonjour,
Faut alors m'expliquer !
A1 en format standard avec >> 7655:43:00
Résultat en B1 >> 183737:12:00
??
A+
Rectification >> en B1 7655,716667
Edit : C'est JUSTE.
0
g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
21 nov. 2010 à 13:47
Nunuche,

J'aime beaucoup l'humour, mais la c'est sérieux.... et très connu....

Bon dimanche
0
g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
21 nov. 2010 à 13:51
lermite222,

B1= A1*24 avec format standard
C'est bien sur B1 qui est au format standard.... comme d'ailleurs le confirme eriiic

Bon dimanche
0
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.
0
La réponse se trouve dans mon poste de 12:24, testé... et fonctionnel. Plus simple on meurt.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 21/11/2010 à 19:53
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 :
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
0
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 21/11/2010 à 20:18
Donc tu n'as pas testé ta fonction sur une valeur telle que 10035:30:00 sinon tu aurais vu qu'elle retourne #VALEUR!
Si c'est pour avoir Les limites sont celles des dates de windows autant faire t*24 qui est beaucoup plus simple et plus rapide non ?
eric
0
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.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 nov. 2010 à 12:39
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.
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+
-1