Enlever les accents dans vos cellules par VBA

Enlever les accents dans vos cellules par VBA
Dernière mise à jour le 05/02/2024
Temps de lecture : 4 minutes

Pour enlever les accents qui se trouve dans vos cellules, la technique suivante repose sur l'utilisation du VBA

  1. Ouvrez le Visual Basic Editor

    Depuis le menu Développeur, ouvrez le programme VBA

  2. Coller le code proposé dans cet article

    Le code suivant, couvre un grand nombre de lettres avec accents. Libre à vous d'adapter le code s'il manque des lettres particulières

  3. Appeler la fonction depuis Excel

    Grâce à ce code VBA, il va être très facile d'appeler cette fonction personnalisée directement dans une cellule

Le code VBA pour enlever les accents

  1. Ouvrez le Visual Basic Editor
Menu Visual Basic ruban Developpeur
  1. Puis vous ouvrez un Module
Insérer un module VBA
  1. Copiez le code suivant dans le Module
Public Function EnleveAccent(strMot As String) As String
'Les A
    strMot = Replace(strMot, "à", "a")
    strMot = Replace(strMot, "á", "a")
    strMot = Replace(strMot, "â", "a")
    strMot = Replace(strMot, "ã", "a")
    strMot = Replace(strMot, "å", "a")
    strMot = Replace(strMot, "ä", "a")
    strMot = Replace(strMot, "À", "A")
    strMot = Replace(strMot, "Á", "A")
    strMot = Replace(strMot, "Â", "A")
    strMot = Replace(strMot, "Ã", "A")
    strMot = Replace(strMot, "Ä", "A")
    strMot = Replace(strMot, "Å", "A")

' Les E
    strMot = Replace(strMot, "é", "e")
    strMot = Replace(strMot, "è", "e")
    strMot = Replace(strMot, "ê", "e")
    strMot = Replace(strMot, "ë", "e")
    strMot = Replace(strMot, "É", "E")
    strMot = Replace(strMot, "È", "E")
    strMot = Replace(strMot, "Ê", "E")
    strMot = Replace(strMot, "Ë", "E")

'Les I
    strMot = Replace(strMot, "î", "i")
    strMot = Replace(strMot, "ï", "i")
    strMot = Replace(strMot, "ì", "i")
    strMot = Replace(strMot, "í", "i")
    strMot = Replace(strMot, "Î", "I")
    strMot = Replace(strMot, "Ï", "I")
    strMot = Replace(strMot, "Ì", "I")
    strMot = Replace(strMot, "Í", "I")
    
'Les O
    strMot = Replace(strMot, "ò", "o")
    strMot = Replace(strMot, "ó", "o")
    strMot = Replace(strMot, "ô", "o")
    strMot = Replace(strMot, "õ", "o")
    strMot = Replace(strMot, "ö", "o")
    strMot = Replace(strMot, "ø", "o")
    strMot = Replace(strMot, "Ô", "O")
    strMot = Replace(strMot, "Ò", "O")
    strMot = Replace(strMot, "Ó", "O")
    strMot = Replace(strMot, "Õ", "O")
    strMot = Replace(strMot, "Ö", "O")
    strMot = Replace(strMot, "Ø", "O")

'Les O
    strMot = Replace(strMot, "ò", "o")
    strMot = Replace(strMot, "ó", "o")
    strMot = Replace(strMot, "ô", "o")
    strMot = Replace(strMot, "õ", "o")
    strMot = Replace(strMot, "ö", "o")
    strMot = Replace(strMot, "ø", "o")
    strMot = Replace(strMot, "Ô", "O")
    strMot = Replace(strMot, "Ò", "O")
    strMot = Replace(strMot, "Ó", "O")
    strMot = Replace(strMot, "Õ", "O")
    strMot = Replace(strMot, "Ö", "O")
    strMot = Replace(strMot, "Ø", "O")

'Les U
    strMot = Replace(strMot, "ù", "u")
    strMot = Replace(strMot, "ú", "u")
    strMot = Replace(strMot, "ü", "u")
    strMot = Replace(strMot, "û", "u")
    strMot = Replace(strMot, "Ù", "U")
    strMot = Replace(strMot, "Ù", "U")
    strMot = Replace(strMot, "Û", "U")
    strMot = Replace(strMot, "Ü", "U")
    
'Les autres lettres
    strMot = Replace(strMot, "ç", "c")
    strMot = Replace(strMot, "Ç", "C")
    strMot = Replace(strMot, "ñ", "n")
    strMot = Replace(strMot, "Ñ", "N")
    strMot = Replace(strMot, "š", "s")
    strMot = Replace(strMot, "Š", "S")
    strMot = Replace(strMot, "ý", "y")
    strMot = Replace(strMot, "ÿ", "y")
    strMot = Replace(strMot, "Ý", "Y")
    strMot = Replace(strMot, "Ÿ", "Y")
    strMot = Replace(strMot, "ž", "z")
    strMot = Replace(strMot, "Ž", "Z")

    EnleveAccent = strMot
End Function

Explications du code

La première chose à remarquer c'est que nous avons écrit une fonction (Function) et non pas une procédure (Sub). En effet, la différence entre une procédure et une fonction c'est qu'une fonction retourne un résultat. Et ce résultat est contenu dans le nom de la fonction.

Ensuite, nous passons en paramètre le contenu de la cellule et chaque caractère est "lu".

Si le caractère fait partie de la liste des caractères à remplacer, on lui attribue la lettre de remplacement.

Il y a cependant un problème pour les caractères très spéciaux, comme les caractères ż, ł ou ń. En effet, ces caractères sont au-delà de la position 255 dans la classification ASCII. Or, le Visual Basic Editor, ne permet pas d'afficher les caractères au-delà du caractère 255. Mais on peut contourner le problème en créant une fonction dans Power Query.

Table ASCII

Utilisation dans Excel

Pour appeler une fonction personnalisée dans Excel c'est extrêmement simple. Il suffit tout simplement d'écrire le signe égal, comme pour une fonction standard, et d'écrire le nom de la fonction personnalisée.

=EnleveAccent(A2)

Appel de la fonction personnalise pour enlever les accents

Et ensuite, il ne reste plus qu'à recopier pour les autres cellules afin d'enlever les accents.

Enlever les accents

2 Comments

  1. Sli BEN
    31/03/2024 @ 15:28

    Merci beaucoup, c'est très utile.

    Reply

  2. Azertix
    27/11/2022 @ 20:37

    Bonjour. Je tente d'utiliser votre fonction mais Excel m'affiche une erreur "Erreur de compilation : Variable non définie".
    J'ai placé la fonction dans une module et cette dernière est appelée depuis une autre procédure publique située dans le même module.
    Je l'utilise comme suit :
    [...]
    'On parcourt la liste des clients
    For iCount = 3 To dernLig
    If wb.Worksheets("Clients").Range("C" & iCount).Value = NOMCli Or wb.Worksheets("Clients").Range("C" & iCount).Value = EnleveAccent(NOMCli) Or EnleveAccent(wb.Worksheets("Clients").Range("C" & iCount).Value) = NOMCli Then 'Recherche le nom du client dans la colonne C (avec tolérance sur les accents)
    If wb.Worksheets("Clients").Range("D" & iCount).Value = PnomCli Or wb.Worksheets("Clients").Range("D" & iCount).Value = EnleveAccent(PnomCli) Or EnleveAccent(wb.Worksheets("Clients").Range("D" & iCount).Value) = PnomCli Then 'Vérifie que le prénom coïncide aussi (avec tolérance sur les accents)
    numCli = iCount 'Le numéro de client est égal au numéro de ligne en cours
    trouvé = "ok"
    Exit For
    End If
    End If
    Next iCount
    [...]

    Merci par avance =)

    Reply

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

MVP_logo_2017

Enlever les accents dans vos cellules par VBA

Reading time: 4 minutes
Dernière mise à jour le 05/02/2024

Pour enlever les accents qui se trouve dans vos cellules, la technique suivante repose sur l'utilisation du VBA

  1. Ouvrez le Visual Basic Editor

    Depuis le menu Développeur, ouvrez le programme VBA

  2. Coller le code proposé dans cet article

    Le code suivant, couvre un grand nombre de lettres avec accents. Libre à vous d'adapter le code s'il manque des lettres particulières

  3. Appeler la fonction depuis Excel

    Grâce à ce code VBA, il va être très facile d'appeler cette fonction personnalisée directement dans une cellule

Le code VBA pour enlever les accents

  1. Ouvrez le Visual Basic Editor
Menu Visual Basic ruban Developpeur
  1. Puis vous ouvrez un Module
Insérer un module VBA
  1. Copiez le code suivant dans le Module
Public Function EnleveAccent(strMot As String) As String
'Les A
    strMot = Replace(strMot, "à", "a")
    strMot = Replace(strMot, "á", "a")
    strMot = Replace(strMot, "â", "a")
    strMot = Replace(strMot, "ã", "a")
    strMot = Replace(strMot, "å", "a")
    strMot = Replace(strMot, "ä", "a")
    strMot = Replace(strMot, "À", "A")
    strMot = Replace(strMot, "Á", "A")
    strMot = Replace(strMot, "Â", "A")
    strMot = Replace(strMot, "Ã", "A")
    strMot = Replace(strMot, "Ä", "A")
    strMot = Replace(strMot, "Å", "A")

' Les E
    strMot = Replace(strMot, "é", "e")
    strMot = Replace(strMot, "è", "e")
    strMot = Replace(strMot, "ê", "e")
    strMot = Replace(strMot, "ë", "e")
    strMot = Replace(strMot, "É", "E")
    strMot = Replace(strMot, "È", "E")
    strMot = Replace(strMot, "Ê", "E")
    strMot = Replace(strMot, "Ë", "E")

'Les I
    strMot = Replace(strMot, "î", "i")
    strMot = Replace(strMot, "ï", "i")
    strMot = Replace(strMot, "ì", "i")
    strMot = Replace(strMot, "í", "i")
    strMot = Replace(strMot, "Î", "I")
    strMot = Replace(strMot, "Ï", "I")
    strMot = Replace(strMot, "Ì", "I")
    strMot = Replace(strMot, "Í", "I")
    
'Les O
    strMot = Replace(strMot, "ò", "o")
    strMot = Replace(strMot, "ó", "o")
    strMot = Replace(strMot, "ô", "o")
    strMot = Replace(strMot, "õ", "o")
    strMot = Replace(strMot, "ö", "o")
    strMot = Replace(strMot, "ø", "o")
    strMot = Replace(strMot, "Ô", "O")
    strMot = Replace(strMot, "Ò", "O")
    strMot = Replace(strMot, "Ó", "O")
    strMot = Replace(strMot, "Õ", "O")
    strMot = Replace(strMot, "Ö", "O")
    strMot = Replace(strMot, "Ø", "O")

'Les O
    strMot = Replace(strMot, "ò", "o")
    strMot = Replace(strMot, "ó", "o")
    strMot = Replace(strMot, "ô", "o")
    strMot = Replace(strMot, "õ", "o")
    strMot = Replace(strMot, "ö", "o")
    strMot = Replace(strMot, "ø", "o")
    strMot = Replace(strMot, "Ô", "O")
    strMot = Replace(strMot, "Ò", "O")
    strMot = Replace(strMot, "Ó", "O")
    strMot = Replace(strMot, "Õ", "O")
    strMot = Replace(strMot, "Ö", "O")
    strMot = Replace(strMot, "Ø", "O")

'Les U
    strMot = Replace(strMot, "ù", "u")
    strMot = Replace(strMot, "ú", "u")
    strMot = Replace(strMot, "ü", "u")
    strMot = Replace(strMot, "û", "u")
    strMot = Replace(strMot, "Ù", "U")
    strMot = Replace(strMot, "Ù", "U")
    strMot = Replace(strMot, "Û", "U")
    strMot = Replace(strMot, "Ü", "U")
    
'Les autres lettres
    strMot = Replace(strMot, "ç", "c")
    strMot = Replace(strMot, "Ç", "C")
    strMot = Replace(strMot, "ñ", "n")
    strMot = Replace(strMot, "Ñ", "N")
    strMot = Replace(strMot, "š", "s")
    strMot = Replace(strMot, "Š", "S")
    strMot = Replace(strMot, "ý", "y")
    strMot = Replace(strMot, "ÿ", "y")
    strMot = Replace(strMot, "Ý", "Y")
    strMot = Replace(strMot, "Ÿ", "Y")
    strMot = Replace(strMot, "ž", "z")
    strMot = Replace(strMot, "Ž", "Z")

    EnleveAccent = strMot
End Function

Explications du code

La première chose à remarquer c'est que nous avons écrit une fonction (Function) et non pas une procédure (Sub). En effet, la différence entre une procédure et une fonction c'est qu'une fonction retourne un résultat. Et ce résultat est contenu dans le nom de la fonction.

Ensuite, nous passons en paramètre le contenu de la cellule et chaque caractère est "lu".

Si le caractère fait partie de la liste des caractères à remplacer, on lui attribue la lettre de remplacement.

Il y a cependant un problème pour les caractères très spéciaux, comme les caractères ż, ł ou ń. En effet, ces caractères sont au-delà de la position 255 dans la classification ASCII. Or, le Visual Basic Editor, ne permet pas d'afficher les caractères au-delà du caractère 255. Mais on peut contourner le problème en créant une fonction dans Power Query.

Table ASCII

Utilisation dans Excel

Pour appeler une fonction personnalisée dans Excel c'est extrêmement simple. Il suffit tout simplement d'écrire le signe égal, comme pour une fonction standard, et d'écrire le nom de la fonction personnalisée.

=EnleveAccent(A2)

Appel de la fonction personnalise pour enlever les accents

Et ensuite, il ne reste plus qu'à recopier pour les autres cellules afin d'enlever les accents.

Enlever les accents

2 Comments

  1. Sli BEN
    31/03/2024 @ 15:28

    Merci beaucoup, c'est très utile.

    Reply

  2. Azertix
    27/11/2022 @ 20:37

    Bonjour. Je tente d'utiliser votre fonction mais Excel m'affiche une erreur "Erreur de compilation : Variable non définie".
    J'ai placé la fonction dans une module et cette dernière est appelée depuis une autre procédure publique située dans le même module.
    Je l'utilise comme suit :
    [...]
    'On parcourt la liste des clients
    For iCount = 3 To dernLig
    If wb.Worksheets("Clients").Range("C" & iCount).Value = NOMCli Or wb.Worksheets("Clients").Range("C" & iCount).Value = EnleveAccent(NOMCli) Or EnleveAccent(wb.Worksheets("Clients").Range("C" & iCount).Value) = NOMCli Then 'Recherche le nom du client dans la colonne C (avec tolérance sur les accents)
    If wb.Worksheets("Clients").Range("D" & iCount).Value = PnomCli Or wb.Worksheets("Clients").Range("D" & iCount).Value = EnleveAccent(PnomCli) Or EnleveAccent(wb.Worksheets("Clients").Range("D" & iCount).Value) = PnomCli Then 'Vérifie que le prénom coïncide aussi (avec tolérance sur les accents)
    numCli = iCount 'Le numéro de client est égal au numéro de ligne en cours
    trouvé = "ok"
    Exit For
    End If
    End If
    Next iCount
    [...]

    Merci par avance =)

    Reply

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.