|
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...
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
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
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
Beaucoup de chemins menent à Rome
Cordialement, Pierre(3stone)
|
[ Retour à la liste des sujets ]
| Recherche
Préférences
1 membre
Connectés :
( personne )
|