Formatage de txtBox à l'aide de masques personnalisables

Description


'Soyez indulgents, c'est ma première source...

'Sur une Form, placer un txtBox nommé txt(Index) et suivre les commentaires ci-dessous. _
Cela permet un formatage conditionnel de la saisie selon un masque que vous _
définissez vous même. 1 fonction et une procédure. _
Le ZIP comporte en plus une procédure pour faire un dégradé de couleur horizontal _
ou vertical à l'aide des codes RGB de la couleur de départ et de celle d'arrivée.

Function TexteAvecMask(ctxt As Control, Keycode As Integer)

'Cette fonction est à utiliser dans le KeyUP du Control txtBox (ici txt(Index)) selon la syntaxe suivante :

'Me.txt(Index).Text = TexteAvecMask(fMain.txt(Index), Keycode)

'Il faut la faire suivre de la ligne suivante qui replace le curseur à la fin de la saisie :

'Me.txt(Index).SelStart = Len(Me.txt(Index))
'______________________________________________________________________________________________

Dim Masque$

'Je défini le masque. Dans cet exemple il est dans le Tag du Control TXT _
On peut mettre le masque ailleurs que dans le Tag. Il peut se trouver n'importe où _
il suffit de le chercher où il est !
Masque$ = ctxt.Tag

'S'il n'y a pas de masque, je sors
If Masque$ = "" Then Exit Function

'Longueur du texte déjà tapé
Dim Longueur As Long
Dim Texte$
Texte$ = ctxt.Text
Longueur = Len(Texte$)
If Longueur = 0 Then Exit Function

Dim str$, CarSuivant$
Dim Touche$

'Touche que je viens de taper
Touche$ = Chr(Keycode)

'Je limite la saisie à la longueur du Masque
If Longueur > Len(Masque$) Then
  TexteAvecMask = Left(Texte$, Len(Texte$) - 1)
  Exit Function
End If

'str sert à comparer le caractère saisi avec le caractère du masque
str = Mid(Masque$, Longueur, 1)

'Je vérifie si le caractère suivant du masque est un chiffre, une lettre ou un autre caractère
CarSuivant$ = Mid(Masque$, Longueur + 1, 1)

'Petit test pour visualiser les variables
'Dim msg$
'msg = "ctxt.name = " & ctxt.Name & vbCrLf
'msg = msg & "texte = " & Texte & vbCrLf
'msg = msg & "Touche$ = " & Touche$ & vbCrLf
'msg = msg & "Masque$ = " & Masque$ & vbCrLf
'msg = msg & "Longueur = " & Longueur & vbCrLf
'msg = msg & "str = " & str & vbCrLf
'msg = msg & "CarSuivant$ = " & CarSuivant$
' MsgBox msg

If str = "?" Then
  'J'ai une lettre
  Select Case Touche$
    Case "A" To "Z" 'Lettres
      Select Case CarSuivant$
        Case "?", "#"
          TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$
        Case Else
          TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$ & CarSuivant$
      End Select
    Case Else
      TexteAvecMask = Left(Texte$, Len(Texte$) - 1)
  End Select
ElseIf str = "#" Then
  'J'ai un chiffre
  Select Case Touche$
    Case "0" To "9"
      Select Case CarSuivant$
        Case "?", "#"
          TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$
        Case Else
          TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$ & CarSuivant$
      End Select
    Case Else
      TexteAvecMask = Left(Texte$, Len(Texte$) - 1)
  End Select
Else
  'J'ai tout autre caractère
  Select Case CarSuivant$
    Case "?", "#"
      TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$
    Case Else
      TexteAvecMask = Left(Texte$, Len(Texte$) - 1) & Touche$ & CarSuivant$
  End Select
End If

End Function

Sub Verif(ctxt As Control)

'Cette procédure est à utiliser dans le GotFocus du control txtBox (ici txt(Index)) _
pour vérifier si le début du masque n'est ni un chiffre, ni une lettre. _
Dans ce cas, j'envoi le ou les caractères non variables dans le txtBox.

'La syntaxe à utiliser est la suivante :

'Verif txt(Index)

'______________________________________________________________________________________________

If ctxt.Tag = "" Then Exit Sub

'Longueur du mask
Dim Longueur As Long
Dim Chaine$, i%, msg$
Chaine$ = ctxt.Tag
If Chaine$ = "" Then Exit Sub
Longueur = Len(Chaine$)

If Longueur = 0 Then Exit Sub

Select Case Left(Chaine$, 1)
  Case "?", "#"
    Exit Sub
End Select

For i% = 1 To Longueur
  Select Case Mid(Chaine$, i%, 1)
    Case "?", "#"
    Case Else
      msg$ = msg$ & Mid(Chaine$, i%, 1)
  End Select
Next i%
  
ctxt.Text = msg$

ctxt.SelStart = Len(msg$)

End Sub<code>

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.