[RESOLU] Pb Visual basic

  • Initiateur de la discussion Initiateur de la discussion darkneo51
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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+
 
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
 
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
 
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 !!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
173
Réponses
2
Affichages
165
Réponses
35
Affichages
2 K
Réponses
2
Affichages
171
Réponses
4
Affichages
255
Retour