[RESOLU] Inversion format de date dans Userform Excel 2010

Inversion format de date dans Userform Excel 2010 [RESOLU] - Logiciels - Windows & Software

Marsh Posté le 18-08-2014 à 16:46:58    

Bonjour à tous,
 
Je suis entrain de développer un petit outil de gestion d'inventaire informatique sous Excel 2010. J'ai donc différentes feuilles que l'on remplie grâce à des formulaires créés par Userform et contrôlé par VBA.
Toutes mes fonctionnalités marchent mais je viens de me rendre compte d'un gros problème sur mes champs contenant des dates.
 
J'ai donc plusieurs formulaires différents qui contiennent plusieurs champs TextBox dans lequel je renseigne des dates au format jj/mm/aaaa. (pas de contrôle sur cette écriture, je l'écris moi-même dans ce format)
 
Prenons l'exemple suivant :
1) Je précise la date d'achat d'un ordinateur dans un champs textbox (Nommé C_DateAchat) : 16/08/2014
2) Je clique sur mon bouton enregistrer qui vient ranger la valeur dans la cellule correspondante de mon tableau : feuille.Cells(ligne, 7) = C_DateInstallation.Value. L'enregistrement fonctionne bien, pas de soucis.
3) A la prochaine ouverture, la récupération de la valeur de la cellule par mon formulaire fonctionne bien aussi : C_DateInstallation.Value = feuille.Cells(ligne, 7).
 
Le problème apparait maintenant :
4) La prochaine fois que je clique sur mon bouton enregistrer, ma date est écrite dans sa cellule au format mm/jj/aaaa, puis si je reclique à nouveau sur Enregistrer, ma date est écrite au format jj/mm/aaaa. Quasi tous mes textbox avec des dates font ce yoyo alternant jj/mm et mm/jj.
 
Ce problème apparait sur tout mes formulaire (6 différents) mais quelques rares champs n'y sont pas soumis alors que je ne fais rien de plus ou de moins sur ceux-ci.  
Je n'utilise aucune fonction pour le moment sur ces dates qui pourrait les modifier, je récupère juste leur valeur dans la cellule ou je viens l'écrire comme indiqué ci-dessus.
 
J'ai forcé pour les colonnes en question où je renseignais les dates le format jj/mm/aaaa dans l'interface graphique mais le problème continue.
 
Avez-vous une idée d'où peut venir mon problème ? J'avoue commencer à devenir fou :D Et je pris pour que ça se corrige !
 
Edit : Le problème d'inversion semble connu sur Internet et confirme ce que je pensais, la date d'entrée est bien considéré en format français jj/mm/aaaa alors que son écriture est au format américain mm/jj/aaaa. Mes dates ne changeant pas sont celles dont le jour est supérieur à 12.
Je suis allé voir mes options régionales, tout est ok. J'ai essayé de convertir les dates dans Données > Convertir > JMA, rien a changé. J'ai aussi forcé le format dans mon code directement avec feuille.Cells(ligne, 7) = Format(C_DateInstallation.Value, "dd/mm/yyyy" ), mais ne marche pas non plus. :(

 
Je vous remercie par avance de l'aide que vous m'apporterez.
Bonne fin de journée.


Message édité par solidxciter le 19-08-2014 à 13:51:45
Reply

Marsh Posté le 18-08-2014 à 16:46:58   

Reply

Marsh Posté le 19-08-2014 à 11:22:20    

Il y a une conversion par défaut qui se fait.
Pour empêcher qu'elle ait lieue, il faut préciser la conversion à faire.
Cela signifie qu'il faut indiquer le format voulu pour chaque cellule contenant une date.
 
Cela peut se faire de plusieurs manières :
 
- Au niveau de la feuille, on sélectionne des cellules et on va dans le menu pour changer le format.
- Au niveau d'une importation d'un fichier externe, on définit le format de la colonne de destination.
- Au niveau du VBA on associe un format à une cellule par ".NumberFormat =" (pas seulement pour les nombres, mais aussi pour les dates).
 
Dans votre cas, quel est le format de feuille.Cells(ligne, 7) ? et celui de C_DateInstallation ?
 
Il est parfois utile aussi d'entourer les dates par des "#", un au début et un à la fin.
 
On peut jouer aussi avec DatePart().


Message édité par olivthill le 19-08-2014 à 11:24:37
Reply

Marsh Posté le 19-08-2014 à 13:50:55    

Bonjour olivthill,
 
Merci beaucoup pour ta réponse, j'ai essayé chacune de tes pistes sans aucun succès. Je commençais à devenir fou (encore une fois) puis finalement j'ai forcé toutes mes colonnes contenant des dates au format Texte puis je réalise des conversions avec Cdate quand j'ai besoin de faire des calculs avec certaines dates.
 
Tout m'a l'air de fonctionner comme ça, l'inversion ne se produit plus et mes calculs prennent les bonnes dates au format jj/mm/aaaa.
 
Pour noter ma solution clairement :
1) J'ai passé l'ensemble des mes colonnes contenant des dates au format Texte en passant par l'interface graphique habituel (Sélection de la colonne, clic droit > Format de cellule > Texte)
2) Quand une opération mathématique doit être faite sur ces dates, il faut la convertir avant grâce à Cdate(dateAconvertir)

 
Merci encore une fois de ton aide olivthill.
Bonne journée à tous !


Message édité par solidxciter le 19-08-2014 à 13:51:12
Reply

Marsh Posté le 19-08-2014 à 16:19:49    

Merci pour la solution.
C'est vrai que j'avais aussi utilisé CDate autrefois, mais je ne m'en souvenais plus, et le contexte était différent.
Bonne journée !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed