Changement automatique du format de la date

Bonjour,

J'ai un Userform avec une TextBox où l'utilisateur doit inscrire la date du jour. Seulement le format change automatiquement.

Lorsqu'il écrit 12/09/2015, par exemple, le texte qui s'affiche dans la feuille de calcul Excel, dans la colonne "Date", est 09/12/2015.

Je sais que le problème vient du fait que dans VBA, la date est écrite en version US alors que dans Excel elle est en français, mais je ne vois pas comment l'écrire dans le code. De plus, quand j'écris 22/12/2015 dans la textbox, c'est la bonne date qui est renvoyée (j'imagine qu'au-dessus de 13 en fait, VBA comprend que ça ne peut pas correspondre au mois).

Quelqu'un aurait-il une idée ?

Merci d'avance !

Bonjour,

Essaie en utilisant CDate

Exemple:

Range("A1").Value = CDate(TextBox1.Value)

A+

Merci de ton aide !

J'ai mis ton code dans celui que j'ai crée :

.Range("B" & DLig + 1).Value = CDate(TextBox1.Value)  'Remplir la cellule de B à la ligne Dlig+1 avec TextBox1
      Cells(DLig + 1, 2).Value = Format(UserForm1.TextBox1, "dd/mm/yyyy")  '

Ca fonctionne la première fois que j'ouvre l'userform, je clique sur OK, mais quand je veux remplir la deuxième cellule, le format redevient inversé (alors que je n'ai pas fermé l'userform).

Peut-être qu'il faudrait que je fasse une boucle ?

Bonjour,

C'est un problème récurrent avec VBA ! Si tu prélèves une date dans Excel avec VBA, il n'y a en principe pas de souci parce qu'il prélève le numéro de série (sauf avant le 1er mars 1900 où il y a un décalage d'un jour entre Excel et VBA). Mais lorsque VBA interprète une date à partir d'une chaîne texte, là la tendance à lui appliquer le format américain devient fréquente...

Je crois que chacun a ses solutions préférentielles... CDate peut fonctionner, pas toujours, c'est à expérimenter.

Pour ma part j'utilise souvent une variable module (éventuellement publique si je l'appelle de l'extérieur) à laquelle je réaffecte la date en utilisant DateSerial, et le TextBox ne me sert que d'affichage dans le Userform...

Cordialement

Ferrand

Merci MFerrand !

En effet j'ai passé pas mal de temps à chercher sur internet et beaucoup de gens ont le même problème, mais pour l'instant je n'ai pas trouvé de solution ! CDate marche pour des dates où le jour est supérieur à 12, c'est déja ça haha

Je ne connais pas les variables modules, en quoi ça consiste ?

Essaie comme cela

Range("B" & DLig + 1).Value = CDate(TextBox1.Value)  'Remplir la cellule de B à la ligne Dlig+1 avec TextBox1
Cells(DLig + 1, 2).NumberFormat = "dd/mm/yyyy"

A+

Tu déclares simplement une variable ! Type Date ou type Long, ou laissée type Variant tout simplement.

En lui affectant le numéro de série lors de la datation par l'utilisateur, tu as une certitude sur la date que tu sortiras...

En sortie, au lieu d'affecter la valeur du TextBox, tu affectes à partir de cette variable. Il convient que la cellule réceptrice soit préformatée sur un format de date (ou la formater lors de l'insertion) car l'automatisme d'Excel pour appliquer lui-même un format de date par défaut ne jouera pas lorsqu'elle est insérée sous cette forme.

Cordialement

Ferrand

Merci Frangy ! Cette fois ça marche, sauf pour le premier remplissage !

J'ouvre l'userform, je mets 12/09/2015 dans ma TextBox "Date", je clique sur OK et il me renvoie 09/12/2015.

Le champ TextBox redevient vide, je mets à nouveau 12/09/2015, je clique sur OK et cette fois il me renvoie bien 12/09/2015.

Et ainsi de suite, ça à l'air de marcher après... je ne vois pas pourquoi, je n'ai pas mis de condition particulière sur la première case pourtant !

Ok Ferrand, merci de tes explications, je vais chercher dans cette voie aussi alors !

Rechercher des sujets similaires à "changement automatique format date"