Remplacer les deux derniers caractères d'un textbox

Y compris Power BI, Power Query et toute autre question en lien avec Excel
R
Rag02700
Membre fidèle
Membre fidèle
Messages : 323
Appréciations reçues : 4
Inscrit le : 26 décembre 2017
Version d'Excel : 2010

Message par Rag02700 » 20 septembre 2019, 17:13

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 :lole: :lole:

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


h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'501
Appréciations reçues : 282
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 20 septembre 2019, 17:49

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
R
Rag02700
Membre fidèle
Membre fidèle
Messages : 323
Appréciations reçues : 4
Inscrit le : 26 décembre 2017
Version d'Excel : 2010

Message par Rag02700 » 21 septembre 2019, 09:16

Hello,

Oui je vois. Cependant, j'aimerai ne pas empêcher la saisie de l'annee dans sa forme courte...
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'501
Appréciations reçues : 282
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 21 septembre 2019, 13:55

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.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message