[Power Query] Rectifier les noms des mois

Bonjour,

Dans quelques fichiers, certains mois sont mal orthographiés (Aout, Decembre ou Fevrier), aussi bien dans les noms d'onglets, que dans les cellules (pseudos dates entrées manuellement...)

Je recherche une fonction dynamique, afin de corriger automatiquement ces "mois" (un remplacement un par un, c'est bien, mais...)

Merci par avance

Hello,

Les fuzzyjoin sont tes amis (Merci à JFL pour cette belle découverte)

@+

Edit pour ceux qui ne veulent pas ouvrir le fichier

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],

    //On transforme en type texte pour le fuzzyjoin sinon ça plante avec un msg d'erreur
    TableMois = let a = Table.FromColumns(
        {List.Transform({1..12}, each Text.Proper(Date.MonthName(#date(2024, _, 1))))}, 
        {"MoisParfait"}
    ) in Table.TransformColumnTypes(a,{{"MoisParfait", type text}}),

    AjoutDateCorrigee = Table.AddColumn(Source, "Date_Corrigée", each 
        [
            //Au cas ou ta cellule est vide
            TexteActuel = if [Date] = null then "" else Text.From([Date]),

            ListeMots = Text.SplitAny(TexteActuel, " _-./'"),
            TableMots = Table.FromColumns({ListeMots}, {"MotSaisi"}),

            //FuzzyJoin
            RechercheFloue = Table.FuzzyNestedJoin(
                TableMots, "MotSaisi", 
                TableMois, "MoisParfait", 
                "Correspondance", 
                JoinKind.LeftOuter,
                [IgnoreCase=true, Threshold=0.7] // Ca c'est le % de compatibilité en gros le 0,7
            ),

            // On ne garde que les mots matchent avec ta liste
            MotsAModifier = Table.SelectRows(RechercheFloue, each not Table.IsEmpty([Correspondance])),

            // Remplacement dans le texte
            NouveauTexte = List.Accumulate(
                Table.ToRecords(MotsAModifier),
                TexteActuel,
                (etat, ligne) => Text.Replace(etat, ligne[MotSaisi], ligne[Correspondance]{0}[MoisParfait])
            )
        ][NouveauTexte]
    )
in
    AjoutDateCorrigee

Bonjour à tous ! (avec mention spéciale pour les "fondus" de Power Query....)

Une autre approche ?

let    
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    NomMois = List.Buffer({
        {"janvier", "Janvier"},
        {"fevrier", "Février"},
        {"mars", "Mars"},
        {"avril", "Avril"},
        {"mai", "Mai"},
        {"juin", "Juin"},
        {"juillet", "Juillet"},
        {"aout", "Août"},
        {"septembre", "Septembre"},
        {"octobre", "Octobre"},
        {"novembre", "Novembre"},
        {"decembre", "Décembre"}
    }),
    Resultat = Table.TransformColumns(
        Source,
        {{"Date", each
            List.Accumulate(
                NomMois,
                Text.Lower(Text.FromBinary(Text.ToBinary(_, 1251), 1251)),
                (a,c) => Text.Replace(a, c{0}, c{1})
            ),
        type text}}
    )
in
    Resultat

Hi,

Merci pour vos solutions.

Je penche quelque peu pour celle de JFL (j'avais également essayé ce List.Accumulate, mais sans résultat probant)

Merci encore, et bon appétit

Hey,

Plutôt stylée comme solution, j'avoue n'avoir jamais pensé au Text.ToBinary mais quand on voit la solution on se dit que c'est plutôt évident

JFL

@+

Bonjour

pour en savoir plus sur cette combinaison Text.FromBinary Text.ToBinary voir Removing diacritics from text in Power Query in Excel and Power BI

Je me souviens avoir lu ce post il y a quelques mois, mais je n'aurais pas pensé à l'utiliser dans cette situation

Bravo JFL, pour cette solution.

La liste de listes {{"janvier", "Janvier"}, {"fevrier", "Février"}, ... } peut être obtenue avec

List.Transform( List.Transform( {1..12}, each Text.Proper(Date.ToText(#date(2026,_,1), "MMMM"))), each {Text.Lower(Text.FromBinary(Text.ToBinary(_,1251),1251)), _})

le premier List.Transform pour obtenir la liste des mois, les 2d pour la liste de listes {"janvier", "Janvier"}

mais c'est plus simple de le faire à la main

Stéphane

Hello Stéphane,

Merci également pour ta participation.

J'avais également déjà vu cette syntaxe, mais de là à m'en rappeler... Heureusement que JFL est là

Bonne fin d'apm

Rechercher des sujets similaires à "power query rectifier noms mois"