Bonsoir,
Dans une chaine de caractères je souhaite transformer les caractères accentués, par exemple transformer :
é en e
ê en e
ù en u
ç en c
...
Avez vous quelques idées à me proposer
Merci
PPz
Bonsoir,
Dans une chaine de caractères je souhaite transformer les caractères accentués, par exemple transformer :
é en e
ê en e
ù en u
ç en c
...
Avez vous quelques idées à me proposer
Merci
PPz
Bonjour
Ce forum dispose d'une moteur de recherche.
Je viens de l'utiliser et --->>
https://www.developpez.net/forums/d1...es-caracteres/
![]()
Ceci dit :
je n'utiliserais personnellement :
- ni la fonction montrée de l'Api de Windows (elle peut être problématique dans certains cas)
- ni le code proposé par kiki29 (sujet à lenteur)
Je propose ce code, plus long (en lignes de code) mais sans aucun doute plus performant en matière de vitesse d'exécution ******.
une fonction :
Appelable (exemple) ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Function ote_accents(ch As String) As String Dim titi() As Byte titi = StrConv(ch, vbFromUnicode) For i = 0 To UBound(titi) Select Case titi(i) Case Is < 192 Case 232 To 235: titi(i) = 101 'e Case 224 To 229: titi(i) = 97 ' a Case 249 To 252: titi(i) = 117 ' u Case 236 To 239: titi(i) = 105 ' i Case 242 To 246: titi(i) = 111 ' o Case 253, 255: titi(i) = 121 'y Case 241: titi(i) = 110 'n Case 200 To 203: titi(i) = 69 'E Case 192 To 197: titi(i) = 65 ' A Case 217 To 220: titi(i) = 85 ' U Case 204 To 207: titi(i) = 73 ' I Case 210 To 214: titi(i) = 79 ' O Case 221: titi(i) = 89 'Y Case 209: titi(i) = 78 ' N End Select Next ote_accents = StrConv(titi, vbUnicode) End Function
L'ordre que j'ai choisi pour les clauses dans le bloc select case n'est pas fortuit. Ne pas le modifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim toto As String toto = "bbbbbÁÂÃÄÅÇÈÉÊËszezÌÍÎÏffÑÒÓÔÕÖÙÚÛÜÝàeeeáâãäåçèféêëìíîïñòeeóôõöùúrrrûüýrrÿ" MsgBox ote_accents(toto)
EDIT : ****** -->> je viens de tester mon code --->> à peine 7 centièmes de secondes pour traiter un million de chaînes de 74 caractères pourtant "truffées" d'accents, y compris les plus rarement susceptibles d'être présents (j'ai carrément testé avec la chaîne toto de mon code !). La durée aurait été beaucoup plus courte avec des chaînes moins "étranges".![]()
Bravo pour ce code unparia !
Utilisation ingénieuse de StrConv et du select Case dans un ordre précis.
Je récupère pour mettre dans mes tablettes !
Je remonterais juste le traitement des E et A majuscules avant celui des y et n minuscules (je pense qu'il est plus courant de rencontrer, dans la langue française, des É ou Á que des ñ ou ý).
Mais ça ne doit pas changer significativement la performance du code.
Encore merci et bravo pour cette contribution.
bonjour,
pourquoi veux replacer les accent? pour un envoi de mail?
si oui, envoie ton mail au format HTML é=é!
https://www.developpez.net/forums/d1...o/#post8187229
Dernière modification par Invité ; 02/03/2018 à 11h19.
Bonjour antonysansh
Je ne mérite pas vraiment un bravo, que j'adresserais plus volontiers à celui qui a développé la fonction StrConv, que j'utilise assez souvent de manières diverses.
Mon seul "mérite" est donc humblement d'avoir pensé à l'utiliser.
Bonjour,
Merci unparia pour ce code très efficace.
Peux tu me dire pourquoi il faut passer par des caractères unicode ?
Juste un petit détail, je vais ajouter la transformation de ç en c (c'est le 231).
Je cherche à manipuler les caractères d'un texte dans le cadre de jeux et de la résolution d'énigmes.
Par exemple prendre le 1er caractère d'une phrase, le 2nd de la phrase suivante, .... le 25 eme de la phrase 25 bien sur les espaces, points, virgules, -, _ , ... ne comptent pas. Puis faire un anagramme avec les lettres ainsi trouvées.
Dans un premier temps je me suis contenté de retenir les lettres entre 65 à 90 et de 97 à 122 en ASCII mais les lettres avec accent étaient effacées d'où l'idée de transformer les lettres avec accent en lettres sans accents.
Il me reste encore une difficulté avec les lettres œ Œ æ Æ qui comptent pour deux. Pour l'instant je me suis contenté d'un message invitant à faire la correction à la main car la résolution des énigmes est en temps limité.
A+
PPz
Ouvre ton aide interne VBA sur la fonction StrConv.Peux tu me dire pourquoi il faut passer par des caractères unicode ?
Ben ... suffit d'analyser mon code et --->>Juste un petit détail, je vais ajouter la transformation de ç en c (c'est le 231).
ajoute cette clause après le "o" :
et celle-ci après le "O"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Case 231: titi(i) = 99 'c
Code : Sélectionner tout - Visualiser dans une fenêtre à part Case 199: titi(i) = 67 ' C
Il ne te viendrait même pas à l'idée de commencer, avant même mon traitement, par remplacer "Œ" et "Æ" par "OE" & "AE" ? (utilisation toute bête de la fonction Replace) !Il me reste encore une difficulté avec les lettres œ Œ æ Æ qui comptent pour deux
Prière de libérer maintenant cette discussion (un clic sur le tag RESOLU)
Partager