Remplacer les deux derniers caractères d'un textbox

Bonjour à tous,

J'utilise un formulaire de saisie pour alimenter une feuille excel.

Dans ce formulaire j'ai un certain nombre de champs DATE où la saisie est facilité par un masque de saisie.

Le problème est que lorsque l'utilisateur indique par exemple 12/12/19 dans la feuille excel, quand je filtre sur la colonne, cette date n'est pas regroupée par mois. Alors que si l'utilisateur saisi 12/12/2019 le regroupement par mois est effectif.

Je cherche donc à corriger cette erreur pour que le regroupement se fasse pour toute saisie que ce soit 19 ou 2019.

Mon idée est de récupérer les 2 derniers caractères du texbox ("19") pour les remplacer par "2019". Par contre je sèche sur la manupulation

Pourriez-vous m'aider svp ou peut être y a t il une manière de faire plus simple ?

Voici le code du textbox avec mon essai pour récupérer les derniers caractères :

Merci à tous.

Private Sub TB_PLUG_E1_AfterUpdate()
If TB_PLUG_E1.Value = "" Then Exit Sub
If Not IsDate(TB_PLUG_E1.Value) Then
MsgBox "La date saisie n'est pas au format jj/mm/aaaa", vbInformation, "Erreur date"
TB_PLUG_E1.Value = ""
End If

'Chaine = "/"
caractere = "/"
Positiondroite = Len(TB_PLUG_E1) - InStrRev(TB_PLUG_E1, caractere) + 1
If Not Positiondroite = 5 Then
Annee = "20" & Right(TB_PLUG_E1, Positiondroite - 1)
'TB_PLUG_E1=replace(TB_PLUG_E1
'    MsgBox Len(TB_PLUG_E1) - Positiondroite
'Annee = Right(TB_PLUG_E1, Len(TB_PLUG_E1) - Positiondroite + 1)
MsgBox Annee
End If

End Sub

Private Sub TB_PLUG_E1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 8 Then
        If Right(TB_PLUG_E1, 1) = "/" Then TB_PLUG_E1 = Mid(TB_PLUG_E1, 1, Len(TB_PLUG_E1) - 1)
   End If

End Sub

Private Sub TB_PLUG_E1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'On limite la saisie aux caractères suivants : 1234567890/
    If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0

End Sub

Private Sub TB_PLUG_E1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case Len(TB_PLUG_E1.Text)
    Case 2: If Val(TB_PLUG_E1.Value) > 31 Then TB_PLUG_E1.Value = "": MsgBox "Le jour est supérieur à 31" Else TB_PLUG_E1 = TB_PLUG_E1 & "/"
    Case 5: If Mid(TB_PLUG_E1, 4, 2) > 12 Then TB_PLUG_E1.Value = Mid(TB_PLUG_E1, 1, 3): MsgBox "Le mois  est supérieur à 12" Else TB_PLUG_E1 = TB_PLUG_E1 & "/"
    Case 10: If Not IsDate(TB_PLUG_E1) Then MsgBox "Ceci n'est pas une date": TB_PLUG_E1 = ""
    Case 11: TB_PLUG_E1 = Mid(TB_PLUG_E1, 1, 10)
    End Select

End Sub

Bonjour,

peut-être peux-tu t'inspirer de ceci ?

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(Me.TextBox1) Then
        Cells(1, 1) = CDate(Me.TextBox1)
    Else
        MsgBox "date invalide"
    End If
End Sub

Hello,

Oui je vois. Cependant, j'aimerai ne pas empêcher la saisie de l'annee dans sa forme courte...

Bonjour,

normalement cela fonctionne aussi. tu utilises les algorithmes de reconnaissance de date de VBA. En tout cas cela fonctionne chez moi, 15/01/03 ou 15/01/2003 sont tous les deux admis et transformés au format date.

Rechercher des sujets similaires à "remplacer deux derniers caracteres textbox"