Controler format textbox

p.pat27

XLDnaute Junior
Bonjour au forum

Après plusieure heures de recherche dans les nombreux fils sur les formats des textbox, je ne trouve toujours pas ce que je veux !! (je suis peut être trop compliqué :D)

Dans un textbox, je demande la saisie d'un numéro sous la forme "1028E123"
Tant que la saisie ne correspond pas à ce format j'efface le numéro et redonne le focus à la textbox après un message d'erreur.
J'arrive à limiter la longueur, à effacer si pas correct, mais n'arrive pas à ce que le format soit respecté (4 chiffres, 1 lettre, 3 chiffres),ni à redonner le focus à textbox (curseur clignotant).

Pouvez vous m'aider SVP

Merci par avance
 

mromain

XLDnaute Barbatruc
Re : Controler format textbox

Bonjour p.pat27, tototiti,


Vu que c'est fait, je le mets...
Cette solution est beaucoup moins élégante que celle de tototiti. Cependant, la vérification s'effectue à chaque saisie de caractère et empêche les mauvaises saisies.
VB:
Private Sub TextBox1_Change()
'1028E123
Dim nbCar As Long, caractereSaisi As String, mauvaiseSaisie As Boolean

    'récupérer la longueur du texte saisi
    nbCar = Len(TextBox1.Text)
    
    'si la TextBox est vide, quitter la procédure
    If nbCar = 0 Then Exit Sub
    
    'récupérer le dernier caractère saisi dans la TextBox
    caractereSaisi = Mid(TextBox1.Text, nbCar, 1)
    
    'si il y a moins de 5 caractères et que le dernier caractère n'est pas numérique
    If nbCar < 5 And Not IsNumeric(caractereSaisi) Then
        mauvaiseSaisie = True
    
    'sinon, si il y a 5 caractères
    ElseIf nbCar = 5 Then
        'si le dernier caractaire saisi est une lettre minuscule
        If Asc(caractereSaisi) >= 97 And Asc(caractereSaisi) <= 122 Then
            'le mettre en majuscule et quitter la procédure
            TextBox1.Text = Left(TextBox1.Text, 4) & UCase(caractereSaisi)
            Exit Sub
            
        'sinon, si le dernier caractère n'est pas une lettre majuscule
        ElseIf Asc(caractereSaisi) > 90 Or Asc(caractereSaisi) < 65 Then
            mauvaiseSaisie = True
        End If
    
    'sinon, si il y a plus de 5 caractères et que le dernier n'est pas numérique
    ElseIf nbCar > 5 And Not IsNumeric(caractereSaisi) Then
        mauvaiseSaisie = True
    End If
    
    'si il y a eu une mauvaise saisie ou plus de 8 caractères, enlever le dernier caractère saisi
    If mauvaiseSaisie Or nbCar > 8 Then TextBox1.Text = Mid(TextBox1.Text, 1, nbCar - 1)
    
End Sub
a+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Controler format textbox

bonjour p.pat27

Salut Tototiti

Un autre essai

Code:
Private Sub TextBox1_Change()
If Len(TextBox1) < 5 Then
  On Error Resume Next
  x = CInt(TextBox1)
  If Err.Number <> 0 Then
    TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    Exit Sub
  End If
  On Error GoTo 0
Else
  If Len(TextBox1) = 5 Then
    If Asc(Right(TextBox1, 1)) < 65 Or Asc(Right(TextBox1, 1)) > 90 Then
       TextBox1 = Left(TextBox1, 4)
    End If
  Else
    If Len(TextBox1) = 8 Then
     SendKeys "{ENTER}"
    Else
    On Error Resume Next
      x = CInt(Mid(TextBox1, 6))
      If Err.Number <> 0 Then
         TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
         Exit Sub
      End If
    On Error GoTo 0
    End If
  End If
End If
End Sub

Edit: Salut mromain
 

mromain

XLDnaute Barbatruc
Re : Controler format textbox

Re, bonjour pierrejean ;)

une autre solution (basée sur celle de tototiti)
VB:
Private Sub TextBox1_Change()
Dim pattern As String
    
    'si la TextBox est vide, quitter la procédure
    If TextBox1.Text = "" Then Exit Sub
    
    'générer le "pattern" en fonction de la longeur du texte saisi dans la TextBox
    pattern = Mid("#######", 1, IIf(Len(TextBox1.Text) > 4, Len(TextBox1.Text) + 4, Len(TextBox1.Text)))
    
    'si le texte saisi dans la TextBox ne correspond pas au "pattern", enlever le dernier caractère saisi
    If Not TextBox1.Text Like pattern Then TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1)
    
End Sub
a+
 
Dernière édition:

p.pat27

XLDnaute Junior
Re : Controler format textbox

Re tototiti

Ta solution marche une fois écrite dans mon fichier, c'était pas le cas dans ton exemple (le curseur ne clignotait pas dans la textbox) , j'ai répondu trop vite :rolleyes:

Et merci a tous pour vos solutions, elles sont un peu moins simples que tototiti mais riches en enseignement, je les garde sous le coude.
 

Discussions similaires

Réponses
15
Affichages
516

Statistiques des forums

Discussions
312 355
Messages
2 087 550
Membres
103 588
dernier inscrit
Tom59300Tom