Excel VBA DATES AU FORMAT dd/mm/yyyy DEVIENNENT mm/dd/yyyy
Bonjour à tous,
Je rencontre un souci avec le report des dates (comprises entre le 1er et le 12 du mois) renseignées via mon userform1 qui sont au format français (dd/mm/yyyy) et qui, une fois, reportées dans mon tableau sur la feuille "Registre_2024" se mettent au format anglais (mm/dd/yyyy).
Par exemple, si je rentre dans la textbox24 la date du 21/12/2024 alors la date sera bien reportée comme telle dans mon tableau mais si je rentre la date du 06/02/2024 dans ma textbox24 alors elle devient 02/06/2024.
Sur le forum, j'avais trouvée une solution qui permettait de vérifier si le jour de la date ne dépasse pas 31 et le mois, 12. Ce qui est bien mais malheureusement avec cette solution, les dates du 1er au 12 du mois se mettent au format anglais.
Private Sub TextBox24_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Format la date de débauche
On Error GoTo erreur
If (Not IsDate(TextBox24) Or Val(Left(TextBox24, 2)) > 31 Or Val(Mid(TextBox24, 4, 2)) > 12) And TextBox24 <> "" Then GoTo erreur
TextBox24.Value = Format(CDate(TextBox24.Value), "dd/mm/yyyy")
Exit Sub
erreur:
MsgBox "Format de la date de débauche incorrect, réessayez s'il vous plaît" & vbCr & "Format correct : ddmmyyyy"
TextBox24 = ""
Cancel = True
End SubPour gagner du temps, je vous joins mon fichier afin que vous puissiez y jeter un oeil ...
J'ai pu remarquer qu'il est assez compliqué pour bon nombre de personne de régler ce souci
Je vous remercie d'avance pour le coup de main et le temps que vous prendrez pour m'aider
Bonjour,
Vous pouvez faire ceci:
Private Sub TextBox24_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Format la date de débauche
J = Left(TextBox24.Value, 2)
M = Mid(TextBox24.Value, 4, 2)
A = Right(TextBox24.Value, 4)
TextBox24.Value = J & "/" & M & "/" & A
Cancel = True
End SubCdlt
Bonjour Arturo83,
Je vous remercie mais malheureusement après avoir essayé votre méthode, cela ne change rien au problème que j'ai avec mes dates dont le jour est compris entre le 1er et le 12 qui au lieu de me faire 12/01/2024 devient 01/12/2024 dans mon tableau.
Si vous avez d'autres idées, elles sont les bienvenues !
Je cherche une solution de mon côté également
Bonjour à tous ceux qui auraient besoin d'une solution pour la gestion des dates au format français (dd/mm/yyyy) qui se reportent au format anglais (mm/dd/yyyy) sans raisons dans leur tableau.
Alors, je suis fière de moi ! j'ai fini par trouver toute seule !!!
Voici les différentes parties du code m'ayant permis de ne plus avoir ce problème;
Dans un 1er temps, je prépare la mise en forme que je souhaite pour ma date donc je suis partie sur le format dd/mm/yyyy dans ma textbox24, par exemple.
Private Sub TextBox24_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Format la date de débauche
On Error GoTo erreur
If (Not IsDate(TextBox24) Or Val(Left(TextBox24, 2)) > 31 Or Val(Mid(TextBox24, 4, 2)) > 12) And TextBox24 <> "" Then GoTo erreur
TextBox24.Value = Format(TextBox24.Value, "dd/mm/yyyy")
Exit Sub
erreur:
MsgBox "Format de la date de débauche incorrect, réessayez s'il vous plaît" & vbCr & "Format correct : ddmmyyyy"
TextBox24 = ""
Cancel = True
End Sub
Private Sub TextBox24_Change()
'Nombre de caractères maximum pour la date de débauche
TextBox24.MaxLength = 10
'Incrémenter automatiquement les "/"
Dim Valeur As Byte
Valeur = Len(TextBox24)
If Valeur = 2 Then
TextBox24 = TextBox24 & "/"
ElseIf Valeur = 5 Then
TextBox24 = TextBox24 & "/"
End If
End Sub
Private Sub TextBox24_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Que des chiffres pour la date de débauche
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End SubPar la suite, je souhaite donc importer, lorsque j''appuie sur le bouton enregistrer de mon userform1, la date renseignée en textbox24 dans mon tableau en faisant en sorte de garder le même format.
Private Sub CommandButton1_Click()
'Bouton Nouveau / Enregistrer
If ComboBox1.ListIndex = " " Then
MsgBox "Veuillez renseigner le nom de l'employé"
Else
If MsgBox("Confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
Worksheets("Registre_2024").Select
Dim Ligne As Integer
Ligne = Sheets("Registre_2024").Range("E456541").End(xlUp).Row + 1
'Gestion des dates
If Trim(TextBox4.Value) = "" Then
Cells(Ligne, 10).Value = ""
ElseIf IsDate(TextBox4.Value) Then
Cells(Ligne, 10).Value = CDate(TextBox4.Value)
Else
MsgBox "La valeur de date de naissance n'est pas une date valide"
End If
If Trim(TextBox19.Value) = "" Then
Cells(Ligne, 27).Value = ""
ElseIf IsDate(TextBox19.Value) Then
Cells(Ligne, 27).Value = CDate(TextBox19.Value)
Else
MsgBox "La valeur de job d'été n'est pas une date valide"
End If
If Trim(TextBox20.Value) = "" Then
Cells(Ligne, 29).Value = ""
ElseIf IsDate(TextBox20.Value) Then
Cells(Ligne, 29).Value = CDate(TextBox20.Value)
Else
MsgBox "La valeur de début de stage n'est pas une date valide"
End If
If Trim(TextBox21.Value) = "" Then
Cells(Ligne, 30).Value = ""
ElseIf IsDate(TextBox21.Value) Then
Cells(Ligne, 30).Value = CDate(TextBox21.Value)
Else
MsgBox "La valeur de fin de stage n'est pas une date valide"
End If
If Trim(TextBox22.Value) = "" Then
Cells(Ligne, 34).Value = ""
ElseIf IsDate(TextBox22.Value) Then
Cells(Ligne, 34).Value = CDate(TextBox22.Value)
Else
MsgBox "La valeur de date de cdd n'est pas une date valide"
End If
If Trim(TextBox23.Value) = "" Then
Cells(Ligne, 37).Value = ""
ElseIf IsDate(TextBox23.Value) Then
Cells(Ligne, 37).Value = CDate(TextBox23.Value)
Else
MsgBox "La valeur de date de cdi n'est pas une date valide"
End If
If Trim(TextBox24.Value) = "" Then
Cells(Ligne, 38).Value = ""
ElseIf IsDate(TextBox24.Value) Then
Cells(Ligne, 38).Value = CDate(TextBox24.Value)
Else
MsgBox "La valeur de date de débauche n'est pas une date valide"
End IfVoili, voilou !!!
Je penses qu'il est possible de simplifier mais pour l'instant, c'est ce que j'ai de mieux à proposer donc, j'espère que cela pourra aider certains !
Merci à Arturo83 qui aura essayé de m'aider et peut-être que cela pourra vous aider aussi...