IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Forcer un utilisateur a saisir [a-z] dans une txtbox


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 52
    Points : 30
    Points
    30
    Par défaut Forcer un utilisateur a saisir [a-z] dans une txtbox
    Bonjour,

    j'ai un pti probleme avec les codes ascii...

    pti topo vite fait :

    j'ai un formulaire de recherche avec une textbox 'nom'. Cette txtbox sert a faire une recherche par nom... qui devient une clause de ma SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clause = " WHERE nom LIKE " & chr(34) "*" & Me.nom.Value & "*" & chr (34) & ";"
    le probleme c'est que si une personne saisie " ,ma SQL ne veut plus rien dire et genère une erreur, donc j'ai vu qu'on pouvait forcer l'utilisateur a ne pas utilser des caractere en passant par l'ASCII et j'ai fait un pti code ... qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Private Sub nom_Change()
     
    Select Case keyAscii
     'Autotriser ces valeurs Ascii : 65 à 90 et 97 à 122
     
     Case 65 To 90     'majuscule  [A-Z]
     
     Case 97 To 122   'minuscule [a-z]
     
     
     Case Else
       MsgBox "Ce caractère " & keyAscii & " est interdit.", vbInformation
       keyAscii = 0
       Me.nom.Value = ""
     
    End Select
     
    End Sub
    Sur chaque caractere la msgbox s'affiche...

    Je ne sais pas d'ou vient l'erreur et s'il existe une autre solution...
    J'avais pensé a un intervalle da valeur dans un If mais j'ai pas trouvé comment lécrire...

    Merci pour votre aide !!!

  2. #2
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut Re: Forcer un utilisateur a saisir [a-z] dans une txtbox
    Bonjour, Fabrice,

    1- pour empêcher la saisie du caractère " (double guillemet = Chr(34)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Nom_KeyPress(KeyAscii As Integer)
        If KeyAscii = 34 Then
            Beep                'signale une touche interdite
            KeyAscii = 0     'annule la touche
        End If
    End Sub
    Il faut l'évènement KeyPress (sur touche enfoncée), pas Change, pour que le paramètre KeyAscii soit défini.

    Cela veut dire aussi que tu n'as pas mis "Option Explicit" en tête de chaque module : à mettre obligatoirement, pour qu'Access te signale des erreurs de ce type (ici, la variable KeyAscii n'est pas définie -> erreur de syntaxe).

    Mieux, pour accepter les " dans le texte, tu peux les remplacer par 2 * " :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        'double chaque guillemet double, s'il y en a
        Clause = Replace(Me.nom, chr(34), chr(34) & chr(34))
        Clause = " WHERE nom LIKE " & chr(34) "*" & Clause & "*" & chr (34) & ";"
    Ça doit marcher.

    Enfin, essaye de ne jamais utiliser de nom de contrôle ou de champ de table qui risque de correspondre à un mot réservé du langage (comme "nom"). Renomme ce contrôle "NomQuelqueChose", pour éviter des erreurs très difficiles à trouver...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 52
    Points : 30
    Points
    30
    Par défaut
    Salut Papy Turbo,

    merci pour ta réponse qui m'a bien aidé,
    voila ce que je fais:

    j'ai rajouté "Option Explicit" au debut de mon module
    et j'ai mis le code sur l'evenement "KeyPress".
    Maintenant mon code marche a merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Private Sub nom_KeyPress(KeyAscii As Integer)
     
    Select Case KeyAscii
     
     Case Is = 8    ' backspace (effacer)
     Case Is = 32   ' -
     Case Is = 45   'espace
     Case 65 To 90  '[A-Z]
     Case 97 To 122 '[a-z]
     
     'Pour tout autre touche appuyée...
     Case Else
       MsgBox "Ce caractère est interdit.", vbInformation
       KeyAscii = 0
     
    End Select
     
    End Sub
    FAbrice

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer l'utilisateur a saisir du numerique dans un input type="text"
    Par scraly dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 02/06/2016, 21h30
  2. Réponses: 5
    Dernier message: 15/04/2011, 11h53
  3. Forcer la taille de x image contenu dans une class
    Par mael94420 dans le forum jQuery
    Réponses: 2
    Dernier message: 12/06/2009, 06h55
  4. Saisir des données dans une stringGrid
    Par kroma23 dans le forum Débuter
    Réponses: 2
    Dernier message: 26/05/2009, 15h01
  5. Réponses: 0
    Dernier message: 24/02/2008, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo