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.
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}})
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.
| Avant | Après Text.Proper |
|---|---|
| SARL DUPONT | Sarl Dupont |
| SNCF Réseau | Sncf 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.
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.
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.
Les fonctions qu’on utilise avec
Table.FindText: retrouver une valeur dans toutes les colonnes.Table.AddKey: déclarer la colonne qui identifie une ligne.- La référence complète Power Query et DAX.
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.