J'ai parcouru ardemment le forum depuis ce matin... en vain...
Je m'explique :
1) j'ai un fichier excel avec un userform qui contient un textbox
Voici le code vba :
Private Sub TextBox11_Change()
Dim Valeur As Byte
TextBox11.MaxLength = 10
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
Sheets("Feuil2").Range("K13") = TextBox11.Value
End Sub
2) Le code fonctionne mais si je mets la date d’aujourd’hui dans le textbox (02/11/2011) il me met dans la cellule cible 11/02/2011... Je sais que bcp de sujets ont été rédigés à ce sujet mais avec la fonction CDate je n'y arrive pas... (je suis débutant).
3) Quelqu'un aurait-il une solution à me proposer ? (J'utilise office 2010)
Bonjour Nico l'entraineur de la piscine du 79 , salut Pierrot ,
Techniquement, tu devrais utiliser 3 événements :
Code:
Private Sub UserForm_Initialize()
TextBox11.MaxLength = 10
End Sub
Private Sub TextBox11_Change()
Dim Valeur As Byte
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
End Sub
Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Sheets("Feuil2").Range("K13").FormulaLocal = TextBox11.Value
End Sub
et le FormulaLocal utilises les préférences locales ...
Bonne fin de journée
Bonjour SwimCoachNico79, Salut Pierrot ,
Je pense qu'il y a un problème car l'écriture de la date se fait au fur et à mesure de la saisie, donc dès le premier caractère (a ce moment ce n'est pas une date...)
Donc je verrais plutot ça (en partant du principe que tu as un bouton de validation dans ton USF:
Inutile de remettre le MaxLength à chaque entrée dans la textBox, il serait préférable de le mettre lors de l'initialisation du USF
VB:
Private Sub UserForm_Initialize()
TextBox11.MaxLength = 10
End Sub
Ensuite on gère la saisie:
VB:
Private Sub TextBox11_Change()
Dim Valeur As Byte
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
End Sub
Et pour finir on inscrit la date (en bétonnant un peu pour éviter les inversion Mois / Jours) :
VB:
Private Sub CommandButton1_Click()
Sheets("Feuil2").Range("K13") = DateSerial(Right(TextBox11.Value, 4), Mid(TextBox11.Value, 4, 2), Left(TextBox11.Value, 2))
End Sub
Private Sub TextBox11_Change()
Dim Valeur As Byte
TextBox11.MaxLength = 10
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
Sheets("Feuil2").Range("K13") = CDate(TextBox11.Value)
End Sub
J'ai le un message : erreur d'execution '13' incompatibilité de type
Sheets("Feuil2").Range("K13") = CDate(TextBox11.Value) apparait en jaune dans le débogueur
mais pas dans la procédure Change de la TextBox11 car elle va générée des erreurstant que la date n'est pas complète... Je te propose de faire comme ça :
Code:
Private Sub TextBox11_Change()
Dim Valeur As Byte
TextBox11.MaxLength = 10
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
End Sub
puis :
Code:
Private Sub TextBox11_AfterUpdate()
Sheets("Feuil2").Range("K13") = CDate(Me.TextBox11.Value)
End Sub
On aurait pu prendre la procédure Exit au lieu de AfterUpdate ou placer cette ligne sur le bouton de validation de l'UserForm (s'il y en a un)...
[Édition] Ooops 'ache'ment en retard moi... Bonjour à tous !