Format Date DD/MM/YYYY impossible

Bonjour a tous,

Pour commencer je ne suis pas un pro du vba , je rencontre un problème pour mettre la date dans les tableau de mon fichier au format dd/mm/yyyy

Je ne comprend pas cars dans les code de mes userform j utilise bien

Format(TextBox10.Value, "dd/mm/yyyy")

mais l affichage se fait toujours en mm/dd/yyyy

j'ai également changé le format de cellule sans succés

je m en remet a votre savoir ...

pour accéder au fichier click sur visiteur (j ai ouvert les droits)

merci

Salut,

Cette demande à déjà été posée...

Dans un premier temps vérifie les options régionales de Windows.

Format renvoie un Type Chaine de caractères (String) et ne doit pas être utilisé tel quel. Tu dois :

  • Tester si la date est valide
Private Sub TextBox10_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If Not (IsDate(TextBox10.value)) Then
        MsgBox "Vous devez renseigner une date valide ! exemple : 20/11/2023"
        Cancel = True
    End If
End Sub
  • Ensuite renvoyer une variable de type Date
'...
'...
With loVerifications.ListRows(1).Range ' Nouvelle ligne ajoutée en première position
        .Cells(1).value = CDate(TextBox10.Value)
        .Cells(2).value = TextBox3.value <i>' N° D'IDENTIFICATION</i>
        .Cells(3).value = TextBox1.value <i>' NOM ET PRENOM DU VERIFICATEUR</i>
        .Cells(4).value = TextBox2.value <i>' MATRICULE</i>
        .Cells(5).value = TextBox8.value <i>' CONCLUSIONS</i>
        .Cells(6).value = TextBox9.value <i>' OBSERVATIONS et TRAITEMENTS</i>
End With
'...
'...

Voilà,

bonjour et merci pour votre réponse

Dans un premier temps vérifie les options régionales de Windows.

Windows est bien en Français et option régionales a France

Tester si la date est valide

je ne comprend pas ou placer ce code sachant que plusieur code de mon fichier sont dans des userform different et plusieur textbox differente renvoie une date

Ensuite renvoyer une variable de type Date

si je comprend dans chaque code ou j ai "Format(TextBox10.Value, "dd/mm/yyyy")" je remplace par "CDate" comme pour appeller une fonction?

Comme je disai je suis novice en vba j'utilise chatgpt qui me fournis les code de ce que je veux mettre en place

j'ai modifié le code par CDate mais aucun résultat

ces textbox doivent afficher la date ellene sont pas modofiable par l utilisateur

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim cell As Range
    Dim lastRow As Long
    Dim count As Integer

    ' Accède à la feuille "Réglages"
    Set ws = ThisWorkbook.Sheets("Réglages")

    ' Initialise le compteur
    count = 0

    ' Trouve la dernière ligne pour chaque colonne en dessous de la ligne 5
    lastRow = ws.Cells(ws.Rows.count, "B").End(xlUp).row
    ' Parcourt les cellules dans la colonne B à partir de la ligne 6
    For Each cell In ws.Range("B6:B" & lastRow)
        ' Vérifie si la cellule n'est pas vide
        If cell.value <> "" Then
            ' Ajoute la valeur de la cellule à la ComboBox1 (Localisation)
            count = count + 1
            Me.Controls("ComboBox1").AddItem cell.value
        End If
    Next cell

    ' Si aucune valeur n'a été ajoutée à la ComboBox1, supprime le ComboBox
    If count = 0 Then Me.Controls("ComboBox1").Clear

    ' Réinitialise le compteur
    count = 0

    ' Répète le processus pour les autres ComboBox
    ' ComboBox2 - Colonne C (Désignation)
    lastRow = ws.Cells(ws.Rows.count, "C").End(xlUp).row
    For Each cell In ws.Range("C6:C" & lastRow)
        If cell.value <> "" Then
            count = count + 1
            Me.Controls("ComboBox2").AddItem cell.value
        End If
    Next cell
    If count = 0 Then Me.Controls("ComboBox2").Clear

    ' ComboBox3 - Colonne D (Localisation)
    count = 0
    lastRow = ws.Cells(ws.Rows.count, "D").End(xlUp).row
    For Each cell In ws.Range("D6:D" & lastRow)
        If cell.value <> "" Then
            count = count + 1
            Me.Controls("ComboBox3").AddItem cell.value
        End If
    Next cell
    If count = 0 Then Me.Controls("ComboBox3").Clear

    ' ComboBox4 - Colonne E (Périodicité)
    count = 0
    lastRow = ws.Cells(ws.Rows.count, "E").End(xlUp).row
    For Each cell In ws.Range("E6:E" & lastRow)
        If cell.value <> "" Then
            count = count + 1
            Me.Controls("ComboBox4").AddItem cell.value
        End If
    Next cell
    If count = 0 Then Me.Controls("ComboBox4").Clear

    ' Affiche le nom et prénom en B2 et le matricule en B1 de la feuille "Accueil"
    TextBox1.value = ThisWorkbook.Sheets("Accueil").Range("B2").value
    TextBox2.value = ThisWorkbook.Sheets("Accueil").Range("B1").value

    ' Affiche la date du jour dans TextBox7 au format "dd/mm/yyyy"
    TextBox7.value = Format(CDate(Date), "dd/mm/yyyy")
    ' Appel de la procédure pour appliquer la couleur rizlan en fonction de l'année saisie dans TextBox7
    AppliquerCouleur TextBox6, Year(CDate(TextBox7.value))

End Sub

Private Sub Valider_Click()
    Dim wsRepertoireAccessoires As Worksheet
    Dim loAccessoires As ListObject
    Dim lastRowAccessoires As Long
    Dim foundID As Range
    Dim ID As String

    ' Accédez à la feuille "Répertoire accessoires"
    Set wsRepertoireAccessoires = ThisWorkbook.Sheets("Répertoire accessoires")

    ' Accédez au tableau dynamique "TAccessoires"
    Set loAccessoires = wsRepertoireAccessoires.ListObjects("TAccessoires")

    ' Récupérez le numéro d'identification saisi dans la TextBox3
    ID = TextBox3.value

    ' Recherchez si le numéro d'identification est déjà présent dans le tableau dynamique "TAccessoires"
    Set foundID = loAccessoires.ListColumns("N° D'IDENTIFICATION").DataBodyRange.Find(ID, LookIn:=xlValues, LookAt:=xlWhole)

    ' Si le numéro d'identification est trouvé, affichez un message et quittez la procédure
    If Not foundID Is Nothing Then
        MsgBox "Ce numéro d'identification est déjà utilisé. Veuillez en saisir un autre.", vbExclamation
        Exit Sub
    End If

    ' Ajoutez le reste du code pour ajouter les nouvelles lignes dans les tableaux dynamiques et remplir la feuille "Fiche accessoires"
    ' Accède aux feuilles "Répertoire accessoires", "Répertoire vérifications" et "Fiche accessoires"
    Dim wsRepertoireVerifications As Worksheet
    Dim wsFicheAccessoires As Worksheet
    Dim loVerifications As ListObject
    Dim lastRowVerifications As Long

    ' Accède aux feuilles "Répertoire accessoires", "Répertoire vérifications" et "Fiche accessoires"
    Set wsRepertoireVerifications = ThisWorkbook.Sheets("Répertoire vérifications")
    Set wsFicheAccessoires = ThisWorkbook.Sheets("Fiche accessoires")

    ' Accède aux tableaux dynamiques (ListObjects)
    Set loAccessoires = wsRepertoireAccessoires.ListObjects("TAccessoires")
    Set loVerifications = wsRepertoireVerifications.ListObjects("TVérifications")

    ' Trouve la dernière ligne non vide dans le tableau dynamique "Répertoire accessoires"
    lastRowAccessoires = wsRepertoireAccessoires.Cells(wsRepertoireAccessoires.Rows.count, loAccessoires.ListColumns(1).Index).End(xlUp).row

    ' Trouve la dernière ligne non vide dans le tableau dynamique "Répertoire vérifications"
    lastRowVerifications = wsRepertoireVerifications.Cells(wsRepertoireVerifications.Rows.count, loVerifications.ListColumns(1).Index).End(xlUp).row

    ' Ajoute une nouvelle ligne dans le tableau dynamique "Répertoire accessoires" après la première ligne (sous les titres)
    If lastRowAccessoires < 1 Then
        loAccessoires.ListRows.Add
    Else
        Set loAccessoires = wsRepertoireAccessoires.ListObjects("TAccessoires")
        loAccessoires.ListRows.Add (1)
    End If

    ' Copie les valeurs dans la nouvelle ligne du tableau dynamique "Répertoire accessoires"
    With loAccessoires.ListRows(1).Range ' Nouvelle ligne ajoutée en première position
        .Cells(1).value = ComboBox1.value ' UNITE/SERVICE
        .Cells(2).value = ComboBox2.value ' DESIGNATION
        .Cells(3).value = TextBox3.value ' N° D'IDENTIFICATION
        .Cells(4).value = TextBox4.value ' C.M.U
        .Cells(5).value = ComboBox3.value ' LOCALISATION
        .Cells(6).value = Format(CDate(TextBox7.value), "dd/mm/yyyy") ' DATE DE MIS.EN SERV. au format "dd/mm/yyyy"
        .Cells(8).value = ComboBox4.value ' PERIODICITE
    End With

    ' Ajoute une nouvelle ligne dans le tableau dynamique "Répertoire vérifications" après la première ligne (sous les titres)
    If lastRowVerifications < 1 Then
        loVerifications.ListRows.Add
    Else
        Set loVerifications = wsRepertoireVerifications.ListObjects("TVérifications")
        loVerifications.ListRows.Add (1)
    End If

    ' Copie les valeurs dans la nouvelle ligne du tableau dynamique "Répertoire vérifications"
    With loVerifications.ListRows(1).Range ' Nouvelle ligne ajoutée en première position
       .Cells(1).value = Format(CDate(TextBox7.value), "dd/mm/yyyy") ' DATE DU CONTRÔLE OU DETECTION ANOMALIES au format "dd/mm/yyyy"
        .Cells(2).value = TextBox3.value ' N° D'IDENTIFICATION
        .Cells(3).value = TextBox1.value ' NOM ET PRENOM DU VERIFICATEUR
        .Cells(4).value = TextBox2.value ' MATRICULE
        .Cells(5).value = TextBox8.value ' CONCLUSIONS
        .Cells(6).value = TextBox9.value ' OBSERVATIONS et TRAITEMENTS
    End With

    ' Remplissage de la feuille "Fiche accessoires"
    With wsFicheAccessoires
        .Range("E9").value = ComboBox1.value ' UNITE/SERVICE
        .Range("E11").value = ComboBox2.value ' DESIGNATION
        .Range("E13").value = TextBox3.value ' N° D'IDENTIFICATION
        .Range("E15").value = TextBox4.value ' C.M.U
        .Range("E17").value = ComboBox3.value ' LOCALISATION
        .Range("E19").value = Format(CDate(TextBox7.value), "dd/mm/yyyy") ' DATE DE MIS.EN SERV. au format "dd/mm/yyyy"

        .Range("E23").value = ComboBox4.value ' PERIODICITE

       .Range("A29").value = Format(CDate(TextBox7.value), "dd/mm/yyyy") ' DATE DE MIS.EN SERV. (VERIFICATIONS) au format "dd/mm/yyyy"
        .Range("D29").value = TextBox1.value ' NOM ET PRENOM DU VERIFICATEUR
        .Range("F29").value = TextBox2.value ' MATRICULE
        .Range("H29").value = TextBox8.value ' CONCLUSIONS
        .Range("J29").value = TextBox9.value ' OBSERVATIONS et TRAITEMENTS
    End With

    Unload Me
    ImprimerFicheAccessoire

End Sub

Bonjour,

avec .Range("E19").value = Format(CDate(TextBox7.value), "dd/mm/yyyy") tu retransformes en texte la date texte que tu as converti en date numérique avec CDate(), c'est comme si tu n'avais rien fait.
Résultat : excel essaie de l'interpréter quand tu colles et se plante.

Contente-toi de : .Range("E19").value = CDate(TextBox7.value)
La cellule de destination doit avoir le format date voulu
eric

Re,

En complément de ce qu'a dis Eric :

Dans chaque évènement de chaque Zone de texte dans chaque formulaire tu dois faire le test que j'ai mis dans le précédent post.

Quand tu es sur un formulaire en mode création, tu fais un click droit sur le contrôle qui doit contenir une date, exemple le contrôle TextBox10 du formulaire UsfVérification, et tu sélectionnes code.

000457

VBA te renvoie sur la méthode change de la zone de texte.

Private Sub TextBox10_Change()

End Sub

Tu cliques en haut à droite dans la zone déroulante, et tu sélectionnes BeforeUpdate.

000458

Maintenant tu peux y insérer le code que je t'ai donné, il est préférable, si tu veux apprendre, de taper le code et non pas faire un copier coller.

Une fois cela fait, tu peux supprimer la méthode TextBox10_Change qui ne sert pas ici.

Cette opération est à faire à l'ensemble des contrôles qui doivent contenir une date, sur chaque formulaire.

Maintenant il ne te reste plus qu'a changer la manière dont tu écris les dates dans les tableaux structurés. Pour cela tu ne dois pas utiliser la fonction Format, mais Cdate comme expliqué plus haut. Exemple dans le code du bouton Valider du formulaire UsfVérification :

    ' Copier les valeurs dans la nouvelle ligne du tableau TVérifications
    With loVerifications.ListRows(1).Range ' Nouvelle ligne ajoutée en première position
        .Cells(1).value = Cdate(TextBox10.value)

        .Cells(2).value = TextBox3.value ' N° D'IDENTIFICATION
        .Cells(3).value = TextBox1.value ' NOM ET PRENOM DU VERIFICATEUR
        .Cells(4).value = TextBox2.value ' MATRICULE
        .Cells(5).value = TextBox8.value ' CONCLUSIONS
        .Cells(6).value = TextBox9.value ' OBSERVATIONS et TRAITEMENTS
    End With

Est-ce toi qui a fait l'ensemble de la programmation de ce projet ?

Il est certains points de tu dois respecter :

  • Donner des noms explicite à tes contrôles, procédures et fonctions.
  • Utiliser des procédures et fonctions pour les codes redondants.

Voilà si tu veux de plus amples renseignements n'hésites pas.

Bonne programmation.

merci a tous pour votre aide le probleme est resolu en utilisant CDate

Est-ce toi qui a fait l'ensemble de la programmation de ce projet ?

Il est certains points de tu dois respecter :

Donner des noms explicite à tes contrôles, procédures et fonctions.

Utiliser des procédures et fonctions pour les codes redondants.

Voilà si tu veux de plus amples renseignements n'hésites pas.

Oui c est moi qui l ai fait a la ide de chatGPT merci pour les conseil de procedure je ne suis pas a l aise pour lui faire faire mais j essaie

Rechercher des sujets similaires à "format date yyyy impossible"