OVH Cloud OVH Cloud

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
Misange
Arghhh!
Lucky Luke a encore frappé!
Et moi qui avais déjà mis en ligne ces deux nouvelles fonctions, la
tienne et celle de RD-MP...
M'en fous, j'ai beau être rantanplan ben celle-ci aussi est déjà en
ligne na !
Et testée même. C'est de loin la plus rapide et je n'ai constaté aucune
erreur Michel...
Adoptée !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 17/02/2005 02:42, :

Salut Michel,


Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule sans
erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai de
smiley)



Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== >
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As
Long, _
ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== >
Pour Misange : FoldString permet de faire différentes tranformations
d'une chaîne de caractères, en particulier de scinder les caractères
accentués en deux caractères successifs (la lettre sans accent et
l'accent sans lettre). Ainsi, "Du mélèze brûle dans l'âtre" devient "Du
me´le`ze bru^le dans l'a^tre". Après, il suffit de parcourir cette
chaîne en éliminant tous les accents.

Laurent



Avatar
AV
Oupsss AV !!!
me semble-t-il "el argentino @ jean naimar" n'est point le broutard !!!!
je pencherai pour une Lyonnaise... ;o)))


Pffff.... comment veux-tu que je m'y retrouve ?

AV

Avatar
Alain CROS
Bonjour.

Cette fonction très intéressante ne fonctionne pas chez moi et me retourne une chaîne vide.
Après investigation, l'erreur retournée = 120 et un petit coup de formatmessage me donne:
Cette fonction n'est valide qu'en mode Win32.
Mon OS ---> Win98.
Qu'est ce que je peux faire docteur?

Alain CROS

"Laurent Longre" a écrit dans le message de news: #

Salut Michel,

Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule sans
erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai de
smiley)


Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== >
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As Long, _
ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== >
Pour Misange : FoldString permet de faire différentes tranformations d'une
chaîne de caractères, en particulier de scinder les caractères accentués en deux
caractères successifs (la lettre sans accent et l'accent sans lettre). Ainsi,
"Du mélèze brûle dans l'âtre" devient "Du me´le`ze bru^le dans l'a^tre". Après,
il suffit de parcourir cette chaîne en éliminant tous les accents.

Laurent



Avatar
Michel Pierron
Bonjour Alain;
Rien; il te faut un OS type NT
MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Cette fonction très intéressante ne fonctionne pas chez moi et me retourne
une chaîne vide.

Après investigation, l'erreur retournée = 120 et un petit coup de
formatmessage me donne:

Cette fonction n'est valide qu'en mode Win32.
Mon OS ---> Win98.
Qu'est ce que je peux faire docteur?

Alain CROS

"Laurent Longre" a écrit dans le message de news:
#


Salut Michel,

Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule
sans



erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai
de



smiley)


Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== > >
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As
Long, _


ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== > >
Pour Misange : FoldString permet de faire différentes tranformations
d'une


chaîne de caractères, en particulier de scinder les caractères accentués
en deux


caractères successifs (la lettre sans accent et l'accent sans lettre).
Ainsi,


"Du mélèze brûle dans l'âtre" devient "Du me´le`ze bru^le dans l'a^tre".
Après,


il suffit de parcourir cette chaîne en éliminant tous les accents.

Laurent







Avatar
Michel Pierron
Ce Laurent, il me surleculte; il a toujours une carte en réserve qu'il
dévoile si on l'y pousse;
Quitte à passer pour un pisse-frois, la fonction FoldString ignore un
certain nombre de caractères; par exemple, elle ignore entre autres:
ð que personnellement, j'utilise assez peu, mais aussi o qu'il m'arrive
d'utiliser (rarement, je le concède).

Testé avec la chaîne:
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖOSÙÚÛÜÝYZàáâãäåæçèéêëìíîïðñòóôõöosùúûüýÿz"
MP

"Laurent Longre" a écrit dans le message de
news:%

Salut Michel,

Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule sans
erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai
de


smiley)


Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== >
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As
Long, _

ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== >
Pour Misange : FoldString permet de faire différentes tranformations d'une
chaîne de caractères, en particulier de scinder les caractères accentués
en deux

caractères successifs (la lettre sans accent et l'accent sans lettre).
Ainsi,

"Du mélèze brûle dans l'âtre" devient "Du me´le`ze bru^le dans l'a^tre".
Après,

il suffit de parcourir cette chaîne en éliminant tous les accents.

Laurent



Avatar
Alain CROS
Merci.

Donc pas besoin que je me prenne la tête.

Une autre petite question en passant.
Mon fichier d'aide comporte un bouton Quick Info qui me donne pour FoldString:

Windows NT Yes
Win95 No
Win32s Yes

Mon Win98 correspond au Win95.

Mais la différence entre Windows NT et Win32s m'échappe.

Si tu as une piste?

Alain CROS

"Michel Pierron" a écrit dans le message de news: OBVx$
Bonjour Alain;
Rien; il te faut un OS type NT
MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Cette fonction très intéressante ne fonctionne pas chez moi et me retourne
une chaîne vide.

Après investigation, l'erreur retournée = 120 et un petit coup de
formatmessage me donne:

Cette fonction n'est valide qu'en mode Win32.
Mon OS ---> Win98.
Qu'est ce que je peux faire docteur?




Avatar
Starwing
Encore une chance... la dernière copie que j'ai fait remonte à peu près à
deux ans, et quasiment tout à changer. De ce fait, ça va être difficile de
prouver que je l'ai imoprimer à partir de là.... ;-))
--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing

--
"GD" a écrit dans le message de
news:
Starwing wrote:

Moi, mes bouquins, ../.. ../.., je les imprimes via Internet....
Profites-en rapidement notre misange n'a pas encore interdit la recopie

;o)))
@+


--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing







Avatar
Michel Pierron
Re Alain;
Cela date du temps de JPS quand Win32s permettait de faire tourner des
applications 32 bit avec Windows 3.1 et Windows pour Workgroups 3.11.
MP

"Alain CROS" a écrit dans le message de
news:%
Merci.

Donc pas besoin que je me prenne la tête.

Une autre petite question en passant.
Mon fichier d'aide comporte un bouton Quick Info qui me donne pour
FoldString:


Windows NT Yes
Win95 No
Win32s Yes

Mon Win98 correspond au Win95.

Mais la différence entre Windows NT et Win32s m'échappe.

Si tu as une piste?

Alain CROS

"Michel Pierron" a écrit dans le message de news:
OBVx$

Bonjour Alain;
Rien; il te faut un OS type NT
MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Cette fonction très intéressante ne fonctionne pas chez moi et me
retourne



une chaîne vide.
Après investigation, l'erreur retournée = 120 et un petit coup de
formatmessage me donne:

Cette fonction n'est valide qu'en mode Win32.
Mon OS ---> Win98.
Qu'est ce que je peux faire docteur?








Avatar
Michel Pierron
P'tain d'OE; il fallait lire: "mais aussi le e dans l'o" qu'il m'arrive
d'utiliser (rarement, je le concède).
MP

"Michel Pierron" a écrit dans le message de
news:
Ce Laurent, il me surleculte; il a toujours une carte en réserve qu'il
dévoile si on l'y pousse;
Quitte à passer pour un pisse-frois, la fonction FoldString ignore un
certain nombre de caractères; par exemple, elle ignore entre autres:
ð que personnellement, j'utilise assez peu, mais aussi o qu'il m'arrive
d'utiliser (rarement, je le concède).

Testé avec la chaîne:
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖOSÙÚÛÜÝYZàáâãäåæçèéêëìíîïðñòóôõöosùúûüýÿz"
MP

"Laurent Longre" a écrit dans le message de
news:%

Salut Michel,

Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule
sans



erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai
de


smiley)


Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== > >
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As
Long, _

ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== > >
Pour Misange : FoldString permet de faire différentes tranformations
d'une


chaîne de caractères, en particulier de scinder les caractères accentués
en deux

caractères successifs (la lettre sans accent et l'accent sans lettre).
Ainsi,

"Du mélèze brûle dans l'âtre" devient "Du me´le`ze bru^le dans l'a^tre".
Après,

il suffit de parcourir cette chaîne en éliminant tous les accents.

Laurent






Avatar
Herdet
Bonjour Michel,
Je vois que Misange n'a pas trainé pour alimenter Disciplus et c'est très
bien.
Il faudrait toutefois faire un petit ajustement car si l'on ne veut plus
voir de caractères bizarres dans les textes utilisés sur des systèmes
anglais, il faut aussi remplacer les caractères liés tels que o, O, æ, Æ
J'ai donc renommé la fonction en "Sans_fioritures" et rajouté une ligne de
code pour pallier ce problème
Amicalement
Robert Dezan
NB : ==> Encore un petit peu de travail de mise à jour, Florence

'---------------------------------------------------------------
Sub Test()
MsgBox
Sans_fioritures$("ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿç")
MsgBox
Sans_fioritures$("ÆÀæÁÂÃOÄÅÈÉÊËÌÍÎÏÑÒÆÓÔÕÖÙÚÛÜÝàáâãäåèoéêëìíîïðñòóôõöùúûüýÿc")
MsgBox Sans_fioritures$("0ZÆnÁrÄPOË43ÑeZaZaærtÔÙdwoxÛâçéræðpõûÿ")
End Sub
'-----------------------------------------------------------------
Function Sans_fioritures$(Chaine$) ' R. Dezan
' remplacement des caractères accentués et liés tels que o,O,æ,Æ
a$ = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ"
b$ = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC"
Chaine = Replace(Replace(Replace(Replace(Chaine, "o", "oe"), "O",
"OE"), "æ", "ae"), "Æ", "AE")
For I% = 1 To Len(Chaine)
u% = InStr(1, a, Mid(Chaine, I, 1), 0)
If u Then Mid(Chaine, I, 1) = Mid(b, u, 1)
Next I
Sans_fioritures$ = Chaine
End Function
'---------------------------------------------------------------------
'--- ou pour faire plus long.... si on aime !
'Chaine = Replace(Chaine, "Æ", "AE")
'Chaine = Replace(Chaine, "æ", "ae")
'Chaine = Replace(Chaine, "O", "OE")
'Chaine = Replace(Chaine, "o", "oe")
' ... idem pour tous les autres caractères exotiques
-----------------------------------------------------------------

"Michel Pierron" a écrit dans le message de news:

Ce Laurent, il me surleculte; il a toujours une carte en réserve qu'il
dévoile si on l'y pousse;
Quitte à passer pour un pisse-frois, la fonction FoldString ignore un
certain nombre de caractères; par exemple, elle ignore entre autres:
ð que personnellement, j'utilise assez peu, mais aussi o qu'il m'arrive
d'utiliser (rarement, je le concède).

Testé avec la chaîne:
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖOSÙÚÛÜÝYZàáâãäåæçèéêëìíîïðñòóôõöosùúûüýÿz"
MP

"Laurent Longre" a écrit dans le message de
news:%

Salut Michel,

Est-ce que je peux ajouter un grain de sel(poivre)? Après avoir tester
100000 "SansAccents" la mehode de MD est la plus rapide et la seule
sans
erreur. Désolé si il ya a un motif de bisbille !!! :) (premier essai
de


smiley)


Oups, je ne savais pas qu'il s'agissait de faire des benchmarks ;-)

On peut accélérer très nettement la version "API" comme ça :

' ========================== >>
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _
(ByVal dwMapFlags As Byte, ByVal lpSrcStr As Long, ByVal cchSrc As
Long, _

ByVal lpDestStr As Long, ByVal cchdest As Long) As Long

Function SANSACCENTS(Texte As String) As String

Dim I As Integer
SANSACCENTS = Space(Len(Texte))
For I = 0 To Len(Texte) * 2 - 2 Step 2
FoldString &H40, StrPtr(Texte) + I, 1, StrPtr(SANSACCENTS) + I, 1
Next I

End Function

' ========================== >>
Pour Misange : FoldString permet de faire différentes tranformations
d'une
chaîne de caractères, en particulier de scinder les caractères accentués
en deux

caractères successifs (la lettre sans accent et l'accent sans lettre).
Ainsi,

"Du mélèze brûle dans l'âtre" devient "Du me´le`ze bru^le dans l'a^tre".
Après,

il suffit de parcourir cette chaîne en éliminant tous les accents.

Laurent






1 2 3 4 5