XL 2016 calcul de durée

Gandaalff

XLDnaute Nouveau
Bonjour
Je voudrais calculer la durée d'une course qu'elle qu'elle soit comme par exemple une course transatlantique.
Depart le 15/08/2019 à 12h00mn00s arrivée le 12/09/2019 à 7h45mn08s
En A1 et A2 j'inscrits les dates en format jj/mm/aaaa hh:mm:ss
Je voudrais la réponse en A3 dans un format lisible comme X année (s), X mois, X jour (s), X heure (s), X minute (s) , X seconde (s)
Si vous pouvez m'aider ?
Merci
Gandaalff
 

Modeste geedee

XLDnaute Barbatruc
N'en sois pas désolé. C'est au contraire une bonne chose car cela va nous donner l'occasion de tenter de trouver une solution sans faille à ce problème de détermination d'une durée calendaire.
depuis que les calendriers son utilisés en informatique, ce problème est posé et reste posé ...
seule la durée en jours est exacte et fiable...
la découpage en années, mois, jour ne correspond à aucune réalité mathématique et ne satisfait qu'un conformisme nombriliste.:D

résumons :
une durée calendaire s'exprime aisément en jours : = date fin- date début
si l'on souhaite des sous-divisions mois ou année
se pose alors l'évaluation de ces sous divisions :
  • un mois c'est 31, 30, 29 ou bien 28 jours​
  • une année c'est 365 ou 366 jours​
Une solution "mathématique" devient alors très compliquée , et varie selon les dates de début et de fin, la durée pouvant inclure ou non : des mois complets, des années complètes parfois bissextiles.

le schéma :
  • A - durée fin de mois (date de début) en jours
  • B - durée mois complets (nombre)
  • C - durée début de mois (date de fin) en jours

;)s'il est facile (indépendamment de la durée variable en jour d'un mois)
de déduire des années complètes à partir du nombre de mois complets:
NbAn=ENT(NbMois/12)
NbMois inférieurs à une année= NbMois modulo 12

le problème se complique pour les reliquats A et C
si la somme est inférieure à 29 pas de soucis;)
mais dans le cas contraire :
:rolleyes:quelle valeur en jours choisir ?
pour considérer qu'il faut ajouter un mois au résultat précédent et même éventuellement une année
o_Ole dilemme reste entier :
privilégier le nombre de jour du mois de début ou bien le nombre de jour de mois de fin
ou encore le nombre de jours du mois suivant la séquence des mois complets recensés...

D'aucuns trouveront alors un cas d'espèce ne correspondant pas à leur attente ... :mad:

De nombreux intervenants ici et sur d'autres groupes Excel ont exploré c'es différentes voies sans obtenir de consensus satisfaisant...
 

jmfmarques

XLDnaute Accro
RE-bonjour,Modeste geedee
La notion de durée calendaire existe pourtant bel et bien et on la retrouve dans de nombreux domaines (à commencer par le domaine juridique)
Il n'y a pas si longtemps, par exemple et entre autres, on était recensable (armée) dès 18 ans et 3 mois et cela se calculait fort bien, y compris informatiquement., hein ...
On retrouve d'ailleurs cette notion de durée calendaire dans de nombreux actes ministériels (actes notariés, actes d'état civil, etc..), des contrats, des textes législatifs, des jugements, etc ...
Et la durée calendaire se calcule selon une règle précise, d'ailleurs enseignée à l'école.
Je comprends (et on le voit bien ici) les difficultés que cela pose, mais elles ne sauraient être les raisons d'un "sauve-qui-peut". Désolé, mais ce qui peut être défini manuellement doit pouvoir l'être informatiquement et selon la même logique que manuellement. Ou alors, ce serait un désaveu peu acceptable.

Amitiés.
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
RE-bonjour,Modeste geedee
par exemple et entre autres, on était recensable (armée) dès 18 ans et 3 mois et cela se calculait fort bien, y compris informatiquement., hein ...
il n'y a pas la notion jours ???
il n'était d'ailleurs pas question de durée, mais de dépassement de la date anniversaire .
=MOIS.DECALER(DateNaiss; (18*12)+3)
On retrouve d'ailleurs cette notion de durée calendaire dans de nombreux actes ministériels (actes notariés, actes d'état civil, etc..), des contrats, des textes législatifs, des jugements, etc ...
Et la durée calendaire se calcule selon une règle précise, d'ailleurs enseignée à l'école. (*)
(*) citer vos sources ... S.V.P.
quant au "sauve-qui-peut" : une recherche sur ce forum depuis 2012, sur les groupes "microsoft.public.fr.excel" depuis 1999, pourront vous rassurer quant à ma position et mes propositions sur ce sujet.
 

jmfmarques

XLDnaute Accro
selon une règle précise, d'ailleurs enseignée à l'école. (*)
(*) citer vos sources ... S.V.P.

Quelles "sources" ?
Pas plus que je ne saurais en citer d'autres (calculs divers et variés , y compris comment poser une multiplication, une division, calculer un pourcentage, effectuer une "preuve par 9", etc etc ... !). Ce qui ne fait aucun doute, c'est que l'on me les a enseignés avant même d"entrer en "sixième"
vous rassurer quant à ma position et mes propositions sur ce sujet.
voilà qui est rassurant et qui encourage à s'y remettre, maintenant que l'on a découvert des "failles" ;)
C'est ce à quoi je vais donc m'attacher (au demeurant : en appliquant l'enseignement élémentaire que j'ai reçu plutôt que des fonctions qui sont confortables mais -on le voit bien - non exemptes de défauts)
Pour tout dire : j'en ai terminé hier avec l'essentiel (calcul / méthode "bourrin"). J'en suis au passage ardu d'une factorisation souhaitable
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
maintenant que l'on a découvert des "failles" ;)

si faille il y a , c'est dans l'énoncé !
il n'y a pas bijection entre une durée en jour et une durée avec subdivisions en année mois jour
les sub-diviseurs ne sont pas des constantes !!!
notamment :
https://www.excel-downloads.com/threads/inclure-des-si-dans-une-formule-datedif.20037453/post-20287955
 

jmfmarques

XLDnaute Accro
Ah ...
Je me demande alors pourquoi de tels calculs figurent encore dans les programmes scolaires, hein ...
Ils ne sont donc pas une "particularité étonnante" de l'enseignement qui était dispensé en cours élémentaire il y a quelques décennies (je suis très avancé en âge)...
Et je me demande également pourquoi ils sont appliqués dans le calcul, en fonction de l'ancienneté et de conventions collectives, d'indemnités de licenciement.
Une question de planètes différentes, sûrement ;)
Quoi qu'il en soit : moi, je vais continuer à la concocter, cette fonction personnalisée ...

EDIT : se garder de confondre l'expression en unités autres que constantes d'une durée temporelle (ce serait un non sens) avec l'expression d'une durée calendaire, qui, elle ne s'arrête pas aux unités temporelles et ne se détermine en aucun cas par la répartition d'une durée temporelle totale en subdivisions de cette durée. Ce sont des choses totalement distinctes.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
On peut bien évidemment développer des formules ou des programmes pour trouver une réponse qui pourra satisfaire quelques personnes (et on doit trouver des exemples, déjà tout faits, sur internet).

Mais ce que le Barbatruc @Modeste geedee dit, et c'est une évidence, c'est que le résultat donné par ces formules ou programmes (ce que tu nommes ci-dessus "durée calendaire") n'aura strictement aucune valeur, ou du moins aura uniquement la valeur que chacun voudra bien lui donner, puisque la durée d'un mois dépend dudit mois voire de l'année et que la durée d'une année dépend elle aussi de ladite année.


[edit]
Voici un exemple de ce qu'on peut obtenir avec Excel.
Mes les résultats obtenus conviendront-ils à tout le monde ??? Pas sûr...
calcul durée.JPG

[/edit]
 
Dernière édition:

jmfmarques

XLDnaute Accro
Bonjour Marcel32
Le super bleu que je suis s'en tient quant à lui à ce qu'on lui a enseigné lorsqu'il avait aux alentours de 8 ans et demi en ce qui concerne la définition et la détermination de la durée calendaire : toutes les années entières + tous les mois entiers + tout ce qui reste ensuite (et qui ne saurait donc compter ni une année, ni un mois).
Si cette convention échappe à la compréhension, il suffit d'imaginer (exemple) que Pierre a atteint l'âge de 50 ans le 21 janvier 2000. Le 27 janvier 2000, il avait dont 50 ans 0 mois et 7 jours.
S'il avait atteint l'âge de 50 ans le 20 février 2020, il avait donc 50 ans 0 mois et 10 jours (et pas 9) le 1er mars 2020.
On voit bien que, dans un cas comme dans l'autre, on a une ancienneté temporelle ainsi exprimée en années entières, mois entiers et jours résiduels.
Le super bleu que je suis invite par ailleurs les plus anciens à fouiller parmi les sites dédiés, eux, au fondement même de tout cela : les sites mathématiques. Certains d'entre eux vont plus loin et offrent y compris un outil de calcul en ligne correspondant à cette convention (car il s'agit bel et bien de convention; une convention dont je ne discuterai personnellement pas plus les règles établies que je discuterais celles de tel ou tel autre jeu de cartes, par exemple ;) ).
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Le fait que tu sois débutant ne change rien à l'affaire, camarade. ;)

Il s'agit ici d'une simple question de logique : le résultat donné par des formules, ou par des calculs manuels, ne saurait être autre qu'une durée approximative.
C'est seulement ce que dit le Barbatruc @Modeste geedee, ce que je dis, et ce que tu as que tu as également dit en #23. Donc tout le monde est d'accord sur ce point. ;)

Mais ledit résultat peut convenir à certains et ne pas convenir à d'autres puisque la durée d'un mois n'est pas une constante.
Ainsi, le résultat convient à la personne qui a développé l'exemple que j'ai posté en #24, mais te convient-il, et convient-il à @Gandaalff (c'est quand même le but ici... lol) ? Pas sûr...
 

jmfmarques

XLDnaute Accro
Excuse-moi, Marcel, mais la logique, c'est tout simplement celle d'une convention de calcul arrêtée. On ne discute pas une convention .
Et si tu veux laisser des matheux calculer l'âge exact que tu as aujourd'hui, va voir là :
Et si tu as en vie de discuter/disputer cette convention, adresse-toi à eux ;)
Pour ton info, voilà où j'en suis depuis hier :
14/05/1941​
25/03/2020​
78 ans 10 mois 11 jours
=DUREE_CALENDAIRE(A1;B1)
Sans étonnement, j'ai le même résultat qu'eux (et pour la même raison fondamentale)
J'en suis maintenant à :
1) m'amuser à réécrire tout cela autrement (de manière purement scolaire)
2) à y inclure les heures, minutes et secondes

Telle qu'écrite, la fonction ne me plait pas totalement (question d'"esthétique") et rendrait plus complexe l'adjonction des heures, minutes et secondes.

Mais s'il y a des curieux, en voilà le code :
VB:
Public Function DUREE_CALENDAIRE(C1 As Range, C2 As Range) As String
  Dim nba As Integer, nbm As Integer, nbj As Integer, D1 As Date, D2 As Date, feinte As Long
  D1 = C1.Value:    D2 = C2.Value
  feinte = (D2 < D1) ^ 2
  nba = Year(D2) - Year(D1) - Switch(Month(D2) < Month(D1), 1, Month(D2) = Month(D1), feinte, True, 0)
  nbm = (Month(D2) - Month(D1) - feinte + 12) Mod 12
  nbj = Day(D2) - Day(D1) + feinte * Day(DateSerial(Year(D2), Month(D2), 1) - 1)
  DUREE_CALENDAIRE = Trim(IIf(nba > 0, nba & " an" & IIf(nba > 1, "s", "") & " ", "") & _
  IIf(nbm > 0, nbm & " mois ", "") & IIf((nbj > 0) Or (nba + nbm = 0), nbj & _
  " jour" & IIf(nbj > 1, "s", ""), ""))
End Function
Celui qui le remplacera (ce que je fais lentement et méticuleusement) n'aura plus rien à voir.
 

TooFatBoy

XLDnaute Barbatruc
Excuse-moi, Marcel, mais la logique, c'est tout simplement celle d'une convention de calcul arrêtée. On ne discute pas une convention .
Et si tu veux laisser des matheux calculer l'âge exact que tu as aujourd'hui, va voir là :
Et si tu as en vie de discuter/disputer cette convention, adresse-toi à eux ;)
Pour ton info, voilà où j'en suis depuis hier :
14/05/1941​
25/03/2020​
78 ans 10 mois 11 jours
=DUREE_CALENDAIRE(A1;B1)
Sans étonnement, j'ai le même résultat qu'eux (et pour la même raison fondamentale)
Perso, depuis plusieurs décennies je ne comprends pas que des gens puissent utiliser cette forme qui n'a absolument aucune valeur (comprendre "pas de valeur exacte mais seulement une valeur floue"), donc ça ne m'intéresse pas trop.
Mais j'irais tout de même voir ton lien, par curiosité et pour voir ce que je peux y apprendre. Merci.

Quant au tableau que tu montres, c'est aussi exactement ce que donne la formule donnée au départ par @Modeste geedee. ;)
 

jmfmarques

XLDnaute Accro
Perso, depuis plusieurs décennies je ne comprends pas que des gens puissent utiliser cette forme qui n'a absolument aucune valeur
Sois rassuré : d'autres, dont moi, ne comprennent pas, eux, que l'on ne sache pas faire cette différence entre le calendaire et le temporel.
Je te propose de constituer un collectif pour imposer, par exemple et entre autres, aux juges de prononcer en nombre de jours des peines privatives de liberté. :cool:

et le même collectif devra travailler au corps les législateurs pour qu'ils modifient l'expression (18 ans) de la majorité, hein ... Qu'ils la fixent donc en jours, puisqu'en la fixant en années, ils pénalisent ceux qui "compteront" plus d'années bissextiles dans leur "ancienneté " ! :D... Restons sérieux, s'il te plait.
 

TooFatBoy

XLDnaute Barbatruc
Sois rassuré : d'autres, dont moi, ne comprennent pas, eux, que l'on ne sache pas faire cette différence entre le calendaire et le temporel.
C'est en effet rassurant. Mais, sois également rassuré, je ne crois pas qu'il y ait une personne au monde qui ne fasse pas cette différence.

Et c'est justement en comprenant cette différence que normalement on devrait comprendre qu'une "durée calendaire" n'a qu'une durée floue en elle-même puisqu'il faut connaitre les dates de début et de fin pour connaître la durée réelle. ;)
Mais visiblement ce n'est pas le cas, donc créer un collectif pour essayer de faire comprendre cela serait, à mon avis, hélas une immense perte d'énergie en vain !

J'ai regardé ton lien : c'est complètement daubé leur truc :
- 28 février 1900 = > 43858 jours
- 29 février 1900 => 43857 jours
- 1er mars 1900 => 43854 jours
Pour rappel : le 29 février 1900 n'existe pas et 1er mars 1900 est le lendemain du 28 février 1900 (et non 4 jours plus tard).
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 180
Messages
2 085 993
Membres
103 081
dernier inscrit
jeromeolivier.raymond@wat