Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Community Manager

    [Power Query] Différence en mois entre deux dates
    Salut,

    Tout est dans le titre, et après plusieurs recherches sur internet, je ne trouve pas comment faire la différence en mois entre deux dates.

    Des idées ?

    Merci
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  2. #2
    Responsable
    Office & Excel

    Salut Malick,

    J'espère que tu vas bien...

    Tu veux une date à x mois d'écart ou tu veux calculer l'écart en mois entre deux dates... Si c'est le second cas, tu peux donner un exemple? Tu veux des mois entiers ou décimaux?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Expert éminent sénior
    Bonjour

    Avec une résultat similaire à une formule DATEFIF(Date1;Date2;"m") ?

    Sinon précise avec un exemple

    Edit Coucou Pierre
    Chris

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Responsable
    Office & Excel

    Salut Chris

    Oui, je pensais aussi à un DateDiff (existe en DAX mais j'ai pas l'impression que ça existe nativement dans les fonctions de Power Query)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Community Manager

    Salut Pierre et 78chris,

    Merci pour vos retour

    Désolé pour l'absence de précisions

    Avec une résultat similaire à une formule DATEFIF(Date1;Date2;"m") ?
    C'est bien cela 78chris, et comme évoqué par Pierre, en entier et en décimal (cela pourrait servir dans les calculs je pense).

    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  6. #6
    Expert éminent sénior
    RE

    Cela n'existe par en natif

    J'ai trouvé cela qui donne le même résultat que DATEDIF, sans décimales donc, mais rien n'empêche de bricoler pour ajouter les jours
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    (((Date.Year([#""Date fin""]) - Date.Year([Date Début]))-1)*12)+
    (12-Date.Month([Date Début]))+(Date.Month([#""Date fin""]))
    - (if Date.Day([#""Date fin""])<Date.Day([Date Début]) then 1 else 0)
    Chris

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Responsable
    Office & Excel

    Bravo Chris, tu as été plus rapide. Merci, je me mets cela bien au chaud


    @Malick,

    Pour apporter ma modeste contribution, j'en ai fait une fonction...

    Pour la sauvegarder, soit tu as un compte Power BI et tu la sauvegardes dans ton compte, soit tu te la gardes dans un fichier texte pour la réutiliser dans d'autres fichiers...













    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Community Manager

    Merci
    Salut à tous,

    Superbes contributions de votre part, car d'autres en bénéficieront sans aucun doute, surtout avec la montée en puissance de Power Query

    Merci bien Pierre et 78chis

    Bone soirée
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  9. #9
    Expert éminent sénior
    RE
    Citation Envoyé par Pierre Fauconnier Voir le message


    Pour apporter ma modeste contribution, j'en ai fait une fonction...
    Excellente idée
    Chris

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  10. #10
    Community Manager

    Salut,

    Pierre en testant cette fonction, entre le 01/01/2010 et le 31/12/2020, il me renvoie 11 au lieu de 12

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (BeginDate as date, EndDate as date) =>
     
        let
        Result= 
            (((Date.Year(EndDate) - Date.Year(BeginDate))-1)*12)+(12-Date.Month(BeginDate))+
            (Date.Month(EndDate))-(
            if Date.Day(EndDate)<Date.Day(BeginDate) then 1 else 0)
        in Result




    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  11. #11
    Responsable
    Office & Excel

    Hé, moi, je n'ai fait que mettre la solution de Chris en fonction. Pour les éventuelles erreurs de calcul, tu frappes à la mauvaise porte... (C'est pour rire, hein, )

    Cela dit, la date finale est calculée le matin à 0:00, donc il n'y a pas tout à fait 12 mois, et donc, comme avec DateDiff, tu vas récupérer 11 mois complets... [B][[/B]Premier jour; Dernier jour[B][[/B]




    Donc, si tu veux que le dernier jour soit inclus, tu dois lui ajouter 1 , soit dans la formule de la colonne, soit dans la fonction.

    Attention, Dans PowerQuery, tout est objet, et une date n'est pas un nombre comme dans Excel, mais un objet Date, et un nombre n'est pas un nombre, mais un objet Int16, Int32, Int64... Le transtypage doit être explicite --- Et tant qu'on y est, PowerQuery est sensible à la casse!)


    Voici pour la formule...







    Voici pour la fonction (attention alors aux différences avec DateDif). Ca donne, en prime, la façon d'utiliser une variable interne à la fonction...




    Mais attention, encore une fois, que le résultat différera de DateDif, ce qui pourrait être perturbant.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Community Manager

    Salut Pierre,

    C'est Excellent, Nickel

    Merci beaucoup encore à vous tous pour l'idée.

    Bonne soirée
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  13. #13
    Responsable
    Office & Excel

    Malick,

    Je dis que tout est objet dans PowerQuery puis je fais n'importe quoi derrière... Je n'ai pas encore les bons réflexes "Power Query"...

    Pour ajouter un jour à une date, on a bien entendu une fonction de la catégorie de dates... AddDays (autant s'habituer de suite à utiliser les techniques les meilleures )

    Soit dans la colonne formulée




    Soit dans la fonction





    De plus, on n'est pas obligé de passer par EndDate1, on peut ajouter 1 à EndDate, car comme en VBA, un argument de fonction est une variable interne à la fonction.





    C'est là qu'on voit que PowerQuery n'est pas tout à fait "Objet" mais plutôt "Orienté Objet" car normalement, en vrai POO, on aurait la méthode EndDate.AddDays 1, alors qu'ici, on utilise la fonction AddDays.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Community Manager

    Salut,

    Merci Pierre, bien vu

    Power Query que je découvre est formidable je trouve

    Merci encore
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.