PowerQuery transformation de dates

Bonjour à tous,

Je récupère une dizaine de dates sous la forme Lun.26, Mar.27, ... sans le mois ni l'année.
Je voudrais au moyen de PowerQuery les transformer en dates Excel sous la forme 26/08/2024, 27/08/2024, ...
La première date est toujours la date du jour.

20testdates.xlsx (21.08 Ko)

Merci de vos réponses

Bonjour BeGood,

Un essai à tester !

18testdates.xlsx (18.44 Ko)
let
    Source = Excel.CurrentWorkbook(){[Name="tDonnées"]}[Content],
    Idx = Table.AddIndexColumn(Source, "Idx", 0, 1, Int64.Type),
    Date = Table.AddColumn(Idx, "Date", each Date.AddDays(DateTime.Date(DateTime.LocalNow()), [Idx])) [[Date], [Montant]],
    #"Type modifié" = Table.TransformColumnTypes(Date,{{"Date", type date}})
in
    #"Type modifié"

EDIT : On peut gratter une étape en modifiant le typage directement dans la fonction Table.AddColumn

Date = Table.AddColumn(Idx, "Date", each Date.AddDays(DateTime.Date(DateTime.LocalNow()), [Idx]), type date) [[Date], [Montant]]

Bonjour à tous de nouveau,

@JB_ Merci beaucoup, cela fonctionne très bien et me convient parfaitement.

Maintenant, quelles évolutions si la première date n'est pas la date du jour mais une date quelconque dans le mois courant, par exemple Lun.12 ?

RE,

Une proposition plus longue... A tester

21testdates.xlsx (22.28 Ko)

Bonjour de nouveau,

@JB_, merci de cette proposition qui me parait quand même un peu lourde, Je continue à chercher de mon côté.

Bonjour,

Avec ce code, peut-être?

let
    Source = Excel.CurrentWorkbook(){[Name="tDonnées"]}[Content],
    PremJour = #date(Date.Year(DateTime.FixedLocalNow()),Date.Month(DateTime.FixedLocalNow()),Number.From(Text.AfterDelimiter(Source[Jour]{0},"."))),
    ListJour = List.Dates(PremJour,Table.RowCount(Source),Duration.From(1)),
    Final =Table.FromColumns(Table.ToColumns(Source) & {ListJour},Table.ColumnNames(Source) & {"Date"})[[Date],[Montant]]
in
    Final

Bonne fin d'apm

Edit, ne pas oublier (comme moi...) de typer convenablement les 2 colonnes (Date et Currency) avant le chargement...

let
    Source = Excel.CurrentWorkbook(){[Name="tDonnées"]}[Content],
    PremJour = #date(Date.Year(DateTime.FixedLocalNow()),Date.Month(DateTime.FixedLocalNow()),Number.From(Text.AfterDelimiter(Source[Jour]{0},"."))),
    ListJour = List.Dates(PremJour,Table.RowCount(Source),Duration.From(1)),
    Final =Table.FromColumns(Table.ToColumns(Source) & {ListJour},Table.ColumnNames(Source) & {"Date"})[[Date],[Montant]],
    ModType = Table.TransformColumnTypes(Final,{{"Date", type date}, {"Montant", Currency.Type}})
in
    ModType

Re-,

Ultime version....(du moins, pour ma part...)

let
    Source = Excel.CurrentWorkbook(){[Name="tDonnées"]}[Content],
    PremJour = #date(Date.Year(DateTime.FixedLocalNow()),Date.Month(DateTime.FixedLocalNow()),Number.From(Text.AfterDelimiter(Source[Jour]{0},"."))),
    ListJour = List.Dates(PremJour,Table.RowCount(Source),Duration.From(1)),
    Final =Table.FromColumns({ListJour} & {Source[Montant]},{"Date","Montant"}),
    ModType = Table.TransformColumnTypes(Final,{{"Date", type date}, {"Montant", Currency.Type}})
in
    ModType

Bonjour à tous de nouveau,

Merci cousinhub pour ces propositions qui fonctionnent très bien également et qui me vont tout à fait.

Avec vos propositions, JB_ et cousinhub, je devrais pouvoir m'en sortir. J'ai juste un dernier point, dans mon tableau initial j'ai une quinzaine de colonnes que je voudrais conserver, je ne sais pas s'il faut les lister une par une ou s'il existe une autre façon plus judicieuse.

Bonjour à tous,

@Cousinhub () Bravo pour cette partie :

Final =Table.FromColumns({ListJour} & {Source[Montant]},{"Date","Montant"})

Je cherchais justement à regrouper 2 listes !

@BeGood : j'avoue que je n'ai pas cherché l'optimisation... j'ai fait au plus rapide !

Pour ce qui est de ta question et si la date commence à la date du jour (selon ta première demande), voici le code :

let
    Source = Excel.CurrentWorkbook(){[Name="tDonnées"]}[Content],
    Idx = Table.AddIndexColumn(Source, "Idx", 0, 1, Int64.Type),
    Date = Table.AddColumn(Idx, "Date", each Date.AddDays(DateTime.Date(DateTime.LocalNow()), [Idx]), type date)
in
    Date

Il faut juste supprimer ceci à l'étape Date : [[Date], [Montant]]. Cela conservera toutes tes colonnes.

Bonjour,

Afin de conserver l'entièreté du tableau d'origine, il suffit d'utiliser le deuxième code de ma proposition de 18H56, hier.

Et de supprimer [[Date],[Montant]] à la fin de l'étape "Final"

Bonne journée

Bonjour à tous,

Merci JB_ et cousinhub pour vos dernières propositions qui me vont parfaitement.

Je suis encore loin de maîtriser le langage de PowerQuery !

Sujet résolu

Rechercher des sujets similaires à "powerquery transformation dates"