VB6 - SUPPRIMER LES ACCENTS D'UNE CHAÎNE

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 6 sept. 2005 à 08:39
cs_lagoutelle Messages postés 1 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 27 juillet 2011 - 27 juil. 2011 à 16:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33666-vb6-supprimer-les-accents-d-une-chaine

cs_lagoutelle Messages postés 1 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 27 juillet 2011
27 juil. 2011 à 16:56
Bonjour,
Pour que les minuscules accentuées ne soient pas remplacées par des Majuscules
Sous Access, l'Option Compare Database étant défaut, il faut s'assurer
que l'Option Compare Binary soit indiquée en entète du module .

Option Explicit
Option Compare Binary

' La fonction :

Private Function sansAccents(ByRef s As String) As String
Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
Const noaccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"

Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noaccent, i, 1))
'Debug.Print lettre & " " & Mid$(noaccent, i, 1)
'Debug.Print sansAccents
End If
Next i

End Function

' Exemple d'utilisation :
Private Sub Form_Load()
Dim demo As String
demo = "L'été, je vais sur l'île où y'a la fête jusqu'à l'aube et" & _
" je hurle: YÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÙÚÛÜùúûü ... "
Debug.Print "Origine => " & demo
Debug.Print "Majuscule => " & UCase(demo)
Debug.Print "O Accent => " & sansAccents(demo)
Debug.Print "O Accent M => " & UCase(sansAccents(demo))

End Sub

Cordialement
LG
GMY Messages postés 6 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 24 juin 2013
4 août 2010 à 10:39
Bonjour,

Proposition d'un petit ajout et d'une légère restructuration dans la définition de la conversion au niveau des Y :

Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüŸÿÑñÇç"
Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuYyNnCc"

C'est une fonction très élégante pour résoudre ce problème.

GM
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 déc. 2009 à 07:39
pense a effectuer le changement également quand tu colles du texte dans ta box ^^
meliokan Messages postés 1 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 13 décembre 2009
13 déc. 2009 à 09:47
Excellent programme.

je l'ai adapté pour supprimer les accents en temps réel dans une textbox.

...et ca fonctionne parfaitement.

Bravo
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 juil. 2008 à 11:42
salut,

copie les lignes 1 à 16 dans un module standard
remplace 'Const' par 'Private Const' (lignes 2 et 3)
remplace 'Private Function' par 'Public Function' (ligne 6)

ensuite dans ton classeur, disons que ta chaine avec accents est en A1
en A2 tu mets '=sansAccents(A1)'

tout çà sans les apostrophes bien sûr

le code est alors valable pour VBA
++
offsprings007 Messages postés 1 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008
7 juil. 2008 à 10:50
Bonjour, je suis nouveau sur le forum et je souhaiterais appliquer ce code dans mon classeur Excel. Cependant, je n'ai encore jamais utilisé VBA. J'ai tenté d'insérer le code dans un module et dans "This Workbook" mais ensuite, la fonction n'est pas reconnue sous Excel. Pourriez-vous m'aiguiller ?

Merci d'avance.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 sept. 2005 à 07:40
Bien que cela ne change rien sur le principe, ni sur l'algo, coté performance, on preferera :

' La fonction :
Private Function sansAccents(ByRef s As String) As String
Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noAccent, i, 1))
End If
Next i
End Function

En effet, il est preferable de passer les chaînes de caractère par référence.
le calcul du Max est inutile ici : l'instruction de fin de boucle n'est pas réévalué dans les boucles For (c'est le cas avec un While)

Pour la casse, pas grand chose à dire.... les constantes ont été modifiées, et tiennent compte des majuscules... (belle réactivité)
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
6 sept. 2005 à 13:49
Je vais tester cela, si ca marche, c'est top !
(j'avais déjà constaté que les recherches de chaine ne tiennent pas compte de la casse, mais je vais ressayer avec Replace)
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
6 sept. 2005 à 12:51
patrice99 : Il suffit de définir avec les majuscules et c'est bon par exemple le ÀÂÄ
sebmafate : oki c'est modifié
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 sept. 2005 à 08:59
moi ce qui me dérange le plus c'est bien les $, % et autres & dans la déclaration des variables. ca enlèvre à la compréhension du code.
bref préférez toujours les string, long... c'est plus long à écrire mais on comprends plus vite.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
6 sept. 2005 à 08:39
La programmation est élégante, mais cette fonction présente l'inconvénient de ne pas conserver les majuscules, si je ne me trompe. Et du coup, on est obligé de faire une série de if pour en tenir compte.