XL 2010 [RESOLU] Pb de format à l'enregistrement d'une date dans un Formulaire !

pduval34

XLDnaute Nouveau
Bonsoir,

Pour un fichier de randonnées (cf fichier joint), j'ai finalisé un formulaire me permettant d'avoir pour chaque randonnée un bon visuel sur les commentaires photos, profil, etc...
Mais, c'est à l'usage que l'on découvre les bugs !!

J'en ai corrigé certains, mais il m'en reste un dernier que je n'arrive pas à solutionner.

Sur la colonne "L", j'ai des dates qui lorsque l'on valide un enregistrement bascule en format texte.
Pour essayer de régler le problème, j'ai déclaré pour cette colonne que le format serait une date : .NumberFormat = "dd/mm/yy"
Résultat : si dans la date, le jour est :
- < à 12 elle se retrouve bien en date mais au format mm/dd/yy
- > à 12 il reste en format texte !
J'ai essayé d'autres méthodes, mais là c'était toutes les autres dates qui étaient modifiées....
Quelle solution ?
Une âme généreuse pourrait, s'il vous plait, me débloquer cette situation pénible ?
Remerciements anticipés.
 

Pièces jointes

  • TEST1.xlsm
    416.8 KB · Affichages: 14

youky(BJ)

XLDnaute Barbatruc
Bonsoir,
Les dates d'un textbox doivent être traitées pour quelles soient prisent comme des dates.
La méthode est la cellule =Cdate(monTextBox) si le textbox a bien une date sinon bug.
Dans la macro le plus simple est de mettre(ajouter la ligne en rouge)
For I = 1 To 22
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
End If
Next I
Ws.Cells(Ligne, 16) = cdate(TextBox15)
Pas besoin du format dans la macro
Bruno
 

pduval34

XLDnaute Nouveau
Merci beaucoup,

C'est de ma faute, la dénomination de mes champs prête à confusion : la colonne qui correspond à la TextBox15 "Dates" n'est le plus souvent pas une date (c'est du texte (correspond aux antériorités de réalisation de la balade : ex. "2005, mai 2008, 4/5/12".
La colonne qui me posait problème est la colonne "L" Date (sans "s") cad la Textbox 11 où là il n'y a que des dates au format date !!
Votre proposition y fonctionne parfaitement.
Par sécurité, j'ajoute la ligne que vous venez de me proposer !!
Bonne soirée.
 

Dranreb

XLDnaute Barbatruc
Avec cette fonction dans un module standard :
VB:
Public Function ValeurTBx(ByVal TBx As MSForms.TextBox, _
    Optional ByVal TypeDon As VbVarType = vbDouble)
On Error Resume Next
If TBx.Text = "" Then
    ValeurTBx = Empty
ElseIf TypeDon = vbDate Then
    ValeurTBx = CDate(TBx.Text)
ElseIf TypeDon = vbString Or Not IsNumeric(TBx.Text) Then
    ValeurTBx = TBx.Text
ElseIf TypeDon = vbCurrency Then
    ValeurTBx = CCur(TBx.Text)
Else
    ValeurTBx = CDbl(TBx.Text)
    End If
End Function
Vous pouvez aussi faire, maintenant :
Code:
Ws.Cells(Ligne, "L").Value = ValeurTBx(TextBox11, vbDate)
 

Discussions similaires