Transfert date Textbox vers cellule // Format France à USA

jonleboss

XLDnaute Junior
Bonjour à tous les experts en VBA,

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 :

Code:
[…]
        Range("G59").Value = Me.TextBox18.Value
        Range("T59").Value = Me.TextBox19.Value
        Range("G61").Value = Me.TextBox20.Value
[…]

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 :

Code:
[…]
        Range("G59").Value = Me.TextBox18.Value
        Range("T59").Value = CDate(TextBox19.Value)
        Range("G61").Value = Me.TextBox20.Value
[…]

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 ;)

Jonathan
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

Docmarti

XLDnaute Occasionnel
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é

XLDnaute Barbatruc
Re : Transfert date Textbox vers cellule // Format France à USA

Bonjour jonleboss, Docmarti, Salut mapomme,

Une possibilité, le magique FormulaLocal :
VB:
Range("G59").FormulaLocal = Me.TextBox18.Value
Voir
VB:
Range("G59").FormulaLocal = Me.TextBox18.Text

Cordialement
 

Docmarti

XLDnaute Occasionnel
Re : Transfert date Textbox vers cellule // Format France à USA

Bonjour jonleboss, Docmarti, Salut mapomme,

Une possibilité, le magique FormulaLocal :
VB:
Range("G59").FormulaLocal = Me.TextBox18.Value
Voir
VB:
Range("G59").FormulaLocal = Me.TextBox18.Text

Cordialement

@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.

EDIT: Et ce n'est pas réservé aux formules.



Cordialement

Docmarti.
 
Dernière édition:

Discussions similaires

Réponses
21
Affichages
975

Statistiques des forums

Discussions
312 185
Messages
2 086 010
Membres
103 090
dernier inscrit
Createlier