TextBox - Format 1 Caractere et 7 chiffres
Bonjour à tous,
Je suis bloqué sur un petit problème de format pour une de mes TextBox
J'ai une textbox qui me permet de renseigner des numéro de dossier.
Chaque dossier a un numéro unique et doit obligatoirement être au format suivant
- 8 Caractères Max
- le premier Caractères doit être obligatoirement une lettre en majuscule (donc de A à Z)
- les 7 Caractères suivant des Chiffres
J'arrive parfaitement à limiter le nombre de caractère à 8 avec la fonction "MaxLenght = 8
J'arrive à faire en sorte de saisir uniquement des chiffres avec le code suivant
[...]
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End If
[...]
J'arrive aussi a mettre le premier caractère en Majuscule, avec le code suivant :
[...]
Dim Saisie As String
Saisie = TextBox01.Text
TextBox01.Text = UCase(Mid(Saisie, 1, 1)) & Mid$(st, 2, Len(Saisie))
TextBox01.SelStart = Len(Saisie)
[...]
mais je bloque sur la combinaison de tout ça...
pourriez vous me venir en aide s'il vous plait ou me donner des pistes ? ?
d'avance merci à vous
Bonsoir,
voici un (des) code que vous pouvez mettre sur votre TextBox :
Public En_cours As Boolean
Private Sub TextBox1_Change()
If En_cours = False Then
En_cours = True
' vérification du premier caractère
If Len(TextBox1) = 1 Then
If (Asc(TextBox1) >= 97 And Asc(TextBox1) <= 122) Or (Asc(TextBox1) >= 65 And Asc(TextBox1) <= 90) Then
TextBox1.Value = UCase(TextBox1)
Exit Sub
Else
TextBox1 = ""
Exit Sub
End If
' vérification de la longueur
ElseIf Len(TextBox1) > 8 Then
TextBox1 = Left(TextBox1, 8)
Exit Sub
' vérification que ce sont des chiffres
ElseIf Asc(Right(TextBox1, 1)) >= 48 And Asc(Right(TextBox1, 1)) <= 56 Then
En_cours = False
Exit Sub
' sinon on enlève la dernière "entrée"
Else
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
Exit Sub
End If
Else
En_cours = False
End If
End SubPrincipe :
on teste si le premier caractère est une lettre, si c'est le cas on la passe en majuscule, sinon on efface, ensuite on teste la longueur total, si elle dépasse 8 alors on la réduit à 8, ensuite on vérifie que les caractères après le premier sont bien des chiffres, si ce n'est pas le cas on efface la dernière entrée, sinon on efface la dernière entrée.
Le fait de changer la valeur du TextBox fait le la SUB TextBox_Change est relancée, afin que les tests ne soient pas une nouvelle fois effectués, une "porte" En_cours est gérée afin d'autoriser l'accès aux tests ou pas.
@ bientôt
LouReeD
Ho la classe !! merci LouReed !!!!
Je vais décortiquer le code (avec tes explication en dessous ca va aider) et le tester de ce pas !!
Je viens de tester le code, il marche à la perfection !!
Encore une fois mille merci à toi !!!!
De plus grâce à tes commentaires dans le code et ton explication sur le post, j'ai compris ce que tu as fait sans aucunes difficultés
Simple information complémentaire
Tu as de ton côté, au niveau de ton code, tu contrôles que la longueur maximum ne dépasse pas 8 caractères.
Dans mon code au niveau de mon "UserForm_Initialize()", j'ai positionné la longueur max de mon TextBox "Reférence Dossier" à 8 avec le code REF_DOSSIER.MaxLength = 8
Du coup, il y a un "double contrôle" et/ou restriction.
D'un point de vue "efficacité",qu'elle pratique est la mieux ?
Le fait d'avoir ce double contrôle n'est il pas "gênant"?
merci à vous pour votre futur réponse
Bonsoir,
Merci pour votre merci !
En fait du coup vous pouvez supprimer le test de longueur, c'est plus propre.
@ bientôt
LouReeD