1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
Const chainevide = "__.__.____"
Dim pointeur As Long
Dim chaine As Variant
Private Sub userform_initialize()
MaDate.Text = chainevide
Demande_Conge.Bouton_Reset = True
Me.Label_Nom.Caption = Worksheets("2018").Range("Z14").Value
End Sub
Private Sub MaDate_Change()
Dim pointeur As Long
Dim chaine As Variant
chaine = ""
For i = 1 To Len(MaDate)
If IsNumeric(Mid(MaDate, i, 1)) Then chaine = chaine & Mid(MaDate, i, 1)
If Len(chaine) = 4 Then chaine = chaine & "-"
Next
If Len(chaine) > 7 Then chaine = Left(chaine, 7)
MaDate = chaine & Mid(chainevide, Len(chaine) + 1, 7 - Len(chaine) + 1)
End Sub
Private Sub MaDate_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim ind As Long, X As String
'Si le keycode = 8 soit backspace et que le Textox3 ne contient pas un chiffre de 0 a 9
If KeyCode = 8 And Not MaDate Like "*0-9*" Then
'Le keycode est nulnon pas null mais zero
KeyCode = 0
'Ind = recherche de la position du "_" dans la textbox non!!!!!
'Ind = recherche de la position du 1er "_" dispo dans le texte du textbox
ind = InStr(1, MaDate, "_")
' Si "_" est en position 0 alors le dernier "_" est égal à la longueur de la textbox non!!!!!!
'si ind = 0 alors il n'y a plus de "_" donc ind=len(textbox)
If ind = 0 Then
ind = Len(MaDate)
Else
'sinon ind = emplacement du "_" -1'oui!!!!
ind = InStr(1, MaDate, "_") - 1
'Si le "_" est après la position 0 alors non!!!!!!!
'si le caractère suivant le "_" est "-", on retourne sur le caractère précédent!!!!! pas tout a fait comme ca qu'il faut l'interpréter
If ind > 0 Then 'si la position ind est plus grand 0 oui!!!!
'Si celui ci est égal à "-" alors ind = ind-1
If Mid(MaDate, ind, 1) = "-" Then ind = ind - 1
End If
End If
'si "_" n'est pas en position 0 alors X = texte entré, on cherche ensuite le "_" suivant dans X,
'on passe au caractère suivant
If ind <> 0 Then
X = MaDate.Text: Mid(X, ind, 1) = "_": MaDate.Text = X
End If
End If
'Si "_" n'est pas en position 0 alors le curseur va se placer sur le caractère précédent le dernier "_",
'sinon sur le dernier caractère de la textbox
MaDate.SelStart = IIf(ind <> 0, ind - 1, Len(MaDate))
End Sub
'Evalue la touche au moment où on la relache
Private Sub MaDate_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim l As String, ind As Long, X As String
'Si la touche retournée n'est pas numérique,alors elle est nulle et on sort de la fonction
If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0: Exit Sub
'De base, l renvoie la touche renvoyée. Elle est nulle au début
l = Chr(KeyAscii): KeyAscii = 0
'ind est la place du "_" dans la MaDate
ind = InStr(1, MaDate, "_")
'Si le "_" est en position 6 et que la touche renvoyée est supérieure à 1 alors la touche renvoyée est nulle
If ind = 6 And l > 1 Then KeyAscii = 0: Exit Sub
'Si le "_" est en position 7, que le 6e caratère est un 1 et que la touche renvoyée est supérieure à 2, oui!!!
' alors la touche est nulle non pas null mais zero
If ind = 7 And Mid(MaDate, 6, 1) = 1 And l > 2 Then KeyAscii = 0: Exit Sub
'Si le "_" n'est pas en position 0 alors X = textbox, la position du "_" est la touche à renvoyer, le texte est renvoyé non!!!!
'si ind est different de zero x=textbox.text:on remplace le (ind)eme caracterepar un dans la variable x:on met la chaine x dans le textbox
If ind <> 0 Then: X = MaDate.Text: Mid(X, ind, 1) = l: MaDate.Text = X
'Si le texte est de format "*_*", c'est à dire avec des caractère avant et après un "_" alors non!!!!
'si le textbox contient un "_"
If MaDate Like "*_*" Then
'On recherche la position du "_" oui!!!
ind = InStr(1, MaDate, "_")
'Et si la position du "_" n'est pas 0 alors on place le curseur sur l'emplacement précédent, oui!!!!
'Sinon sur le dernier caractere de la MaDate
MaDate.SelStart = IIf(ind <> 0, ind - 1, Len(MaDate))
End If
End Sub |
Partager