Richard Ginier, fondateur · 18 août 2026

Nettoyer du texte en Power Query

Mis à jour le

Un rapport faux commence souvent par un texte sale : « Paris », « paris » et « Paris » (avec un espace de fin) comptent pour trois villes différentes dans un TCD comme dans Power BI. Le nettoyage se fait en Power Query, une fois pour toutes, à l’actualisation. Voici les fonctions de texte que nous utilisons vraiment, regroupées par problème à résoudre. Chaque exemple se colle dans une colonne personnalisée, et la plupart existent aussi en bouton dans l’onglet Transformer (Format).

Espaces et caractères invisibles

Text.Trim ( [Libellé] )    // retire les espaces en début et fin
Text.Clean ( [Libellé] )   // retire les caractères de contrôle (retours ligne…)
Text.Trim ( Text.Clean ( [Libellé] ) )  // les deux, l'enchaînement classique

Le duo Trim + Clean corrige la cause n°1 des doublons fantômes dans les segments et des jointures qui échouent. Les exports d’ERP et les copiés-collés d’Excel en sont truffés. Pour les espaces internes multiples (« Dupont   Jean »), combinez avec un remplacement : Text.Combine ( List.Select ( Text.Split ( [Libellé], " " ), each _ <> "" ), " " ).

La casse : majuscules et minuscules

Text.Proper ( [Nom] )   // Une Majuscule À Chaque Mot
Text.Upper ( [Code] )   // TOUT EN CAPITALES
Text.Lower ( [Email] )  // tout en minuscules

Text.Proper est parfait pour des noms propres saisis n’importe comment, avec une limite à connaître : il met aussi une majuscule après les apostrophes et traite « De La Fontaine » sans finesse. Pour les emails et les codes de jointure, imposez systématiquement Text.Lower ou Text.Upper des deux côtés de la relation : Power Query est sensible à la casse, « ABC123 » et « abc123 » ne se joignent pas.

Remplacer et supprimer

Text.Replace ( [Tel], " ", "" )        // supprime tous les espaces
Text.Replace ( [Ref], "REF-", "" )     // retire un préfixe fixe
Text.Remove ( [Montant], {"€", " "} )  // retire une liste de caractères
Text.Select ( [Montant], {"0".."9", ",", "-"} )  // ne garde QUE ces caractères

Text.Select mérite d’être plus connu : plutôt que d’énumérer ce qu’on enlève, on décrit ce qu’on garde. Idéal pour extraire un montant d’une colonne qui mélange « 1 234,56 € » et « N/A », juste avant la conversion en nombre.

Découper et extraire

Text.Split ( [NomComplet], " " )        // liste des morceaux
Text.BeforeDelimiter ( [Email], "@" )   // la partie avant @
Text.AfterDelimiter ( [Email], "@" )    // le domaine
Text.Start ( [Code], 3 )                // les 3 premiers caractères
Text.End ( [Code], 4 )                  // les 4 derniers
Text.Middle ( [Code], 2, 5 )            // 5 caractères à partir du 3e

L’interface propose la même chose via Fractionner la colonne et Extraire, ce qui suffit dans la plupart des cas. Le code prend le relais quand la règle varie selon la ligne, par exemple un code dont la longueur du préfixe change : Text.BeforeDelimiter reste alors plus robuste qu’un nombre de caractères fixe.

Chercher et tester

Text.Contains ( [Libellé], "avoir", Comparer.OrdinalIgnoreCase )  // contient ?
Text.StartsWith ( [Code], "FR" )     // commence par ?
Text.EndsWith ( [Fichier], ".xlsx" ) // finit par ?
Text.PositionOf ( [Libellé], "-" )   // position du caractère (-1 si absent)
Text.Length ( [Code] )               // longueur

Ces tests alimentent les colonnes conditionnelles : marquer les avoirs dans un journal de ventes, isoler les lignes françaises par leur préfixe, repérer les codes à la longueur anormale avant qu’ils ne cassent une jointure. Le troisième argument Comparer.OrdinalIgnoreCase rend le test insensible à la casse, ce qui évite bien des surprises.

Nettoyage de texte : ce qui revient souvent

Bouton de l’interface ou code M ?

Le bouton, tant qu’il fait exactement ce qu’il faut : il génère le même M et reste lisible pour la personne qui reprendra la requête. Le code devient nécessaire quand on enchaîne plusieurs transformations en une étape ou que la règle dépend de la ligne.

Comment gérer les accents dans les jointures ?

Le plus sûr est de normaliser les deux colonnes avant la fusion : casse forcée avec Text.Lower, espaces nettoyés avec Text.Trim, et si besoin remplacement des caractères accentués un à un avec Text.Replace. Les jointures approximatives (fuzzy) sont l’autre option quand les écarts sont trop variés.

Où trouver la liste complète des fonctions Text ?

Sur Microsoft Learn, section Text functions du langage M. Notre référence Power Query & DAX recense celles qui servent au quotidien, avec leurs cas d’usage.

Chaque fichier nettoyé à la main est un fichier qu’il faudra renettoyer le mois prochain. Notre calculateur du coût du reporting manuel chiffre ce que ces retraitements coûtent réellement à votre organisation.

Sources — documentation officielle, consultée le 22 août 2026 : liste des fonctions Text, Text.Trim, Text.Clean.

Parlons de vos données.

30 minutes pour évaluer votre situation — conseils concrets garantis, avec ou sans mission.

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