Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

HELP FONCTION ? vérifier chaque caractère...

2 réponses
Avatar
soniagaubert
Bonjour =E0 tous,
Bon, la mort dans l'=E2me, la toujours aussi laborieuse apprentie
sorci=E8re se r=E9sout une fois de plus =E0 venir demander de l'aide aux
"grands de ce monde" ;o)
Voil=E0, j'ai besoin de "formater", normaliser un peu l'=E9criture d'un
des champs de ma base (qui identifie en fait des r=E9pertoires associ=E9s
=E0 celle-ci...)
Ne doivent figurer dans ces noms que chiffres et lettres (non
accentu=E9es) et comme s=E9parateur on ne tol=E8re que l'undescore et le
tiret

Je sais =E0 peu pr=E8s comment faire pour remplacer les caract=E8res en
questions : dans un premier temps on se contentera de faire du champ =E0
champ (car - et je vous en passe - il faut en m=EAme temps aller
v=E9rifier qu'il existe un r=E9pertoire correspondant sur le serveur,
modifier son nom, etc...)

Mais ce que je voudrais c'est cr=E9er une fonction qui permette de faire
une v=E9rification pr=E9alable au lancement de la modification :
parcourir donc le texte contenu dans le champ et d=E9tecter tout
caract=E8re "interdit"...
J'ai =E9t=E9 regarder du c=F4t=E9 de l'Ascii et voil=E0 ce que j'ai
pi=E8trement pondu : comme c'est ma premi=E8re fonction, la moindre des
choses c'est que cela ne fonctionne pas, n'est-ce pas ? (euh, pas tr=E8s
s=FBr de la pertinence de mes d=E9clarations...)

Function SignalCaract(MonChamp As String)
'pour d=E9terminer si un champ contient un des caract=E8res interdits
dans les
'noms de fichiers =E0 exporter sur le Web (uniquement autoris=E9s :
chiffres, lettres
'sauf caract=E8res accentu=E9s, undescore et le tiret (tol=E9r=E9)
'doit ramener un nombre : si celui-ci est sup=E9rieur =E0 z=E9ro :
existe au moins un mauvais caract=E8re

Dim n As Integer '(ou Byte ?)
Dim i As Integer
Dim caract As String
For i =3D 1 To Len(MonChamp)
caract =3D Mid(MonChamp, i, 1)
Select Case Asc(MonChamp)
Case 45: n =3D n
Case 48 To 57: n =3D n
Case 65 To 90: n =3D n
Case 95: n =3D n
Case 97 To 122: n =3D n
Case Else: n =3D n + 1
End Select
Next i
SignalCaract =3D n
End Function

et dans mon =E9v=E8nement je v=E9rifie la valeur de signalCaract comme
suit :

Dim signal As Integer
signal =3D SignalCaract(Me![AutreRefProjet])
If signal > 0 Then

Donc, merci d'avance aux bonnes =E2mes... (et je sais qu'il n'en manque
pas sur le forum ;o)
SoniaG

2 réponses

Avatar
soniagaubert
Bon, décidément faudra que je sois un peu plus persévérante avant
de sonner le tocsin... j'ai trouvé mon erreur :
For i = 1 To Len(Caract) et non pas : For i = 1 To Len(MonChamp) !
Donc, tout est ok !
Excusez pour le dérangement...
SoniaG
Avatar
Gilbert
Bonjour,
Tu peux faire plus rapide avec la fonction Instr
Par exemple:

Public Function ControleTexte(Chaine As String) As Boolean
ControleTexte = True
If ((InStr(1, Chaine, ".", 1) > 0) Or (InStr(1, Chaine, "[", 1) > 0) Or
(InStr(1, Chaine, "]", 1) > 0) Or (InStr(1, Chaine, "!", 1) > 0)) Then
ControleTexte = False
End If
End Function


Gilbert


a écrit dans le message de
news:
Bon, décidément faudra que je sois un peu plus persévérante avant
de sonner le tocsin... j'ai trouvé mon erreur :
For i = 1 To Len(Caract) et non pas : For i = 1 To Len(MonChamp) !
Donc, tout est ok !
Excusez pour le dérangement...
SoniaG