Forcer format date dans une TextBox

Bonjour le forum,

Je n'arrive pas à forcer la TextBox en format date pour que quand j'entre par exemple dans celle-ci 02/12/19, j'appuie sur le bouton modifier dans mon UserForm ça affiche dans ma BDD en ce format (02 décembre 2019) au lieu de ça 02/12/19. Voici le code où je souhaite faire ce forçage:

'Pour le bouton modifier
Private Sub CommandButton_modifier_click()

    Dim ligne As Long
    Dim I As Integer

    If MsgBox("Confirmer la modification de cet article ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox_code.ListIndex = -1 Then Exit Sub
        ligne = Me.ComboBox_code.ListIndex + 2
        Ws.Cells(ligne, "B") = ComboBox_categorie
        For I = 1 To 39
            If Me.Controls("Textbox" & I).Visible = True Then
                Ws.Cells(ligne, I + 2) = Me.Controls("TextBox" & I).Value
            End If
        Next I
    End If
End Sub

Merci d'avance pour votre aide

Bonjour Thunder, bonjour le forum,

je pense que ton problème viens plutôt du format des cellules de la colonne qui reçoit les dates. Une TextBox renvoie toujours une valeur de type String (Chaine de caractères). Mais Excel reconnait certaines chaînes et leur applique un format automatiquement sans te demander ton avis. C'est souvent très pratique mais quelquefois très ch***t. Pour éviter ce genre de déconvenue et aussi l'inversion jour/mois, je renvoie dans la cellule un entier long qui représente une date et je formate la colonne au format que je souhaite. De cette façon, je n'ai plus de problème...

Dans ton cas, sélectionne la colonne des date dans le tableau Excel et définis le format date : *14/13/2001

ensuite modifie ton code :

'Pour le bouton modifier
Private Sub CommandButton_modifier_click()
Dim ligne As Long
Dim I As Integer
Dim DS As String 'déclare la variable DS (Date en String)
Dim DL As Long 'déclare la variable DL (Date en entier Long)

If MsgBox("Confirmer la modification de cet article ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
    If Me.ComboBox_code.ListIndex = -1 Then Exit Sub
    ligne = Me.ComboBox_code.ListIndex + 2
    Ws.Cells(ligne, "B") = ComboBox_categorie
    For I = 1 To 39
        If Me.Controls("Textbox" & I).Visible = True Then
        DS = Me.Controls("TextBox" & I).Value 'définit la date DS
        DL = CLng(DateSerial(Year(DS), Month(DS), Day(DS))) 'définit la date DL
        Ws.Cells(ligne, I + 2) = DL
    End If
    Next I
End If
End Sub

Re ThauThème,

J'ai fais comme tu me l'as conseillé mais le soucis est qu'il me met en débogage pour erreur d’exécution 13: Incompatibilité de type.

Pour te donner plus d'information le tableau comporte 41 colonnes et c'est la colonne 40 qui possède les dates.

cordialement

Re,

L'erreur se passe sur quelle ligne ? Bien sûr je navet pas noté la boucle sur les TextBoxes... Quelle est la TextBox qui contient la date ?

[Édition]

Imaginons que ce soit la TextBox36 qui contienne la date (tu adapteras) le code devient :

'Pour le bouton modifier
Private Sub CommandButton_modifier_click()
Dim ligne As Long
Dim I As Integer
Dim DS As String 'déclare la variable DS (Date en String)
Dim DL As Long 'déclare la variable DL (Date en entier Long)

If MsgBox("Confirmer la modification de cet article ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
    If Me.ComboBox_code.ListIndex = -1 Then Exit Sub
    ligne = Me.ComboBox_code.ListIndex + 2
    ws.Cells(ligne, "B") = ComboBox_categorie
    For I = 1 To 39
        If I = 36 Then
            DS = Me.TextBox36.Value 'définit la date DS
            DL = CLng(DateSerial(Year(DS), Month(DS), Day(DS))) 'définit la date DL
            ws.Cells(ligne, I + 2) = DL
        End If
        If Me.Controls("Textbox" & I).Visible = True Then ws.Cells(ligne, I + 2) = Me.Controls("TextBox" & I).Value
    End If
    Next I
End If
End Sub

Re,

ça bloque à cette ligne:

DL = CLng(DateSerial(Year(DS), Month(DS), Day(DS))) 'définit la date DL

La TextBox qui contient la date est la TextBox38.

J'ai copié ton deuxième code en remplaçant le numéro de la TextBox et la ligne If I = 36 Then par 38 mais la date ne se modifie pas.

Est-ce qu'il faut je modifie le format dans le tableau?

@+

Re,

il faut modifier 2 lignes en remplaçant 36 par 38...

 If I = 38 Then
            DS = Me.TextBox38.Value 'définit la date DS

Sinon, envoie ton fichier, on va pas y passer les fêtes de Noël !...

Re,

Voici le fichier en version plus allégé

@+

21testp.zip (149.24 Ko)

Re,

Le fichier modifié, fonctionnel...

94thunder-ep-v01.zip (150.97 Ko)

Bonjour,

ce serait déjà moins prise de tête si tu prenais l'habitude de saisir une date au format date 02/12/2019

(année sur 4 chiffres. )

19 pour une année c'est pas top 1919 2019 …… pour rappel nombreux logiciels se sont trouvés recalés lors

du passage de l'an 2000 car ils n'avaient pas prévu d'année sur 4 chiffres.

Re ThauThème,

Super merci ça fonctionne parfaitement.

Merci beaucoup

Bonjour Xmenpl,

J'avoue que j'ai pris l'habitude d'écrire l'année à deux chiffres mais une habitude, parfois est bonne à changer ainsi, à l'avenir je vais l'écrire à 4 chiffres, ça évitera comme tu l'as dit, des bogue inutile.

Merci du conseil

bonne fin de journée à tous

Rechercher des sujets similaires à "forcer format date textbox"