[RESOLU] Pb Visual basic

darkneo51

XLDnaute Nouveau
Bonjour à tout le monde, étant débutant en VBA, je suyis en train de créer mon premier fichier avec lien vers excel.
Dans un textbox, je demande de renseigner la date, différents tests sont faits pour vérifier que c'est bien une date, ainsi que pour adapter le format au transfert vers excel.
J'ai ajouté pour plus de souplesse, une mise en place de "/" et de l'année pour augmenter la rapidité de saisie.
Le problème se pose quand je saisi une date farfelue ex:"35/12/2011", une erreur 13 d'incompatibilité apparait sur le code ci dessous, pouvez vous m'aider svp? Merci d'avance.

'GESTION DATE
Private Sub TextBox5_Change()
Dim dDate As Date
'VERIFICATION CARACTERE NUMERIQUE
If Not IsNumeric(Right(TextBox5, 1)) And TextBox5 <> "" And (Right(TextBox5, 1)) <> "/" Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox5 = Left(TextBox5, Len(TextBox5) - 1)
End If
'AJOUT / AUTOMATIQUE
If Len(TextBox5) = 2 Then TextBox5 = TextBox5 & "/"
If Len(TextBox5) = 5 Then TextBox5 = TextBox5 & "/" & Year(Date)

If (Right(TextBox5, 1)) = "/" Then
Exit Sub
End If
'VERIFICATION ET FORCAGE FORMAT DATE POUR TRANSFERT EXCEL
If Len(TextBox5) = 10 Then
If IsDate(TextBox5) Then TextBox6.SetFocus Else MsgBox "Ceci n'est pas une date correcte"
If IsDate(TextBox5) Then TextBox6.SetFocus Else TextBox6 = ""

If Mid(TextBox5.Value, 4, 2) > 12 Then
TextBox5.Value = vbNullString
TextBox5.SetFocus
Exit Sub
End If
dDate = DateSerial(Year(Date), Month(Date), Day(Date))
TextBox5.Value = Format(TextBox5.Value, "dd/mm/yyyy")
dDate = TextBox5.Value
End If
End Sub
 
Dernière édition:

mromain

XLDnaute Barbatruc
validité date textbox

Bonjour darkneo51 et bienvenue sur le forum

Voici un code qui permet de vérifier la validité de la date lors de la saisie de la TextBox. Les "/" se mettent automatiquement (ou lorsqu'on saisi un "." - ou un "/" évidemment).
VB:
Private Sub TextBox5_Change()
'on veut la date au format "jj/mm/aaaa"
 Dim tabVal() As String, jour As String, mois As String, moisS As String, annee As String, mauvaiseSaisie As Boolean
    
    mauvaiseSaisie = False
    On Error Resume Next
    With TextBox5
        'remplace le "." par le "/"
         If Mid(.Text, Len(.Text), 1) = "." Then .Text = Mid(.Text, 1, (Len(.Text) - 1)) & "/"
        'remplace "X/" par "0X/"
         If Mid(.Text, 2, 1) = "/" Then .Text = "0" & .Text
        
        'remplace "XX/X/" par "XX/0X/"
         If Mid(.Text, 5, 1) = "/" Then .Text = Mid(.Text, 1, Len(.Text) - 2) & "0" & Mid(.Text, Len(.Text) - 1, 2)
        
        'ajoute le premier "/" si pas présent
         If Len(.Text) = 2 And .Text Like "##" Then .Text = .Text & "/"
        'ajoute le deuxième "/" si pas présent
         If Len(.Text) = 5 And .Text Like "##/##" Then .Text = .Text & "/"
        
        'si ce ne sont pas des chiffres qui ont été saisis
         If Not .Text Like Left("##/##/####", Len(.Text)) Then
            'annuler la saisie du dernier caractère
             mauvaiseSaisie = True
        End If
        
        'éclater la chaine de caractère
         tabVal = Split(.Text, "/")
        jour = tabVal(0)
        If jour = "" Then jour = "01"
        mois = tabVal(1)
        If mois = "" Then mois = "01"
        moisS = "jan": moisS = Format(DateSerial(2000, mois, 1), "mmm")
        annee = tabVal(2)
        If annee = "" Then annee = "2000"
        
        'si le mois est suppérieur à 12, annuler la dernière saisie
         If CLng(mois) > 12 Then
            mauvaiseSaisie = True
        End If
        'si ce n'est pas une date valide, annuler la dernière saisie
         If Not IsDate(DateValue(jour & " " & moisS & " " & annee)) Then
            mauvaiseSaisie = True
        End If
        
        If mauvaiseSaisie Then
            'annuler la saisie du dernier caractère
             .Text = Left(.Text, Len(.Text) - 1)
            Exit Sub
        End If
    End With
End Sub

A+
 

darkneo51

XLDnaute Nouveau
Re : validité date textbox

Bonjour mromain,
tout d'abord merci d'avoir répondu à mon message.
Je viens de tester votre proposition, celle-ci répond en quasi-totalité à ce que je souhaite, merci beaucoup à vous.
Reste un seul souci maintenant, le format de la date avec cette formule se transfert en inverse lors de la copie du textbox vers la cellule excel. les jours passent en mois et les mois en jours. Précision, je ne peux pas modifier le format de cellule dans excel, il me faudrait pouvoir avoir la mise au format jj/mm/aaaa lors du transfert.

Merci beaucoup de votre aide
 

darkneo51

XLDnaute Nouveau
Re : Pb Visual basic

Bonjour kiki29, alors tout simplement parce que je débute et que je ne connais pas du tout ces composants. ce point est ok et tourne sans problème dans mon appli maintenant.

Alors par contre maintenant, je me triture les méninges pour lancer un filtre auto depuis mon useform qui filtrerai les lignes pour lesquelles la date entrée dans la colonne "A" seraient comprises entre 2 dates saisies dans 2 textbox. Et là, rebelote, je suspecte une erreur de format, car le tri me ressort toutes les lignes bien que j'arrive à générer un tri sur un autre critère.

Enfin, si quelqu'un a une idée ?!?
Merci et bonne journée à toutes et à tous
 

darkneo51

XLDnaute Nouveau
Re : [RESOLU] Pb Visual basic

Hello tout le monde, au cas où ma question interesse d'autres utilisateurs, voici le code que j'ai utilisé finalement pour gérer mes saisies de dates.

Private Sub TextBox5_Change()
Dim Valeur As Byte
Me.TextBox5.MaxLength = 10 'nb caractères maxi autorisé dans le TauxtbAT
Valeur = Len(Me.TextBox5)
If Valeur = 2 Then Me.TextBox5 = Me.TextBox5 & "/"
If Valeur = 5 Then Me.TextBox5 = Me.TextBox5 & "/" & Year(Date)
End Sub
Private Sub TextBox5_AfterUpdate()
If Left(Me.TextBox5, 2) > 31 Or Mid(Me.TextBox5, 4, 2) > 12 Or Not IsDate(TextBox5) Or Not IsNumeric(Right(Me.TextBox5, 4)) Then
réponse = MsgBox("Format Date erroné " & Me.TextBox5 & " Recommencer"): Me.TextBox5 = ""
End If
End Sub


Bon courage à tous et merci aux bénévoles !!!
 

Discussions similaires

Statistiques des forums

Discussions
312 244
Messages
2 086 555
Membres
103 247
dernier inscrit
bottxok