Vb6 - supprimer les accents d'une chaîne

0/5 (12 avis)

Snippet vu 35 927 fois - Téléchargée 31 fois


Contenu du snippet

Suite, à une question du Forum, voici, une petite fonction pour supprimer les accents d'une chaîne.

A vous d'ajouter les autres possibilitées d'accentuations, le mécanisme étant simple à adapter à vos besoins.

Source / Exemple :


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

' 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 

' 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 demo & vbCrLf & " => " & sansAccents(demo)
End Sub

Conclusion :


++

Zlub

A voir également

Ajouter un commentaire Commentaires
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.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
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.
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 9
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é
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)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
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é)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.