HEURES EN NOMBRE DECIMAL

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Et si tu faisais tout simplement

    B1= A1*24 avec format standard

    Bonne journée.
    1. 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...
      1. Contributeur
        Bonjour,

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

        eric
      2. Contributeur
        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.
      3. Nunuche,

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

        Bon dimanche
      4. 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
    2. 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.
      1. La réponse se trouve dans mon poste de 12:24, testé... et fonctionnel. Plus simple on meurt.
      2. Contributeur
        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
      3. 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.
      4. Contributeur
        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
      5. 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.
    3. Contributeur
      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+