Après de longues recherches sur le forum, je fais appel à vous pour un problème que je ne pense pas être le seul à avoir rencontré.
Dans un projet Excel avec UserForm et tableau dans un onglet, j’ai un souci dans la conservation du format des dates entre le UF et les cellules du tableau. En effet, je stocke dans dates dans un UF via une TextBox sous forme jj/mm/aaaa et les renvoie vers un tableau excel via les fonctions suivantes :
Le problème est que les dates passent du format jj/mm à mm/jj. Pour exemple, une date qui était le 01/07/2014 ( 1 juillet 2014 ) dans la TB 19, une fois renvoyée dans le tableau Excel, devient 07/01/2014 ( 7 janvier 2014. J’ai trouvé la fonction CDate et ai donc testé la fonction :
Cela fonctionne parfaitement mais il m’arrive de laisser des TB avec N/A ou tout autre chaine de caractère quand je n’ai pas de date à y inscrire. Assez logiquement, la fonction CDate plante quand la TB ne contient pas de date.
J’ai donc besoin de votre aide car je sèche ! Avec vous une idée pour tester si la TB19 contient une date et donc la renvoyer sous la forme jj/mm/aaaa originelle (donc sans inversion de chiffres) mais que si elle contient une chaine de caractère quelconque qu’elle la copie dans l’état ?
Merci d’avance pour votre aide, qui comme d’habitude sera parfaite
Re : Transfert date Textbox vers cellule // Format France à USA
Bonsoir jonleboss,
On peut toujours essayer le code suivant:
VB:
Range("G59") = Me.TextBox18
On Error GoTo Err_pas_date ' si erreur on se branche à Err_pas_date
Range("T59") = CDate(TextBox19) ' affectation
On Error GoTo 0 ' on quitte la capture d'erreur
Range("G61") = Me.TextBox20
' ... suite du code ....
Exit Sub ' fin normale de la procédure
Err_pas_date: ' gestionnaire d'erreur
Range("T59") = TextBox19
Resume Next ' on revient à l'instruction suivant celle
' qui a déclenché l'erreur( ie cdate...)
End Sub
Re : Transfert date Textbox vers cellule // Format France à USA
Bonjour Jonathan; MaPomme.
Je fais comme ceci :
Code:
'Laisser à Excel le soin de mettre le format de date par défaut si c'est une date
Range("T59").NumberFormat = "General"
'Tester s'il s'agit d'une date avant d'utiliser la fonction de conversion CDate
If IsDate(TextBox19.Value) Then
Range("T59").Value = CDate(TextBox19.Value)
Else
Range("T59").Value = TextBox19.Value
End If
@Efgé: Excuse le retard. Je n'avais pas senti le besoin d'explorer cette suggestion magique. Heureusement que tu me l'as réitérée quelques mois plus tard dans un autre fil. Tu as raison : c'est vraiment magique.