'************************************************************************************************************************************
'* SUJET:FORMATER UN TEXTBOX DYNAMIQUEMENT AVEC MASQUE DE SAISIE *
'* *
'* HAUTEUR : patricktoulon pour DVP *
'* *
'* FORMAT DE BASE: "000 00 00 00" *
'* *
'* VERSION N° 4 *
'* *
'* Avec cette version on va formater la chaine a chaque pression sur une touche que l'on completera avec la chaine vide préformatée *
'* *
'************************************************************************************************************************************
Const chainevide = "___ __ __ __" 'chaine vide Préformatée representant les 9 chiffres vides(non renseigné)
Dim pointeur As Long 'variable qui sera renseignée pour déterminer l'emplacement du curseur
Dim chaine As Variant 'variable alimentée avec les caracteres numeriques du textbox
Private Sub TextBox1_Change()
chaine = ""
For i = 1 To Len(TextBox1)
If IsNumeric(Mid(TextBox1, i, 1)) Then chaine = chaine & Mid(TextBox1, i, 1) 'si le caractere est numerique on l'ajoute a la chaine
If Len(chaine) = 3 Or Len(chaine) = 6 Or Len(chaine) = 9 Then chaine = chaine & " "
Next 'fin de boucle
If Len(chaine) > 12 Then chaine = Left(chaine, 12) 'on bloque la chaine a 12 caractere espaces compris
'si la chaine numerique n'a pas encore les 9 chiffres on ajoute la partie correspondante de la chaine vide
TextBox1 = chaine & Mid(chainevide, Len(chaine) + 1, 12 - Len(chaine) + 1)
' on place le curseur
TextBox1.SelStart = pointeur
End Sub
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'si l'on double clic le groupe de chiffre au niveau du curseur qui est separé des _
autres par un espace de chaque coté est selectionné en bleu
'avec la variable selection on va pouvoir gérer la fonction"TextBox1_KeyDown"
selection = True 'selection d'un groupe de chiffre
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case "8" ' si on appuie sur la touche effacer
pointeur = TextBox1.SelStart - 1
If pointeur < 0 Then pointeur = 0
Case "46"
'si le curseur se trouve devant un espace il ne supprimera pas puisque les espace sont placé et ne doivent pas changer
' alors on decale le curseur de 1 caractere vers la droite
If Mid(TextBox1, TextBox1.SelStart + 1, 1) = " " Then
pointeur = TextBox1.SelStart + 1
'maintenant que le curseur se trouve devant le chiffre on supprime le chiffre a droite du curseur
TextBox1 = Replace(TextBox1, Mid(TextBox1, pointeur, 1), "")
Else
pointeur = TextBox1.SelStart
End If
Case 96, 97, 98, 99, 100, 101, 102, 103, 104, 105 ''si on appuie sur le pavé numérique de 0 a 9
' avant on a selectionner un groupe de chiffre par le double clic on bloque le curseur pour qu'il ne se deplace pas comme il devrait le faire
If selection = True Then pointeur = TextBox1.SelStart: selection = False
'si l'on est devant un espace on decale le curseur de 2(exemple :" 1" alors on place le curseur devant "1")
If Mid(TextBox1, TextBox1.SelStart + 1, 1) = " " Then
pointeur = pointeur + 2
Else
'autrementon decale simplement le curseur de 1 vers la droite
pointeur = pointeur + 1
End If
Case 106
'on vide le textbox la chaine vide se remettra automatiquement par le text_change
TextBox1 = ""
End Select
End Sub
'ET voila le tour est joué
'finalement les choses les plus simples restent les plus éfficaces