XL 2019 Souci de formatage de TxtBox au format date

egman

XLDnaute Occasionnel
Bonjour à tous,
je viens solliciter votre aide pour un souci de formatage de txtbox au format date.
J'ai récupéré une table Access où j'avais pas mal de dates, or quand je veux récupérer ces dates de mon tableau excel dans le userform elles apparaissent sous forme numérique.
J'ai regardé un peu partout comment faire mais je ne trouve pas de solution qui fonctionne.
Je vous joint un petit fichier explicatif avec ce que j'ai fait.....mais sans succès
D'avance merci pour votre aide
 

Dranreb

XLDnaute Barbatruc
VB:
Dim ValCel
ValCel = ActiveSheet.[A1].Value
If VarType(ValCel) = vbDate Then
    TextBox1.Text = ValCel
Else
    MsgBox "La valeur de A1 est de type """ & TypeName(ValCel) & """ et non ""Date""."
    end If
LExpressionRangeReprésentantLaCelluleIncriminée: un truc du genre Workbooks(X).Worksheets(Y).Range(Z) et plein d'autres possibles. Mais n'ayant rien de concret à étudier je ne savais quoi mettre. ActiveSheet.[A1] est aussi une expression Range, représentant la cellule A1 de la feuille active.
 
Dernière édition:

egman

XLDnaute Occasionnel
VB:
Dim ValCel
ValCel = ActiveSheet.[A1].Value
If VarType(ValCel) = vbDate Then
    TextBox1.Text = ValCel
Else
    MsgBox "La valeur de A1 est de type """ & TypeName(ValCel) & """ et non ""Date""."
    end If
LExpressionRangeReprésentantLaCelluleIncriminée: un truc du genre Workbooks(X).Worksheets(Y).Range(Z) et plein d'autres possibles. Mais n'ayant rien de concret à étudier je ne savais quoi mettre. ActiveSheet.[A1] est aussi une expression Range, représentant la cellule A1 de la feuille active.
J'ai essayé avec votre déclaration de variable ValCel et en mettant n'importe quelle date en A1 cela fonctionne très bien.
Y 'a plus qu'à adapter tout ceci dans mon tableau et voir le résultat.
En tout cas un GRAND MERCI à vous pour m'avoir aidé.
Bonne soirée
 

egman

XLDnaute Occasionnel
VB:
Dim ValCel
ValCel = ActiveSheet.[A1].Value
If VarType(ValCel) = vbDate Then
    TextBox1.Text = ValCel
Else
    MsgBox "La valeur de A1 est de type """ & TypeName(ValCel) & """ et non ""Date""."
    end If
LExpressionRangeReprésentantLaCelluleIncriminée: un truc du genre Workbooks(X).Worksheets(Y).Range(Z) et plein d'autres possibles. Mais n'ayant rien de concret à étudier je ne savais quoi mettre. ActiveSheet.[A1] est aussi une expression Range, représentant la cellule A1 de la feuille active.
je me permet de vous ré-déranger, mais votre solution fonctionne bien pour une cellule distincte.
J'ai du mal à intégrer votre variable dans mon Initialize de formulaire....
Est ce que je peux vous faire passer mon fichier allégé ? (3,4Mo quand même) et sous quelle forme , que vous puissiez y voir plus clair.
D'avance MERCI
 

Dranreb

XLDnaute Barbatruc
Joignez ici un classeur encore plus simplifié.
Mais je ne vois pas en quoi ça compliquerait de le faire dans un UserForm.
N'oubliez pas, s'il écrit dans des cellules des Value de TextBox, toujours en String, indiquant des dates, de les convertir en Date à l'aide de la fonction CDate.
 

egman

XLDnaute Occasionnel
Décidément c'est de l’hébreu pour moi, désolé.
On a droit à quoi en taille de fichier ? (en fait ce sont les userform qui prennent de l'espace car je n'ai laissé que 2 lignes dans mon tableau. Ce sont des userforms avec multi pages pour ne avoir à multiplier ceux ci.
 

Dranreb

XLDnaute Barbatruc
Si vous avez une TextBox nommée TBxDate consacrée à une date dont vous voulez renseigner une cellule, ne surtout pas faire Cells(X, Y).Value = TBxDate.Value, ça risquerait d'y inscrire un texte, ou pire même de pousser Excel à le reconvertir lui même en Date, mais de travers. Faire If IsDate(TBxDate.Text) Then Cells(X, Y).Value = CDate(TBxDate.Text) Else Cells(X, Y).Value = Empty
(Remarque: la fonction IsDate n'indique pas si c'est une date mais si c'est une donnée convertible en Date)
 
Dernière édition:

egman

XLDnaute Occasionnel
Si vous avez une TextBox nommée TBxDate consacrée à une date dont vous voulez renseigner une cellule, ne surtout pas faire Cells(X, Y).Value = TBxDate.Value, ça risquerait d'y inscrire un texte, mais Cells(X, Y).Value = CDate(TBxDate.Text)
OK je vais essayer cette solution.
Je crois bien que j'ai renseigné mes cellules de la mauvaise façon.
J'ai déclaré mes textbox de cette maniére
Private Sub txtFixe_AfterUpdate()
On Error Resume Next
Me.txtFixe.Value = Format(Me.txtFixe.Value, "##-##-##-##-##")
End Sub

Merci
 

Discussions similaires