Problème de date si jour inférieur à 12

taze33

XLDnaute Nouveau
Bonjour à tous

Voici mon PB :

Dans un UserForm, j’ai une page d’un Multipage qui contient des TextBox l’un d’elle est une date.

VB:
Sub TextBox10_Change()
  TextBox10.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
  If Len(TextBox10) = 2 Or Len(TextBox10) = 5 Then TextBox10 = TextBox10 & "/"
End Sub
Une fois que j’ai rempli mes TextBox je clique sur le bouton modifier pour mettre à jour ma feuille excel.

VB:
Private Sub CommandButton2_Click()
Dim ligne As Long
Dim i As Integer
Dim LL As Long
  If MsgBox("Etes-vous certain de vouloir MODIFIER ce dossier ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
  LL = Me.ComboBox1.Column(0, Me.ComboBox1.ListIndex)
  For i = 10 To 19
  If Me.Controls("TextBox" & i).Value <> "" Then Ws.Cells(LL, i + 1).Value = Me.Controls("TextBox" & i).Value
  Next i
ActiveWorkbook.Save
End Sub
Ces procédures fonctionnent très bien si le jour de ma date est supérieur à 12 sinon la date est au format US

J’ai consulter beaucoup de forum et j’ai tout essayé : CDate, Format (dd/mm/yyyy)
Même dans un Sub TextBox10_Exit(ByVal Cancel As MSForms.ReturnBoolean), rien y fait.

Pour info j’ai 3 autres pages dans le multipages qui contiennent chacun 10 TextBox où je dois saisir des dates où la procédure de mise à jour de la feuille Excel est la même que ci-dessus

Peut-on forcer VBA afin qu’il reconnaisse les options régionales de Windows qui sont en français.
Ou bien quelqu’un aurait-il une solution.

Merci, bon week-end
 

Si...

XLDnaute Barbatruc
Bon_jour

bien utiliser CDate, exemple
Code:
Private Sub CommandButton2_Click()
  Dim i As Byte, L As Long 
  If MsgBox("Etes-vous certain de vouloir MODIFIER ce dossier ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
  L = ComboBox1.Column(0, ComboBox1.ListIndex)
  For i = 10 To 19
       If Me("TextBox" & i) <> "" Then Ws.Cells(L, i + 1) = Me("TextBox" & i)
   Next
  Ws.Cells(L, 11) = CDate(TextBox10) '<--- exemple pour une date
  ActiveWorkbook.Save
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Avec ce test (un userform avec un textbox et un commandbutton)
Les dates sont au bon format
VB:
Private Sub CommandButton1_Click()
Randomize 1600
Range("A1") = CDate(TextBox1)
Range("A1").Resize(Int(Rnd * 160) + 0.7654321).DataSeries 2, 3, 2, 1
Unload UserForm1
End Sub

Private Sub UserForm_Initialize()
Cells.Clear
TextBox1 = Date
End Sub

EDITION: Bonjour Si...
NB; Je vois qu'on a eu la même idée ;)
Ce qui est bizarre c'est que le demandeur précisait qu'il a déjà testé avec CDate
 

Staple1600

XLDnaute Barbatruc
Re

Mon code est juste un test qui permet de voir que la valeur renvoyée par le TextBox1 est au bon format.

Donc logiquement, l'effet devrait être le même avec ton classeur, non ?

D'ailleurs Si... a suivi la même logique et utilisé CDate tout comme moi.

PS: Si tu avais joint un fichier exemple, on pourrait tester de visu sur nos PC respectifs.
 

taze33

XLDnaute Nouveau
Bonjour SI, Bonjour Staple

J'ai testé le Code de Staple il fonctionne très bien.
Je pense que si chez moi ça ne fonctionnait pas c'est à cause de la procèdure de mise à jour de mon fichier :
VB:
Private Sub CommandButton2_Click()
Dim ligne As Long
Dim i As Integer
Dim LL As Long
  If MsgBox("Etes-vous certain de vouloir MODIFIER ce dossier ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
  LL = Me.ComboBox1.Column(0, Me.ComboBox1.ListIndex)
  For i = 10 To 19
  If Me.Controls("TextBox" & i).Value <> "" Then Ws.Cells(LL, i + 1).Value = Me.Controls("TextBox" & i).Value
  Next i
ActiveWorkbook.Save
End Sub
J'ai donc modifié cette Sub et tout marche très bien maintenant.
VB:
Private Sub CommandButton2_Click()
Dim l As Long
Dim i As Integer
Dim LL As Long
    If MsgBox("Etes-vous certain de vouloir MODIFIER ce dossier ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
   ' LL = Me.ComboBox1.Column(0, Me.ComboBox1.ListIndex)
  ' For i = 10 To 19
   ' If Me.Controls("TextBox" & i).Value <> "" Then Ws.Cells(LL, i + 1).Value = Me.Controls("TextBox" & i).Value
' Next i
    l = Me.ComboBox1.ListIndex + 2
    Range("K" & l).Value = CDate(TextBox10)
    Range("L" & l).Value = TextBox11
    Range("M" & l).Value = TextBox12
    Range("N" & l).Value = TextBox13
    Range("O" & l).Value = TextBox14
    Range("P" & l).Value = TextBox15
    Range("Q" & l).Value = TextBox16
    Range("R" & l).Value = TextBox17
    Range("S" & l).Value = TextBox18
    Range("T" & l).Value = TextBox19
ActiveWorkbook.Save
End Sub

Je vous remercie et vous souhaite un bon Dimanche
Cordialement :D
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Pour infos
Tu peux aussi écrire ton code ainsi
VB:
Private Sub CommandButton2_Click()
Dim l As Long
If MsgBox("Etes-vous certain de vouloir MODIFIER ce dossier ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
l = ComboBox1.ListIndex + 2
Cells(l, "K").Resize(, 10) = Array(CDate(TextBox10), TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19)
ActiveWorkbook.Save
End Sub
 

Si...

XLDnaute Barbatruc
Re

Il est sûr que si le formulaire est dans la feuille réceptrice, celle-ci n'a pas besoin d'être citée.

J'aurais proposé
VB:
Private Sub CommandButton2_Click()
    Dim L As Long, i As Byte
    L = ComboBox1.ListIndex + 2
    If  IsNumeric(TextBox10 )  then Cells(L, 11) = CDate(TextBox10)
    For i = 11 To 19: Cells(L, i + 1) = Me("TextBox" & i): Next
    ActiveWorkbook.Save
End Sub
Nota : on peut bloquer la macro avec un message forçant une saisie numérique en TextBox10
VB:
…
If Not IsNumeric(TextBox10) Then _
          MsgBox "Il faut saisir une date !", 16, "Attention": TextBox10.SetFocus: Exit Sub
Cells(L, 11) = CDate(TextBox10)
…
ou tester la sortie du contrôle avec
VB:
Private Sub TextBox10_Exit(ByVal Oust As MSForms.ReturnBoolean)
    Oust = Not IsDate(TextBox10) 'saisie avec / pour une date,  : pour un horaire
End Sub

Staple j'aime la recette Array mais à condition que la liste d'ingrédients ne soit pas trop longue:p !
 

Discussions similaires

Statistiques des forums

Discussions
312 236
Messages
2 086 481
Membres
103 232
dernier inscrit
logan035