Visites

   visiteurs

   visiteurs en ligne

Sujet n°269 Caractères spéciaux interdits
    par marsouin le 15/09/2009 : 19:34

Bonjour Pierre,

Il y a bien longtemps que je n'avais pas eu de question à te poser.

Donc, nouveau projet et nouvelle question.

Je souhaites créer un mot de passe, via un formulaire, pour accéder à mon application.

Toutefois, j'aimerais interdire tous les caractères spéciaux tel que "à, ã, ^, $­ etc.

Alors, il y a la solution de taper sur le clavier et via : MsgBox KeyAscii, j'aurais le code concernant la touche saisie. Le problème est que cela représente beaucoup de caractères.

J'ai déjà défni la liste des caractères à interdire.

J'envisageais de les saisir dans une table, parcourir la table et définir le code Ascii, mais je ne sais pas comment faire le code VBA qui définira le code Ascii en fonction du caractère qui sera lu dans la table.

Comment faire, Ô mon mentor.

Merci beaucoup

Marsouin


Réponse n° 1 par 3Stone le 15/09/2009 : 23:56
Bonjour,

Je ne vois pas pourquoi tu veux limiter les caractères ?
Etant donné que (il me semble) c'est toi qui défini ce mot de passe, il suffit que tu utilises ce que tu souhaites. Pour l'utilisateur, il est préférable qu'il ne sache pas d'avance que certains caractères ne se trouvent pas dans le mot de passe.

A moins que tu souhaites laisser à l'utilisateur le choix du mot de passe et dans ce cas, il suffit de créer une chaine de caractères qui contiendra tous les caractères permis.

Dim strCaracteresPermis As String
strCaracteresPermis = "abcdefghi..."

Lors de la saisie, un simple "if instr(strCaracteresPermis) Then..."

Un exemple de formulaire est donné par le copain Hervé, inutile de se répéter... wink

Cordialement,
Pierre(3stone)

Réponse n° 2 par marsouin le 16/09/2009 : 20:53

Bonjour Pierre,

C'est exactement ce que je veux faire. Je souhaites que l'utilisateur puisse changer son mot de passe.

Toutefois, avec ton code :

D'une part, je ne sais où le placer, sur touche appuyée, touche relachée. Je manque de précision.

De plus, ton code me bug. Ne serais ce pas :

InStr(Me.NouveauMotPasse, strCaracteresPermis)

Merci de tes précisions.

Marsouin

Réponse n° 3 par 3Stone le 16/09/2009 : 23:06
Bonjour,


Dixit...
De plus, ton code me bug.


C'était juste une indication pour montrer une méthode possible biggrin

Tu peux faire également de cette façon...

Imaginons que ta zone de texte se nomme "txtPassWord"

Tu peux alors mettre dans la Sub de l'événement "Sur touche appuyée" de cette zone de texte le code suivant:


Private Sub txtPassWord_KeyDown(KeyCode As Integer, Shift As Integer)
    '// Limiter les caractères saisis
    '// de a=65 à z=95
    '// de 0=96 à 9=105
    '// backspace=8

    If (KeyCode < 65 Or KeyCode > 95) _
       And (KeyCode < 96 Or KeyCode > 105) _
       And (KeyCode <> 8) Then
       
        KeyCode = 0
       
    End If
End Sub



Les commentaires expliquent la méthode wink

Cordialement,
Pierre(3stone)

Réponse n° 4 par marsouin le 17/09/2009 : 18:37

Bonjour Pierre,

Comme toujours, tu as réponse à tous mes problèmes.

Pour ta peine, je vais mettre un petit mot dans ton livre d'or.

Parallèlement, j'avais finalement trouvé un autre code qui revient à ce que tu m'avais conseiller en début de sujet.

Private Sub NouveauMotPasse_KeyPress(KeyAscii As Integer)

If InStr("1234567890abcdefghijklmnopqrstuvwxyz" & Chr(8) & Chr(9), Chr$­(KeyAscii)) = 0 Then
   MsgBox "Caractère interdit" & vbLf & _
            "Seules les lettres de l'alphabet ainsi que les chiffres de 0 à 9 sont autorisés."
    KeyAscii = 0
End If

Ensuite pour vérifier le mot de passe et sa confirmation, y compris la casse, j'ai trouvé ceci à mettre dans un module.

Option Compare Binary 'Binary au lie de DataBase

Function CompareTxt(Mot1 As String, Mot2 As String) As Integer
    If Mot1 = Mot2 Then 'Si mot identique (casse  comprise)
        CompareTxt = 1
    Else
        CompareTxt = 0
    End If
End Function

Ensuite,

If CompareTxt(Me.NouveauMotPasse, Me.MotPasseConfirme)=1 then

me.Btn_Ok.Enabled=True

endif

Merci de bien vouloir me donner ton avis sur ces codes.

A bientôt

Cordialement

Marsouin


 

Réponse n° 5 par 3Stone le 17/09/2009 : 19:22
Bonjour,


Dixit...
Merci de bien vouloir me donner ton avis sur ces codes.


La première obligation d'un code, est qu'il remplisse son rôle, sans beuguer...

Ensuite, à performance équivalente, il vaut mieux utiliser un code que l'on comprend et que l'on maîtrise - qu'un code que l'on a copier sans comprendre sa mécanique wink

Beaucoup de chemins menent à Rome biggrin

Cordialement,
Pierre(3stone)

[ Retour à la liste des sujets ]

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut