Opération avec les heures

pascal82

XLDnaute Occasionnel
Bonjour à tous,

Voila ce que je ne comprends pas.
La multiplication d'un écart de temps avec une constante donne un mauvais résultat avec Excel
Exemple:
T0 = 12:00:00 heure, T1 = 13:00:00 heure, Constante = 1000
Opération simple: Constante * (T1-T0) doit donner 1000 et pourtant Excel me donne 41.67 Bigre !!!
Existe t-il une solution ou une astuce pour remédier a ce problème, je suppose qu'il doit s'agir de la définition d'un format mais après multiples essais je ne trouve pas.

Merci par avance
 

Pièces jointes

  • Calcul avec les heures.xls
    20.5 KB · Affichages: 99

pascal82

XLDnaute Occasionnel
Re : Opération avec les heures

Bonsoir Victor,

Merci pour la réponse rapide, cependant concernant l'aspect affichage et conversion d'Excel j'avais une explication sur un post brillant de ROGER2327. Par contre cela ne résout pas mon problème qui est d'obtenir le bon résultat.

Cordialement

Je joins les explications de ROGER2327

1. Il est vrai qu'il est quelquefois difficile de s'y retrouver...
Ce qu'on voit dans une cellule de feuille de calcul est pratiquement toujours différent de son contenu réel. On parle d'ailleurs couramment de format d'affichage, ce qui revient implicitement à dire qu'on donne une forme visible (et si possible compréhensible) à un contenu sous-jacent.

Pour ce qui est des nombres, on sait qu'un processeur calcule exclusivement dans le système de numération binaire (ou de base 2), alors que les opérateurs humains ont généralement accoutumé de concevoir leurs calculs avec des nombres écrits sous la forme décimale (ou de base 10), et quelquefois avec des nombres écrits sous la forme sexagésimale (ou de base 60). Ce dernier cas est en fait assez courant dans la mesure du temps (heure, minute, seconde) ou des angles (degré sexagésimal, minute sexagésimale, seconde sexagésimale).

Par exemple, lorsque nous voulons calculer 2+3, nous écrivons dans une cellule =2+3 et nous avons la satisfaction de constater que notre tableur affiche 5.

Pour ce faire, le processeur ne calcule pas 2+3. Très schématiquement, on peut dire qu'avant que le processeur calcule, la formule est interprétée. Les nombres sont convertis en base 2, dans laquelle, 2 (base 10) s'écrit 10 (base 2), 3 (base 10) s'écrit 11 (base 2).
Le processeur additionne les nombres en base 2 et renvoie 101 (base 2). Ce résultat est converti en base 10 pour donner 5 (base 10) avant d'être affiché.
Tout va bien.

La source de nos problèmes vient de cette transposition de base à base.
Par exemple : Nous voulons calculer 45 minutes + 1 minute et nous attendons de notre tableur qu'il nous réponde que le résultat est 46 minutes.

Mais le boulot est très compliqué pour notre tableur !

Nous inscrivons ="0:45"+"0:01" dans la cellule A1 d'une feuille vierge et, à la surprise générale, la réponse est : 0,031944444.
Voyons ce qu'a fait le tableur.
En analysant notre demande, il comprend qu'il faut calculer une somme et que les termes de cette somme sont des temps. Le tableur est conçu de telle sorte que tout ce qui concerne les temps est traité dans l'unité "jour". Pour lui, 1 heure est 1/24 jour, 1 minute est 1/1440 jour, etc.
Il va donc demander au processeur de calculer (45/1440)+(1/1440).

Selon la technique décrite plus haut, il convertit 45/1440 (base10) en 0,00001 (base 2) et 1/1440 (base 10) en
0,00000000001011011000001011011000001011011000001011011... (base 2).
Le malheur est que cette transcription ne peut être exacte. L'écriture ci-dessus signifie qu'en base 2 la valeur exacte de 1/1440 s'écrit avec une suite infinie de chiffres, la partie soulignée (000001011011) se répétant indéfiniment. En pratique, une machine ne peut pas travailler avec des nombres dont l'écriture est une suite infinie de chiffres. Elle ne conservera que le début de l'écriture, qui représente une valeur voisine de la valeur exacte.
Si elle ne garde, par exemple, que 0,00000000001011011 (base 2), elle ne calculera pas réellement avec 1/1440 (base 10), mais avec 91/131072 (base 10) puisqu'elle aura oublié une infinité de chiffres. La différence de ces deux nombres vaut à peu près -0.000000169542100694471 (base 10). Par conséquent tous les calculs ultérieurs seront légèrement faussés par cette approximation.
Ainsi on obtiendra 0,00001000001011011 (base 2) pour somme, soit 0,031944274902343... (base 10) au lieu de la valeur exacte 0,0,03194... où le 4... signifie que le 4 se répète indéfiniment.

Dans le cas d'Excel, le résultat retenu est 0,0319444444444444 car Excel travaille avec plus de chiffres binaires que je n'en ai retenu ci-dessus.

Maintenant, si nous mettons la cellule A1 au format Heure, nous constatons que s'affiche 00:46:00 qui est bien le résultat attendu. Mais il ne s'agit que d'un affichage, le contenu réel de la cellule étant toujours 0,0319444444444444.

Écrivons maintenant 0,0319444444444456 dans la cellule B1 et appliquons-lui le format Heure. On obtient l'affichage 00:46:00.

Enfin, écrivons =A1=A2 dans la cellule A3. Le résultat affiché est FAUX, contredisant les apparences !
Mais c'est correct car 0,0319444444444444≠0,0319444444444456

En fait, ces comparaisons de valeurs sont assez aléatoires chaque fois qu'on ne maitrise pas parfaitement les techniques d'arrondi. On retiendra que les comparaisons se font sur le contenu réel des cellules et non sur le contenu affiché.

Voilà...
 

Statistiques des forums

Discussions
314 179
Messages
2 106 889
Membres
109 719
dernier inscrit
Naoufel