Text.Upper : convertir un texte en majuscules dans Power Query
Mettre en capitales un nom de client, un code ou un libellé, pour que des saisies différentes deviennent enfin comparables.
Text.Upper renvoie le texte reçu avec tous ses caractères convertis en majuscules. Rien d’autre ne change : ni la longueur, ni l’ordre des caractères, ni les espaces. On s’en sert surtout pour normaliser une colonne avant de la comparer, de la fusionner ou de la dédoublonner, par exemple quand le même client est saisi « Bob » dans une facture et « BOB » dans une autre.
Dans l’éditeur, la même conversion se trouve dans le menu Format de l’onglet Transformer. En M, on l’écrit le plus souvent à l’intérieur de Table.TransformColumns pour traiter toute une colonne d’un coup.
Un texte, et une culture facultative
Text.Upper(
text as nullable text,
optional culture as nullable text
) as nullable text
| Paramètre | Rôle |
|---|---|
text | Le texte à convertir. Le type nullable text indique que la fonction accepte aussi une valeur null. |
culture | Facultatif. Un code de culture sous forme de texte, par exemple "en-US". La documentation ne détaille pas l’effet de chaque culture sur la conversion. |
La fonction attend du texte : une colonne de nombres doit d’abord être convertie, par exemple avec Text.From.
Trois façons de s’en servir
Sur une table de factures avec une colonne Client qui contient Bob, jim, Paul et RINGO, saisis sans règle commune.
Convertir une valeur
Text.Upper("aBcD")
Le résultat est "ABCD". C’est l’exemple de la documentation officielle.
Convertir toute une colonne
Table.TransformColumns(Factures, {{"Client", Text.Upper, type text}})
La colonne Client contient désormais BOB, JIM, PAUL et RINGO. Le troisième élément de la paire fixe le type de la colonne transformée.
Préciser la culture
Text.Upper("facture de mars", "fr-FR")
Le résultat est "FACTURE DE MARS". Sur des libellés en français, nous omettons en général ce paramètre.
La fusion qui ne trouve pas Bob
Vous fusionnez une table de factures avec une table de clients sur le nom. Côté factures, le nom est saisi « bob » ; côté clients, « Bob ». La fusion ne trouve aucune correspondance pour cette ligne, et la facture se retrouve sans client dans le rapport.
La raison est écrite dans la spécification du langage M : deux textes sont comparés de façon ordinale et en respectant la casse. Pour Power Query, « bob » et « Bob » sont deux valeurs différentes.
La parade consiste à créer, dans chacune des deux tables, une clé normalisée, et à fusionner sur cette clé plutôt que sur le nom affiché :
#"Clé client" = Table.AddColumn(
Factures, "CleClient",
each Text.Upper(Text.Trim([Client])), type text)
Text.Trim retire au passage les espaces de début et de fin, l’autre cause fréquente de correspondances manquées. La colonne Client d’origine reste intacte pour l’affichage : seule la clé sert à la fusion.
Ce qu’on nous demande sur Text.Upper
Quelle différence avec Text.Proper ?
Text.Upper met toutes les lettres en majuscules. Text.Proper met une majuscule à la première lettre de chaque mot, ce qui convient mieux à un nom destiné à l’affichage.
Que renvoie Text.Upper sur une valeur null ?
La signature accepte un texte nullable et renvoie un texte nullable : une cellule vide à null ne provoque pas d’erreur et reste null.
Peut-on comparer deux textes sans changer leur casse ?
Oui. Plusieurs fonctions de listes acceptent un comparateur, par exemple List.Contains(Clients, "bob", Comparer.OrdinalIgnoreCase), qui ignore la casse sans modifier les données.
Faut-il renseigner le paramètre culture ?
Il est facultatif. La documentation officielle se limite à l’exemple "en-US" ; nous ne le renseignons que lorsqu’une règle propre à une langue l’impose.
Pour aller plus loin
Sources. Documentation officielle de l’éditeur, consultée le 14 octobre 2026 : Text.Upper, Table.TransformColumns, Comparer.OrdinalIgnoreCase, Opérateurs du langage M.
Vos fusions laissent des factures sans client ?
Nous relisons vos requêtes pour repérer les clés de jointure qui dépendent d’une saisie et les normaliser.