Voici 2 méthodes pour supprimer les accents dans Excel avec une macro VBA et une requête Power Query

(Last Updated On: )

Il est parfois nécessaire de retirer les accents dans un texte ou un champs de données.

Récemment, j’ai eu à gérer une base de données RH de plusieurs milliers de lignes, où il existait un identifiant unique pour chaque employé, permettant d’identifier de manière sûre un employé en s’affranchissant des erreurs éventuelles de saisie dans les noms et prénoms avec des accents.

Mais lorsque j’ai souhaité comparer cette base à une autre base qui ne contenait que les noms et prénoms des employés, la clé unique était inutile, et donc j’ai dû baser l’analyse par employé en fonction de leur nom/prénom, et c’est là que les problèmes d’accents ont commencé…

Comment donc remplacer TOUS les accents de manière automatique dans Excel ?

Voici 2 méthodes, l’une basée sur une fonction VBA à utiliser comme n’importe quelle formule dans votre classeur Excel, et l’autre basée sur PowerQuery pour traiter une base de données en masse.

Fonction VBA : supprimer les accents dans une cellule

Voici la macro VBA pour supprimer les accents d’un texte.

Pour utiliser la macro :

  1. Allez dans l’éditeur VBA, depuis l’onglet Développeur d’Excel
  2. Puis ajoutez un module et copier-coller le code ci-dessous :
Option Explicit

Function fnSupprAccents(texte As String)

Dim i As Long
Dim A As String, B As String, str As String
Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"

str = texte
For i = 1 To Len(AccChars)
    A = Mid(AccChars, i, 1)
    B = Mid(RegChars, i, 1)
    str = Replace(str, A, B)
Next
fnSupprAccents = str

End Function

La macro VBA recherche pour chaque caractère accentué du texte, le caractère non accentué correspondant, et retourne le texte sans les accents.

Ensuite, dans Excel, mettez-vous dans une cellule, et insérez la formule suivante :

=fnSupprAccents(A1)

avec A1, la référence à une cellule contenant du texte accentué.

Voilà, c’est très simple !

Requête PowerQuery : supprimer les accents dans un champs de données

PowerQuery ne propose pas de fonction native pour supprimer les accents des caractères. Même si l’on transforme le texte en Majuscule, les accents restent.

Voici donc une requête PowerQuery pour remplacer les accents dans un champs de données.

On commence par créer une table de correspondance entre les caractères accentués et non accentués :

let
    AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ",
    RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy",
    TableAcc = #table(1, {{AccChars}}),
    ExpandAcc = Table.ExpandListColumn(Table.TransformColumns(TableAcc, {{"Column1", Splitter.SplitTextByRepeatedLengths(1), let     itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    IndexAcc = Table.AddIndexColumn(ExpandAcc, "Index", 1, 1),
    TableReg = #table(1, {{RegChars}}),
    ExpandReg = Table.ExpandListColumn(Table.TransformColumns(TableReg, {{"Column1", Splitter.SplitTextByRepeatedLengths(1), let     itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    IndexReg = Table.AddIndexColumn(ExpandReg, "Index", 1, 1),
    Combine = Table.NestedJoin(IndexAcc, {"Index"}, IndexReg, {"Index"}, "Combine", JoinKind.LeftOuter),
    Dev = Table.ExpandTableColumn(Combine, "Combine", {"Column1"}, {"Combine.Column1"}),
    Source = Dev,
    Permute = Table.ReorderColumns(Source,{"Column1", "Combine.Column1", "Index"}),
    Rename = Table.RenameColumns(Permute,{{"Column1", "AccChar"}, {"Combine.Column1", "RegChar"}})
in
    Rename

Puis on créé une fonction de conversion utilisant la table de correspondance :

  • Prendre le texte à convertir en argument
  • Décomposer le texte dans une table avec un caractère par ligne, sur une colonne
  • Ajouter une colonne d’index définissant l’ordre des caractères
  • Effectuer une jointure gauche entre la table du texte et la table de correspondance, pour récupérer la version non accentuée de chaque caractère
  • Remettre les caractères dans l’ordre en triant selon la colonne d’index
  • Conserver uniquement la colonne des caractères sans accents
  • Combiner les lignes en un seul texte

Le code de la fonction est le suivant :

(Texte as text) =>
let
    Source = Texte,
    ToTable = #table(1, {{Source}}),
    SplitbyCharacter = Table.ExpandListColumn(Table.TransformColumns(ToTable, {{"Column1", Splitter.SplitTextByRepeatedLengths(1), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    AddIndex = Table.AddIndexColumn(SplitbyCharacter, "Index", 1, 1),
    JoinAccReg = Table.NestedJoin(AddIndex, {"Column1"}, R_AccRegChar, {"AccChar"}, "R_AccRegChar", JoinKind.LeftOuter),
    DevAccReg = Table.ExpandTableColumn(JoinAccReg, "R_AccRegChar", {"RegChar"}, {"RegChar"}),
    ToRegCol = Table.AddColumn(DevAccReg, "Personnalisé", each if [RegChar] = null then [Column1] else [RegChar]),
    Tri = Table.Sort(ToRegCol,{{"Index", Order.Ascending}}),
    SelectCol = Table.SelectColumns(Tri,{"Personnalisé"}),
    ToRegText = Text.Combine(Table.ToList(SelectCol))
in
    ToRegText

Enfin, on appelle cette fonction dans la requête à transformer :

👇 Téléchargez le fichier Excel en exemple pour récupérer la macro VBA et la requête PowerQuery !

📥Téléchargement

Téléchargez le classeur Excel pour ce tutoriel. Seuls votre adresse e-mail et nom vous seront demandés dans la prochaine étape. Vous recevrez le lien de téléchargement par e-mail.

Supprimer les accents

Voici 2 méthodes pour supprimer les accents dans une cellule Excel ou un champs d'une base de données, à l'aide d'une macro VBA ou d'une requête PowerQuery !
Télécharger

Envoyer le lien de téléchargement à :

Oui, je consens à recevoir la Newsletter. Je confirme avoir lu et accepté la Politique de confidentialité.

Maîtrisez l’essentiel des formules Excel

Enfin, transformez-vous en Expert d’Excel. Devenez un membre essentiel de votre équipe qui obtient des résultats rapidement. Obtenez une sécurité de l’emploi et une mobilité ascendante imbattable. Tout ce qu’il vous faut, c’est construire à partir de vos connaissances actuelles d’Excel, étape par étape. Pour cela, rejoignez le programme 👏👏 :

🥇 FORMULES EXCEL ULTIMES (2 MODULES OFFERTS)

Cliquez ici pour en savoir plus

 

Souscrivez à ma newsletter :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *