Format Date DD/MM/YYYY impossible
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.
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.
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.
Bonjour,
Range("E19")=Format(TextBox7,"YYYY-MM-DD")
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