Vb6 - supprimer les accents d'une chaîne

Soyez le premier à donner votre avis sur cette source.

Snippet vu 33 514 fois - Téléchargée 29 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
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
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
Modérateur
Dernière intervention
14 février 2014
32 -
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
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
2 -
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
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
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
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
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.