Référence Power Query · 5 min de lecture

Text.Proper : mettre une majuscule à chaque mot dans Power Query

Nettoyer une colonne de noms saisis n’importe comment. Et savoir sur quelles colonnes ne surtout pas l’utiliser.

Mis à jour le

Text.Proper met en majuscule la première lettre de chaque mot et passe toutes les autres en minuscules. C’est la seconde partie de la phrase qui compte : la fonction ne se contente pas d’ajouter des majuscules, elle réécrit tout le reste.

Syntaxe

Un texte, et une culture facultative

Text.Proper(text as nullable text, optional culture as nullable text) as nullable text

Text.Proper("the QUICK BrOWn fOx jUmPs oVER tHe LAzy DoG")
// "The Quick Brown Fox Jumps Over The Lazy Dog"

Le paramètre de culture existe et reste peu connu. Il sert pour les langues dont les règles de casse diffèrent, le turc étant le cas d’école avec son i sans point.

Sur une colonne entière, la fonction s’applique directement, sans fonction anonyme :

Table.TransformColumns(Source, {{"Nom", Text.Proper, type text}})
Le piège

Elle détruit les sigles et les formes juridiques

Puisque tout ce qui n’est pas une initiale passe en minuscules, une colonne de raisons sociales en ressort abîmée.

AvantAprès Text.Proper
SARL DUPONTSarl Dupont
SNCF RéseauSncf Réseau
Facture TVA 20%Facture Tva 20%

D’où la règle que nous appliquons : Text.Proper sur des noms de personnes, jamais sur des raisons sociales ni sur des libellés qui contiennent des sigles. Sur une base clients mêlant particuliers et entreprises, la transformation en bloc fait plus de dégâts qu’elle n’en répare.

Quand il faut quand même normaliser, on protège les exceptions après coup :

let
    Normalise = Table.TransformColumns(Source, {{"Raison sociale", Text.Proper, type text}}),
    Sigles    = {"SARL", "SAS", "SASU", "SA", "SCI", "EURL", "TVA"},
    Corrige   = Table.TransformColumns(
        Normalise,
        {{"Raison sociale",
          each List.Accumulate(Sigles, _, (etat, sigle) =>
              Text.Replace(etat, Text.Proper(sigle), sigle)),
          type text}}
    )
in
    Corrige

La liste des sigles se maintient dans une requête à part, ce qui permet de l’enrichir sans rouvrir la transformation.

En pratique

Normaliser avant de dédoublonner

L’usage qui justifie vraiment cette fonction est le rapprochement. « DUPONT », « dupont » et « Dupont » sont trois clients différents pour un regroupement, et un seul dans la réalité. Une normalisation de casse avant le dédoublonnage règle une bonne partie du problème.

Un enchaînement qui fonctionne bien : supprimer les espaces parasites, normaliser la casse, puis regrouper.

Table.TransformColumns(
    Source,
    {{"Client", each Text.Proper(Text.Trim(Text.Clean(_))), type text}}
)

Text.Clean retire les caractères de contrôle invisibles que laissent certains exports, Text.Trim les espaces de début et de fin. Sans ces deux-là, deux valeurs visuellement identiques restent distinctes et le regroupement échoue sans explication.

Questions fréquentes

Ce qu’on nous demande sur Text.Proper

Comment mettre en majuscule seulement la première lettre de la phrase ?

Text.Proper traite chaque mot. Pour ne toucher que le premier caractère, combinez Text.Upper(Text.Start([Texte], 1)) & Text.Lower(Text.Range([Texte], 1)).

Existe-t-il un équivalent en DAX ?

Il n’y a pas d’équivalent direct de Text.Proper en DAX. On dispose de UPPER et LOWER. C’est une raison de plus de normaliser la casse en Power Query, au chargement, plutôt que dans les mesures.

Faut-il normaliser la casse des données de production ?

Pour un affichage, oui. Pour une clé de rapprochement, préférez une colonne technique normalisée à côté, en gardant la valeur d’origine intacte. Réécrire la donnée source rend toute vérification ultérieure impossible.

Que devient une valeur nulle avec Text.Proper ?

Elle reste null, sans erreur. La fonction accepte le type nullable text, ce qui permet de l’appliquer sur une colonne incomplète sans protection particulière.

À côté

Les fonctions qu’on utilise avec

Sources — documentation officielle de l’éditeur, consultée le 22 août 2026 : Text.Proper, Text.Clean.

Un même client compté trois fois dans vos rapports ?

Casse hétérogène, espaces invisibles, libellés en double : nous reprenons la normalisation à la source pour que les regroupements tombent juste.

Demander un audit ou 01 83 64 60 25
01 83 64 60 25 Réserver un appel