Inversion date jour et mois

A

Abel

Guest
Bonjour tout le monde,

Revoila un truc à Billou que j'avais déjà rencontré. Mais voilà, la sardine n'est pas rentrée au port. Je manque donc de phosphore.

Bref, le sujet :

Je récupère un fichier texte contenant des dates au format "jj/mm/aaaa hh:mm".
Ces informations sont correctes (dans le bon ordre).

Si j'importe "à la main" (fichier/ouvrir/format fichier texte, etc) et que je formate mes colonnes "à la main" (format date "jj mmmm aaaa") tout ce passe bien. Les dates arrivent comme il est demandé.

Par contre si je fais exactement la même opération avec une macro, je me retrouve avec des inversions de jour et de mois.
Quand le jour est inférieur ou égal à 12, Billou me considère que c'est une date anglo-saxone.
04/06/2001 (4 juin) devient 6 avril. C'est énervant.
Et si le jour est supérieur à 12, il ne comprend plus rien et il interprète ça comme du texte. Je reste donc avec mon "13/02/2003 16:51".
En faisant simplement F2 sur cette cellule et "Entrée" le 13/02/2003 devient le 13 février.

Va savoir Charles (pardon pour les Charles).

Alors toutes les idées sont les bienvenues.

Je vous mets un extrait. Les informations contenues sont bidonnées.

Merci d'avance.

Abel
 

Pièces jointes

  • PourExemple.zip
    510 bytes · Affichages: 73
W

wilfried

Guest
Salut Abel,

Lorsque tu effectue ton import en Auto je suppose que tu l'as fais via l'enregistreur de macro. A tu pensé a séléctionner ta colonne contenant la date et de la mettre au format JJ/MM/AAAA? Il faut la selectionner même si cela apparait, je sais pas pourquoi (surment un des nombreux quiproko d'excel) mais sinon il n'apparait pas (jeme suis fais avoir fois)

Voili Voila

Wilfried.
 
D

Dugenou

Guest
Bonsoir Abel et Wilfried,

Moi non plus je n'ai jamais trouvé comment spécifier le format des dates en important les données avec une macro. Par contre j'ai trouvé une recette pour traiter le probleme pour toute la colonne après l'importation.

Sélectionner la colonne, Données/convertir, suivant, suivant, et là on choisit MJA pour le format de dates et hop les dates reviennent toutes dans le bon sens.

S'il y a des heures en plus, il faut ajouter une colonne vide avant (à droite de la colonne en question, choisir l'espace comme séparateur au second écran de données/ convertir et on spécifie MJA comme ci dessus pour la colonne des dates. Quand c'est terminé, pour toute la colonne, on fait format/date/jj mm aa.


Salut !
 
A

Abel

Guest
Bonjour tout le monde,

Merci pour l'astuce, Dugenou.
Je n'avais encore jamais utilisé cette fonction d'Excel.

Malheureusement ....

Quelques précisions :
- je ne conserve pas les heures. Elles font partie de l'export mais elles ne m'intéressent pas,
- je souhaite faire cette récupération sous forme de macro car j'ai des utilisateurs pour qui une récupération manuelle apparait comme une affaire de spécialiste. "C'est trop compliqué".

Ceci dit, tu m'as donné une idée.
Je vais essayé en supprimant les caractères correspondant à l'horaire avant de faire le format date ou avant de faire l'import.

Je vous tiens au courant.

A+

Abel
 
A

Abel

Guest
Re,

Ca progresse et c'est assez rigolot.

Avec une correction dans le fichier texte en enlevant la partie horaire et en faisant un import sans mettre de format date ni au moment de l'import ni après avec un format de cellule, la première colonne de date reste dans le bon ordre.
Mais que la première. Marrant non ?

Bon, allez. J'y retourne.

A+

Abel.
 
A

Abel

Guest
Re,

Bon ...

For Each c In Selection
Range("g" & c.Row) = Left(c, 10)
Next c

Ce truc est très rigolot à suivre.
Au début de la boucle, "c"= la date à l'envers
Un passé l'instruction Range(blabla)=Left (bidule), et hop ! Barbatruc ! Le jour et le mois s'inversent. A condition bien sûr que le jour (les deux premiers caractères) soit strictement inférieur à 13.
C'est ce qu'il me faut.

Mais surtout, il ne faut pas lui dire : Range("g" & c.Row) = Format(Left(c, 10), "dd mmmm yyyy").
Parce que là, et ben ça s'appelle pisser dans un violon ....

Bon, me reste à voir pourquoi certaines dates restent avec un format "JJ/MM/AAAA 00:00" (c'est bien 00:00 et pas hh:mm) malgré le "left".


Si mon solliloque peut servir à quelqu'un, j'en serait fort aise.

A+
 
A

Abel

Guest
Re,

Ouf !
Lourdingue, mais bon. Ca fonctionne.

For Each c In Selection
If Left(c, 2) > 12 Then
Range("g" & c.Row) = CDate(Left(c, 10))
Else
Range("g" & c.Row) = Left(c, 10)
End If
Next c

Mes dates arrivent enfin TOUTES au bon format.

C'est un sujet récurrent mais je n'avais pas réussi à trouver mon bohneur dans les fils précédents.

Merci quand même aux généreux contributeurs de ce fil et des fils traitant ce sujet ces derniers temps.


Abel.
 

Statistiques des forums

Discussions
312 194
Messages
2 086 070
Membres
103 110
dernier inscrit
Privé