Power Query Age même avant 1900

Cousinhub

XLDnaute Barbatruc
Bonjour,
Suite à une manipulation digne des sœurs Tatin (en gros, un mouvement désordonné de mes doigts), je me suis rendu compte que Power Query passait outre les restrictions d'Excel concernant les dates.
Dans le tableau joint (2 lignes représentatives), j'arrive à calculer l'âge en années - mois (entre autre grâce à l'aide d'une "formule" de Chris sur un autre forum).
Cependant, je présume qu'il doit y avoir bien plus simple, et surtout plus précis, pour se rapprocher de la formule Datedif ("m", "ym" ou "md").
Vous remerciant par avance.
Bonne apm
 

Pièces jointes

  • PQ_Calcul_Age_meme_avant_1900.xlsx
    17.3 KB · Affichages: 15

JHA

XLDnaute Barbatruc
Bonjour à tous,

Je n'ai pas ton niveau de connaissance sur Power Query mais peut-être une piste à explorer avec le nombre total de jours entre les deux périodes.

JHA
 

Pièces jointes

  • PQ_Calcul_Age_meme_avant_1900 (1).xlsx
    21.3 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
je ne connais pas ta formule PQ mais une chose est simple en formule
c'est d'ajouter l'arrondi à la centaine de la différence entre maintenant et la date en question
ajouter le même calcul à la date 2 bien sur
je suppose que ça doit être possible aussi sur PQ aussi simplement
cela dit si tu cherche une formule simple oublie fait le par vba
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Hello Bh² (souvenir du bhbh),
Hello CousinHub:)bel et bien d'aujourd'hui :)

J'avais traduit la fonction M de décalage en mois qu'on trouve sur le net en fonction anonyme, après avoir modifié le dernier terme (if then else) par Number.From(....) qui peut convertir un logique en nombre (0 = false, 1 = true), comme dans excel :
(BeginDate as date, EndDate as date) => (((Date.Year(EndDate) - Date.Year(BeginDate))-1)*12)+(12-Date.Month(BeginDate)) + (Date.Month(EndDate)) - Number.From(Date.Day(EndDate)<Date.Day(BeginDate))
Je n'essaierai pas de faire une fonction générique comme DateDiff qui devra prendre en compte tellement de situations différentes que pour moi le jeu n'en vaut pas la chandelle, je préfère composer à partir de petites fonctions comme celle ci-dessus pour adapter au besoin.

A++ cousin
 

bsalv

XLDnaute Occasionnel
si on ajoute un multiple d'un siècle ... ? (pour le moment, je suppose que les dates < 1900 sont dans le format "jj-mm-aaaa" !!!)

EDIT : même idée que patricktoulon
 

Pièces jointes

  • PQ_Calcul_Age_meme_avant_1900 (1).xlsx
    27.6 KB · Affichages: 7

chris

XLDnaute Barbatruc
Bonjour à tous

J'avais fait une fonction type DATEDIF il y a quelques temps
VB:
let
    Source = (DateD as date, optional DateF as date)=>
let
    Ojd=if DateF=null then DateTime.LocalNow() else DateF,
    Age = Text.From((Date.Year(Ojd) - Date.Year(DateD))-
        (if Date.Month(Ojd) < Date.Month(DateD) or (Date.Month(Ojd) = Date.Month(DateD) and Date.Day(Ojd)<Date.Day(DateD)) then 1 else 0)) & " ans "
        & Text.From(Date.Month(Ojd) - Date.Month(DateD)
        + (if Date.Month(Ojd) > Date.Month(DateD) then 0 else (if Date.Month(Ojd) = Date.Month(DateD) then 11 else 12))) & " mois"
in
    Age
in
    Source
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Et merci à tous pour vos réponses, mais, comme l'indiquait le préfixe, c'est bien avec Power Query que je voulais m'amuser...
Cependant, comme me l'a fait remarquer Modeste dans ses élucubrations, afin d'être au plus près de la vérité, il suffirait d'ajouter 700 ans à ces "dates", ce qui, dans mon fichier, donne bien 98 ans 11 mois et 29 jours.
@ Hasco, je m'en vais de ce pas tester ta fonction, et sur le fait du jeu qui n'en vaut pas la chandelle, je plussoie également, mon fil n'était destiné qu'à mon "agri"-culture... :cool:
@ Jacky, lorsqu'on insère une colonne "Âge" directement à partir de l'éditeur PQ (en modifiant la date du jour par la DDC dans la formule), on obtient effectivement le nb de jours en type "Duration"
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"DDN", type date}, {"DDC", type date}}),
    #"Âge d'insertion" = Table.AddColumn(#"Type modifié", "Âge", each Date.From([DDC]) - [DDN], type duration)
in
    #"Âge d'insertion"

1681910632970.png


@chris , je viens de voir ta proposition, que je vais également testée derechef.
Merci à toutes et à tous pour vos apports sur ce fil
 

chris

XLDnaute Barbatruc
Ne pas oublier aussi ce calcul de Paques selon les bulles papales de Roger
 

Statistiques des forums

Discussions
312 215
Messages
2 086 339
Membres
103 192
dernier inscrit
Corpdacier