Mise en forme de saisie utilisateur

0/5 (9 avis)

Vue 4 666 fois - Téléchargée 248 fois

Description

La saisie "libre" pose souvent des problèmes, du fait des "variations" orthographiques, d'un utilisateur à l'autre.
La fonction suivante, très simple (voire simplistes) permet de :
- remplacer tout caractère accentué par son équivalent sans accent (fonction "SansAccent")
- supprimer tout blanc (fonction "SansBlanc")
Elle n'esr pas limitative (on aurait pu, par exemple remplacer les "ç" par "c") etc..

Source / Exemple :


' REDLUPUS 2004 : Petites procédures de mise en forme d'un texte (typiquement :
' saisie utilisateur) pour s'affranchir de certaines variations orthographiques.

' =============================================================
  Public Function MiseEnForme(ByVal S As String, _
                     Optional ByVal C As String = "AB") As String
' -------------------------------------------------------------
' mise en forme du texte saisi, suivant une chaîne de traitement
' (optionnelle) fournie
'   S       chaîne à mettre en forme
'   C       traitement de mise en forme
'               par défaut : "AB"
'                   "A"     suppression des accents
'                   "B"     suppression de tous les blancs
' ATTENTION : La chaîne d'origine est convertie en minuscules.
' =============================================================
Const O As String = "àâäèéêëïîôöüùû"        ' caractères accentués à remplacer
Const N As String = "aaaeeeeiioouuu"        ' caractères de remplacement

Dim I As Byte                       ' indice de boucle (sur "O")
Dim K As Byte                       ' indice de boucle (sur "C")

For K = 1 To Len(C)
    Select Case UCase$(Mid$(C, K, 1))
        Case "A":
            For I = 1 To Len(O)
                Let S = Replace(LCase$(S), _
                                Mid$(O, I, 1), _
                                Mid$(N, I, 1), , , vbTextCompare)
                Next I
        Case "B":
            Let S = Replace(Trim$(S), " ", vbNullString, , , vbTextCompare)
        '... Ici, ajout d'autres traitements possibles, suivant les besoins
        End Select
    Next K
MiseEnForme = S
End Function

Conclusion :


Merci pour les commentaires. Pourquoi ne pas utiliser "Replace" ? A vrai dire, je n'en sais rien... Alzheimer me guette !
Alors, j'ai revu ma copie, en essayant de ne plus enfoncer des portes ouvertes.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
angelo30 Messages postés 1 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 13 février 2007
13 févr. 2007 à 10:24
Toutes ces sources sont pas mal, mais comment les utiliser?...
That is the question!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
4 oct. 2005 à 23:48
étrange, cette facon de spécifier plusieurs traitements facultatifs
pourquoi ne pas avoir fait 4 fonctions distinctes ?

Sans documentation, ou sans regarder le code, il est en fait impossible de savoir comment utiliser ta fonction : A B C ou D cela n'indique rien sur le traitment effectué en aval...

j'ajouterais que le nom des variable n'a rien d'exlpicite (K O S ... )

sur le code en lui même je n'ai rien a dire. Je salue même l'utilisation de VbNullString au lieu de ""
geeko74 Messages postés 1 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 4 octobre 2005
4 oct. 2005 à 17:27
Petite modif pour corriger un bug et qq amélioration :

' =============================================================
Public Function MiseEnForme(ByVal S As String, _
Optional ByVal C As String = "ABCD") As String
' -------------------------------------------------------------
' mise en forme du texte saisi, suivant une chaîne de traitement
' (optionnelle) fournie
' S chaîne à mettre en forme
' C traitement de mise en forme
' par défaut : "AB"
' "A" suppression des accents
' "B" suppression de tous les blancs
' "C" suppression de tous les °
' "D" suppression de tous les .
' Const O As String "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ" ' caractères accentués à remplacer"
Const N As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ' caractères de remplacement"

Dim i As Byte ' indice de boucle (sur "O")
Dim K As Byte ' indice de boucle (sur "C")

For K = 1 To Len(C)
Select Case UCase$(Mid$(C, K, 1))
Case "A":
For i = 1 To Len(O)
Let S = Replace(S, _
Mid$(O, i, 1), _
Mid$(N, i, 1), , , vbBinaryCompare)
Next i
Case "B":
Let S = Replace(Trim$(S), " ", vbNullString, , , vbTextCompare)
Case "C"
Let S = Replace(S, "°", vbNullString, , , vbTextCompare)
Case "D"
Let S = Replace(S, ".", vbNullString, , , vbTextCompare)
End Select
Next K
MiseEnForme = S

End Function

J'ai ajouté des caratères accentués.
Il me semble qu'il y a la liste complète.
Dans Case "A", j'ai enlevé (pour mon utilisation perso) la convertion en minuscule et changé vbTextCompare par vbBinaryCompare pour que les majuscules accentuée restent majuscule et le minuscules accentuées reste minuscule.
Y'a 2 case supplémentaires pour mon utilisation perso.
Testé et utilisé sous Access 2003
RedLupus Messages postés 5 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 17 août 2004
15 août 2004 à 09:35
Merci à toi "idefixfix". Le code (et le zip) ont été modifiés, mais je vois toujours l'ancien... un peu de temps peut-être...
Il est clair que ce n'est pas "length", mais "len". Concernant "mid", je n'utilise pas access 97, mais j'ai un bouquin dessus et, effectivement, cette fonction n'est pas reconnue. J'ai donc ajouté une petite fonction de substitution (voir code "access 97 : ..."). Comme, par ailleurs, j'avais besoin de "Min" et "Max" et qu'il semble que ces fonctions ne soient pas non plus implémentées sous acces (mais, bon, à vérifier) j'ai ajouté aussi les quelques lignes nécessaires.
J'espère que cela te servira. N'hésite pas à me faire savoir si tu as d'autres problèmes.
idefixfix Messages postés 1 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 10 août 2004
10 août 2004 à 17:31
Bonjour, je suis fort intéressé par ta source et j'ai donc décidé de l'essayer sur un base access 97 et je n'ai pas réussi a la faire fonctionner
J'ai des messages d'erreur de variable non défini (length, mid etc...)
Comme tu dois t'en douter je suis débutant, et ma question est : peut on adapter ta source a access ou dois je activer ou déclarer des trucs dans le module ?
Je t'en remercie vivement par avance
Afficher les 9 commentaires

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.