Mise en forme de saisie utilisateur

Soyez le premier à donner votre avis sur cette source.

Vue 4 516 fois - Téléchargée 240 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
Messages postés
1
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
13 février 2007

Toutes ces sources sont pas mal, mais comment les utiliser?...
That is the question!
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
é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 ""
Messages postés
1
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
4 octobre 2005

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
Messages postés
5
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
17 août 2004

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.
Messages postés
1
Date d'inscription
vendredi 7 mai 2004
Statut
Membre
Dernière intervention
10 août 2004

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.