HEURES EN NOMBRE DECIMAL

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

4 réponses

  1. g Messages postés 1285 Statut Membre 578
     
    Bonjour,
    Et si tu faisais tout simplement

    B1= A1*24 avec format standard

    Bonne journée.
    0
  2. nunuche
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

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

      eric
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
    3. g Messages postés 1285 Statut Membre 578
       
      Nunuche,

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

      Bon dimanche
      0
    4. g Messages postés 1285 Statut Membre 578
       
      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
    5. nunuche
       
      -
      0
  3. stef
     
    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
    1. nunuche
       
      La réponse se trouve dans mon poste de 12:24, testé... et fonctionnel. Plus simple on meurt.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    3. nunuche
       
      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
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    5. stef.
       
      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
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. nunuche
       
      -
      0