Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suppression des accents

41 réponses
Avatar
Michel NOLF
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel

10 réponses

1 2 3 4 5
Avatar
anonymousA
bonjour,

on a déjà parlé de ce truc là sur le forum mais je ne me souviens plus
quand. A priori, il ne me parait pas faisable de transformer ces
caractères directement.
Il convient de faire une lecture caractère par caractère et de
discriminer la valeur de celui-ci en fonction de son code ASCII puis de
le transformer en ce que tu souhaites.

A+

Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel




Avatar
ru-th
Salut

Au choix
venant deux parfaits inconnus

Function Virer_Accents$(Chaine$)
Dim tmp$
tmp = Trim(Chaine)
For i = 1 To Len(tmp)
x = Asc(Mid(tmp, i, 1))
Select Case x
Case 192 To 197: x = "A"
Case 200 To 203: x = "E"
Case 204 To 207: x = "I"
Case 209: x = "N"
Case 210 To 214: x = "O"
Case 217 To 220: x = "U"
Case 221: x = "Y"
Case 224 To 229: x = "a"
Case 232 To 235: x = "e"
Case 236 To 239: x = "i"
Case 241: x = "n"
Case 240, 242 To 246: x = "o"
Case 249 To 252: x = "u"
Case 253, 255: x = "y"
Case Else: x = Chr(x)
End Select
Virer_Accents = Virer_Accents & x
Next
End Function 'AV

Function SansAccents$(Chaine$)
Dim tmp$, s$
tmp = Trim(Chaine)
For i = 1 To Len(tmp)
s = Mid(tmp, i, 1)
If s Like "[ÀàÂâÈèÉéÊêËëÎîÏïÔôÖöÛûÜüYÿ]" Then
Select Case s
Case "À", "Â": s = "A"
Case "à", "â": s = "a"
Case "È", "É", "Ê", "Ë": s = "E"
Case "è", "é", "ê", "ë": s = "e"
Case "Î", "Ï": s = "I"
Case "î", "ï": s = "i"
Case "Ô", "Ö": s = "O"
Case "ô", "ö": s = "o"
Case "Û", "Ü": s = "U"
Case "û", "ü": s = "u"
Case "Y": s = "Y"
Case "ÿ": s = y
End Select
End If
SansAccents = SansAccents & s
Next
End Function 'fs

a+
rural thierry

"Michel NOLF" a écrit dans le message de
news: #
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel




Avatar
AV
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.


Pas que je sache :

Function Virer_Accents$(chaine$)'av
Dim tmp$
tmp = Trim(chaine)
For i = 1 To Len(tmp)
x = Asc(Mid(tmp, i, 1))
Select Case x
Case 192 To 197: x = "A": Case 200 To 203: x = "E"
Case 204 To 207: x = "I": Case 209: x = "N"
Case 210 To 214: x = "O": Case 217 To 220: x = "U"
Case 221: x = "Y": Case 224 To 229: x = "a"
Case 232 To 235: x = "e": Case 236 To 239: x = "i"
Case 241: x = "n": Case 240, 242 To 246: x = "o"
Case 249 To 252: x = "u": Case 253, 255: x = "y"
Case Else: x = Chr(x)
End Select
Virer_Accents = Virer_Accents & x
Next
End Function

AV

Avatar
Michel NOLF
Merci à tout le monde pour vos réponses

"Michel NOLF" a écrit dans le message de
news:%
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel




Avatar
Herdet
Bonjour Michel,
Une solution VBA un peu plus générale sans Select Case ni codes ASCII
A adapter
Cordialement
Robert Dezan
-------------------------------------------------------
Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
Car = Mid(Src, i, 1)
If InStr(1, a, Car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = Car Then Dest = Dest & Mid(b, j,
1): Exit For
Next
End If
Next
Sans_accents = Dest
End Function
------------------------------------------------------------------------
"Michel NOLF" a écrit dans le message de
news: %
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel




Avatar
Herdet
Oups, une petite erreur qui oubliait les caractères non accentués et les
chiffres

Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
car = Mid(Src, i, 1)
If InStr(1, a, car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = car Then Dest = Dest & Mid(b, j,
1): Exit For
Next
Else
Dest = Dest & car
End If
Next
Sans_accents = Dest
'---- Testé sur 0ZnÁrÄPË43ÑertÔÙdwxÛâçérðpõûÿ
End Function

"Herdet" a écrit dans le message de news:

Bonjour Michel,
Une solution VBA un peu plus générale sans Select Case ni codes ASCII
A adapter
Cordialement
Robert Dezan
-------------------------------------------------------
Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
Car = Mid(Src, i, 1)
If InStr(1, a, Car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = Car Then Dest = Dest & Mid(b, j,
1): Exit For
Next
End If
Next
Sans_accents = Dest
End Function
------------------------------------------------------------------------
"Michel NOLF" a écrit dans le message de
news: %
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères. Il
y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï
etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel








Avatar
Michel NOLF
Merci
Peut-on tremplacer la boucle "For j = 1 To Len(a)" par k=InStr(1, a, car, 0)
Mid(a, k, 1) = car Then Dest = Dest & Mid(b, k, 1)
Autre question à titre purement documentaire: en quel langue a-t-on S et Z
accentués
Merci d'avanc

"Herdet" a écrit dans le message de
news:O$
Oups, une petite erreur qui oubliait les caractères non accentués et les
chiffres

Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
car = Mid(Src, i, 1)
If InStr(1, a, car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = car Then Dest = Dest & Mid(b, j,
1): Exit For
Next
Else
Dest = Dest & car
End If
Next
Sans_accents = Dest
'---- Testé sur 0ZnÁrÄPË43ÑertÔÙdwxÛâçérðpõûÿ
End Function

"Herdet" a écrit dans le message de news:

Bonjour Michel,
Une solution VBA un peu plus générale sans Select Case ni codes ASCII
A adapter
Cordialement
Robert Dezan
-------------------------------------------------------
Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
Car = Mid(Src, i, 1)
If InStr(1, a, Car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = Car Then Dest = Dest & Mid(b,
j,


1): Exit For
Next
End If
Next
Sans_accents = Dest
End Function
------------------------------------------------------------------------
"Michel NOLF" a écrit dans le message
de


news: %
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères.
Il



y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï
etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel












Avatar
AV
Chacun aura corrigé et lu "qu'on ne peut échapper à une boucle sur la chaîne"

AV
Avatar
ru-th
Ah, voilà le prototype de raisonnement chirogourdiste :
l' aléatoirité (en Gypsien qui s'écrit de 2 façons Jspien ou gypsien puisque
datant de la même époque géologique, on aurait dit l' Avéatoirité ) du
discours sémantique !
il était question "Il y a-t-il un moyen sans être obligé de passer par un
select case"
qu'une traduction perverse ou devrais dire perAVerse !, transforme en
"qu'on ne peut échapper à une boucle sur la chaîne"
Certes Daniel M. par son Multisubstitue avait déjà étudié dès 2002 (au
moins) le phénomène de non selectcasetitude de la problèmatique susdite et
présentement évoquée, il n'empêche qu'un tel détournement sémantique ne peut
être l'oeuvre d'un esprit tourmenté par le manque de lumière dû à un séjour
cavernicole prolongé.
Je pense encore une fois par cette prise sur le fait avoir démontrer la
dangerosité de l'accoutumance de l'utilisation de sommeprod y compris dans
des domaines où on ne l'attendait point : la lecture discursive !
Et que l'on ne vienne pas me dire que je suis abscons ! (ni positif, ni
négatif, ni absolu)
;-))

--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"AV" a écrit dans le message de news:

Chacun aura corrigé et lu "qu'on ne peut échapper à une boucle sur la
chaîne"

AV




Avatar
Herdet
Bien vu, c'est sans problème
J'ai pris tous les caractères accentués avec code de 0 à 255 sans chercher
leurs utilisations potentielles
Qui peut le plus, peut le moins
J'ai aussi ajouté le ç au cas où.
Robert
---------------------------------------------------
Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿç"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyyc"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
car = Mid(Src, i, 1)
k = InStr(1, a, car, 0)
If k <> 0 Then Dest = Dest & Mid(b, k, 1) Else Dest = Dest & car
Next
Sans_accents = Dest
'---- Testé sur 0ZnÁrÄPË43ÑertÔÙdwxÛâçérðpõûÿ
End Function

"Michel NOLF" a écrit dans le message de
news: %
Merci
Peut-on tremplacer la boucle "For j = 1 To Len(a)" par k=InStr(1, a, car,
0)
Mid(a, k, 1) = car Then Dest = Dest & Mid(b, k, 1)
Autre question à titre purement documentaire: en quel langue a-t-on S et Z
accentués
Merci d'avanc

"Herdet" a écrit dans le message de
news:O$
Oups, une petite erreur qui oubliait les caractères non accentués et les
chiffres

Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
car = Mid(Src, i, 1)
If InStr(1, a, car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = car Then Dest = Dest & Mid(b,
j,
1): Exit For
Next
Else
Dest = Dest & car
End If
Next
Sans_accents = Dest
'---- Testé sur 0ZnÁrÄPË43ÑertÔÙdwxÛâçérðpõûÿ
End Function

"Herdet" a écrit dans le message de news:

Bonjour Michel,
Une solution VBA un peu plus générale sans Select Case ni codes ASCII
A adapter
Cordialement
Robert Dezan
-------------------------------------------------------
Function Sans_accents(Chaine$) ' R. Dezan
' remplacement des caractères accentués
a = "SZszYÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿ"
b = "SZszYAAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyy"
Src = Chaine$
Dest = ""
For i = 1 To Len(Src)
Car = Mid(Src, i, 1)
If InStr(1, a, Car, 0) <> 0 Then
For j = 1 To Len(a)
If Mid(a, j, 1) = Car Then Dest = Dest & Mid(b,
j,


1): Exit For
Next
End If
Next
Sans_accents = Dest
End Function
------------------------------------------------------------------------
"Michel NOLF" a écrit dans le message
de


news: %
Bonjour à tous
Je voudrais pouvoir supprimer les accents d'une chaine de caractères.
Il



y
a-t-il un moyen sans être obligé de passer par un select case é,ù,î,ï
etc.
Les caractères peuvent être en LCase ou UCase.
Merci pour votre aide
Michel
















1 2 3 4 5