Oter les accents dans une liste de noms dans un tableau

Bonjour à tous,

Peut-être ai-je mal formulé ma demande, quoi qu'il en soit, je n'ai pas trouvé ce dont j'avais besoin.

Quelqu'un saurait-il comment faire pour remplacer les caractères accentués par des lettre sans accent ?

Merci d'avance.

Olivier.

PS. : sans passer par du VBA si possible.

Bonjour catdog,

si c'est un traitement à faire qu'un fois utilise la fonction remplacer inclus dans excel (ctrl+h) et vas-y accent par accent.

Merci Math...

C'est ce que je m'étais résolu à faire... Mais j'étais persuadé qu'il y avait une fonction que je ne retrouvais pas qui me l'aurait permis...

Merci encore.

Olivier

une fonction que je connais serait plusieurs SUBSTITUE() d'imbriqué ensemble ( limité à 8 ) ou un traitement vba mais j'ai vu que tu voulais éviter.

Oui, en effet, je ne suis pas assez calé en vba...

Mais je te remercie quand même.

Bonne continuation.

Olivier

Bonsoir à tous,

Plage à adapter,

Sub SupAccent()
Dim Cel As Range
    For Each Cel In Range("a5:b15") '*** plage à régler
        Cel = WorksheetFunction.Substitute(Cel, "à", "a")
        Cel = WorksheetFunction.Substitute(Cel, "é", "e")
        Cel = WorksheetFunction.Substitute(Cel, "è", "e")
        Cel = WorksheetFunction.Substitute(Cel, "ê", "e")
        Cel = WorksheetFunction.Substitute(Cel, "î", "i")
        Cel = WorksheetFunction.Substitute(Cel, "Ï", "i")
        Cel = WorksheetFunction.Substitute(Cel, "ô", "o")
        Cel = WorksheetFunction.Substitute(Cel, "ù", "u")
        Cel = WorksheetFunction.Substitute(Cel, "û", "u")
    Next Cel
End Sub

Tu peux ajouter les majuscules,

on doit pouvoir faire mieux !

Claude.

bonjour à tous

j'ai essayé par formule mais substitue n'aime pas les matricielles.

voici une fonction personnalisée à placer dans un module standard

Function Sans_Accent(ByVal Target As Range) As String
    Const accent As String = "éèêëiîïàâùûô"
    Const lettre As String = "eeeeiiiaauuo"
    Application.Volatile
    Dim i As Integer
    Sans_Accent = Target
    For i = 1 To Len(accent)
        If InStr(Sans_Accent, Mid(accent, i, 1)) > 0 Then
            Sans_Accent = VBA.Replace(Sans_Accent, VBA.Mid(accent, i, 1), VBA.Mid(lettre, i, 1))
        End If
    Next i
End Function

utilisation : en b2 : la formule :

=Sans_Accent(A2)

Bonsoir,

Une petite sub....

Sub Remplace_Accent()
Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", _
                "î", "ï", "ô", "ö", "ù", "û", "ü")
SansAccent = Array("a", "a", "a", "e", "e", "e", "e", _
                    "i", "i", "o", "o", "u", "u", "u")
With Cells.SpecialCells(xlCellTypeConstants, 23)
    For i = 0 To 13
        .Replace Accent(i), SansAccent(i)
    Next i
End With
End Sub

Bonsoir à tous,

Toujours la forme Felix !

Je ne pige pas tout dans ton code, peux-tu m'expliquer :

  • le 23 dans le With
  • le i (0 To 13), pourquoi 13 ?
la macro à l'air de balayer toute le feuille ?

Les variables peuvent-elles restées du type variant ?

Je remarque que dans tes codes, tu mets rarement les Dim, c'est voulu ?

Bonne soirée

Claude.

Bonsoir, Maître

- le 23 dans le With

With Cells.SpecialCells(xlCellTypeConstants, 23) 

23 signifie les cellules contenant des constantes, donc les cellules non vides, et ne contenant pas de formules...

- le i (0 To 13), pourquoi 13 ?

Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", _
                "î", "ï", "ô", "ö", "ù", "û", "ü") 

Comme tu le vois, le Tableau Accent (ou SansAccent) comporte 14 éléments.

Cependant, un Tableau VBA commence toujours par l'indice 0...

Sauf si tu mets en début de module Option Base 1

Donc, pour balayer tout le tableau, il faut commencer à 0, et aller jusqu'à 13, ce qui fait 14 éléments, CQFD

la macro à l'air de balayer toute le feuille ?

Oui, tout à fait, via la fonction Edition/Remplacer, je ne balaye pas cellule par cellule, mais je prends en compte toutes les cellules "constantes"

Les variables peuvent-elles restées du type variant ?

Dans mon code, les seules variables sont des tableaux, donc de type Variant, à part le "i", qu'on pourrait mettre de type Byte

Je remarque que dans tes codes, tu mets rarement les Dim, c'est voulu ?

Au début, je déclarais rarement mes variables....

Mais je me soigne, et de plus en plus, tu peux voir dans mes codes, des déclarations...

Regarde bien, j'ai fait des efforts...

Bonne soirée

Re felix,

Quelle puissance ce : With Cells.SpecialCells(xlCellTypeConstants, 23)

Grace à tes explications, je l'ai testé un peu dans tous les sens (c'est fou ce qu'on peut

faire avec !).

Là, on monte d'un cran en niveau VBA

Ta seule récompense, un grand Merci

Amicalement

Claude.

Juste pour le plaisir,

Voici la même amplifiée avec les majuscules (incluant le "ç" et le "Ç" )

    Sub Remplace_Accent_2()
    '
    ' lettres accentuées minuscules, majuscules et ç/Ç
    '
    Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", _
    "î", "ï", "ô", "ö", "ù", "û", "ü", "ç", _
    "À", "Â", "Ä", "É", "È", "Ê", "Ë", _
    "Î", "Ï", "Ô", "Ö", "Ù", "Û", "Ü", "Ç")
    SansAccent = Array("a", "a", "a", "e", "e", "e", "e", _
    "i", "i", "o", "o", "u", "u", "u", "c", _
    "A", "A", "A", "E", "E", "E", "E", _
    "I", "I", "O", "O", "U", "U", "U", "C")
    With Cells.SpecialCells(xlCellTypeConstants, 23)
        For i = 0 To 28
            .Replace Accent(i), SansAccent(i)
        Next i
    End With
    End Sub

Hum, erreur de comptage dans l'array.

Voici la bonne formule commentée (Merci Felix pour les explications).

Sub Remplace_Accent_2()
'
' lettres accentuées minuscules, majuscules et ç/Ç
'
Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", _
    "î", "ï", "ô", "ö", "ù", "û", "ü", "ç", _
    "À", "Â", "Ä", "É", "È", "Ê", "Ë", _
    "Î", "Ï", "Ô", "Ö", "Ù", "Û", "Ü", "Ç")
SansAccent = Array("a", "a", "a", "e", "e", "e", "e", _
    "i", "i", "o", "o", "u", "u", "u", "c", _
    "A", "A", "A", "E", "E", "E", "E", _
    "I", "I", "O", "O", "U", "U", "U", "C")
With Cells.SpecialCells(xlCellTypeConstants, 23)
   ' 23 signifie les cellules contenant des constantes,
    ' donc les cellules non vides
    ' et ne contenant pas de formules...
    ' Merci Felix pour ces explications
    '
    For i = 0 To 29
    ' Array de 30 caractères commençant à 0 => 29
        .Replace Accent(i), SansAccent(i)
    Next i
End With
End Sub
Rechercher des sujets similaires à "oter accents liste noms tableau"