XL 2016 Interdire nombre commençant par 0 (zéro) dans une Textbox

ReneDav14000

XLDnaute Occasionnel
Bonsoir le forum,
Je cherche à interdire la saisie de tous nombres commençant par un zéro dans ma TextBox (TextMdP).
Les nombres saisis doivent au format standard, pas nombre.
Quelle est la procédure s'il vous plaît ?
Merci par avance pour votre aide
 

ReneDav14000

XLDnaute Occasionnel
Bonsoir le forum, bonsoir patricktoulon et job75
Merci pour votre participation, job75 a raison, la textbox ne sera jamais vide. Par contre, j'ai oublié quelque chose d'important, la textbox ne doit contenir que des nombres de 1 à 9 et puis je dois également mettre en place un système de contrôle pour éviter les doublons de code.
Comme la textbox est limitée à 7 chiffres, cela laisse une bonne marge de risque mais on ne sait jamais.
 

patricktoulon

XLDnaute Barbatruc
re
avant de passer par une classe si c'est pour moins d'un dizaine de control pas la peine de faire une classe
le keyascci retourné dans l'event est en callback ,on peut donc le modifier dans une sub ou fonction externe a l'event

exemple
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub

'une seule sub pour les trois
Sub TextNum(KeyAscii As MSForms.ReturnInteger)
If Chr(KeyAscii) Like "[!1-9]" Or Len(ActiveControl.Value) >= 7 Then KeyAscii = 0
End Sub
 

ReneDav14000

XLDnaute Occasionnel
Bon je n'ai pas réussi à régler l'autre problème (message Espace pile insuffisant).
Pour revenir à ce qui nous concerne, je dois vérifier les doublons uniquement dans la textbox (TextMdP) à partir des données déjà saisies dans le tableau de la feuille (Accès) en colonne C. Tableau nommé List_User et la colonne [@[Mot de Passe]].
Si tu me dis que ton code correspond à ma demande, je le testerai demain, désolé, mon UF ne fonctionne pas correctement tant que je n'ai pas réglé le problème cité plus haut.
 

patricktoulon

XLDnaute Barbatruc
re
essaie donc de taper un nombre qui n'est pas dans le tableau list_user
et essaie aussi de taper 0 ou que ce soit
et essaie aussi de taper plus de 7 chiffre

VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  TextNum KeyAscii
End Sub

'une seule sub pour les trois
Sub TextNum(KeyAscii As MSForms.ReturnInteger)

If Chr(KeyAscii) Like "[!1-9]" Or Len(ActiveControl.Value) >= 7 Then KeyAscii = 0

With ActiveControl

Set cel = Range("List_User").Find(.Text & Chr(KeyAscii), lookat:=xlPart)

If cel Is Nothing Then KeyAscii = 0: .Value = ""

End With

End Sub
Lol!
 

Pièces jointes

  • demo keyblok MDP.xlsm
    20.1 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
re
ben fait la même chose sur keydown
dans un select case
conversion keycode/keyascii
et dans le case keycode=control :keycode=0
comme ca le copier/coller est interdit
si tu veux l'autoriser il faut d'abords connaître ce qu'il y a dans le clip (dataobject)et autoriser selon
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 49 To 57: keyascii = KeyCode + 48' de 1 à 9  haut du clavier
    Case 97 To 105: ' de 1 à 9  pavé numerique
    Case 17: KeyCode = 0 'touche control bloquée
    Case Else: KeyCode = 0 ' et toute les autres bloquées
    End Select
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
si on veut le ctrl+V
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
TextBox_KeyDown KeyCode, Shift
End Sub

 Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim chaineclip As String

    Select Case KeyCode

    Case 49 To 57: KeyCode = KeyCode + 48    ' de 1 à 9  haut du clavier
    
    Case 97 To 105    'juste pour garder le pavé
    
    Case 86    ' touche "V"
        If Shift = 2 Then    'si touche control appuyée
            Dim objdata As New DataObject
            With objdata
                .GetFromClipboard: chaineclip = .GetText
                If chaineclip Like "*[a-z|0]*" Then
                    .SetText "": chaineclip = "": 
                Else
                    TextBox1.Value = chaineclip: .SetText "": 
                End If
            End With
        End If
    KeyCode = 0
    Case 8:    'juste pour garder la touche back dispo
    
    Case 46:    'juste pour garder la touche suppr dispo
    
    Case Else: KeyCode = 0    '  toute les autres touches bloquées
    End Select
End Sub
 

Discussions similaires

Réponses
15
Affichages
876

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 663
dernier inscrit
ToussaintBug