dates et conversion de format: Format (expression, "dd/mm/yyyy")

djinneo

XLDnaute Nouveau
Bonjour,

A partir d'une date au format nombre (ex: 40953.00), je dois être en mesure de générer la même date au format jj/mm/aaaa (même exemple: 14/02/2012).

Pour cela j'utilise:
Sub ConversDate()
Dim i As Integer
For i = 1 To 3
Cells(i, 4) = Format(Cells(i, 1), "dd/mm/yyyy")
Next i
End Sub
avec 40708.48; 40722.52; 40766.53 respectivement en A1, A2, et A3 (cf. pièce jointe: la macro est déjà écrite avec les exemples)

Ça marche très bien sur certaines dates, mais pour une raison que je ne m'explique pas, ça ne marche pas sur d'autres.
40708.48 donne 14/06/2011: parfait
40722.52 donne 28/06/2011: parfait
40766.53 donne 08/11/2011: BUG!! au lieu de 11/08/2011!!

Je m'arrache d'autant plus les cheveux qu'en le faisant à la main dans Excel, il reconnaît très bien les dates. Alors que le VBA réagit différemment selon les dates :/
Une aide, une idée ?
 

Pièces jointes

  • pbDate.xlsm
    14.2 KB · Affichages: 64

djinneo

XLDnaute Nouveau
Re : dates et conversion de format: Format (expression, "dd/mm/yyyy")

Bonsoir David84. Merci beaucoup, ça fonctionne parfaitement. C'est génial!

Sans vouloir abuser, mais dans l'optique de "comprendre":
format(xxxx, "m/d/yyyy") donne bien une date courte au format jj/mm/aaaa.

A priori, ça semble paradoxal, mais la fonction appelle le format système par défaut, c'est ça ?

En tout cas merci énormément , mon problème est résolu. :)
 

david84

XLDnaute Barbatruc
Re : dates et conversion de format: Format (expression, "dd/mm/yyyy")

Re
en fait, si tu avais testé avec l'enregistreur de macro en :
- sélectionnant A1
- lui appliquant le format de date standard
tu aurais eu la réponse :
Code:
Sub Macro1()
    Range("A1").Select
    Selection.NumberFormat = "m/d/yyyy"
End Sub
Le format de nombre restitué par l'enregistreur de macro est celui que je t'ai indiqué, à savoir la syntaxe anglaise.
A+
 

djinneo

XLDnaute Nouveau
Re : dates et conversion de format: Format (expression, "dd/mm/yyyy")

Merci pour ces précisions. Malheureusement, ce n'est pas suffisant. En effet, en enregistrant au format CSV, je retombe sur un format anglosaxon de type mm/jj/aaaa.
Sub ConversDate()
Dim i As Integer

For i = 2 To 4
Cells(i, 4) = Format(Cells(i, 1), "m/d/yyyy")
Next i

Workbooks("pbDate.xlsm").Worksheets("Feuil1").SaveAs Filename:="essai", FileFormat:=xlCSV, CreateBackup:=False, Local:=False

End Sub

Lien supprimé

PS: dans la méthode SaveAs, passer Local à True, ne change rien.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : dates et conversion de format: Format (expression, "dd/mm/yyyy")

Re
Pas de problème de mon côté.
j'ai fait le test et le format reste le même.
Lance l'enregistreur de macro et enregistre ton fichier au format voulu.
Vérifie le résultat et récupère le code pour avoir la bonne syntaxe.
A+
Edit : précise nous quel est exactement le nom du format utilisé et communique nous le résultat obtenu avec l'enregistreur de macro
 
Dernière édition:

djinneo

XLDnaute Nouveau
Re : dates et conversion de format: Format (expression, "dd/mm/yyyy")

Ca fonctionne dans pbDate.xlsm

Du coup, j'ai littéralement copié/collé la solution dans ma vraie macro ci-jointe. Mais il y a toujours un problème:
- si j'exécute la procédure d'enregistrement sous csv directement, le CSV a des dates anglaises
- pour avoir des dates françaises, il faut que je ferme le classeur, que je le réouvre, que je n'exécute aucune autre procédure sauf celle de l'enregistrement sous CSV, et là, le CSV a des dates françaises.

Une idée d'où ça peut venir ?

Utilisation de sondemulti_macro: (attention, il ne faut pas renommer)
- ouvir sondemulti_macro.xlsm, et cliquer sur le bouton vert "Macro"
- aller chercher le fichier ANCYGL0811.TOB ci-joint (c'est un fichier texte que j'ai du compresser pour le passer en PJ)
- les "bonnes réponses" des boites de dialogues suivantes sont: suivi des lacs, annecy grand lac, sonde ctdsn09, un commentaire, 2
- la date reconnue est 2011-08-11 confirmer ? oui

A partir de ANCYGL0811.TOB, il crée le classeur sondemulti_annecy_grand lac_ctdsn09_ ...etc..._.xls. (également en pièce jointe)
On tombe sur le menu de ce classeur (feuille (ou onglet) "Menu"). La feuille à mettre en CSV s'appelle "RawData".
Pour générer le CSV, il faut cliquer sur le bouton rouge du Menu "Validation et Générer le CSV".
Et donc là on constate que si on le fait directement, les dates sont anglaises. Et que pour avoir le bon format, il faut d'abord fermer le classeur sondemulti_annecy_grand lac_ctdsn09_ ...etc..._.xls. puis le réouvrir. Et cliquer sur "Validation et Générer CSV"

Evidemment, si vous venez d'ouvrir sondemulti_annecy_grand lac_ctdsn09_ ...etc..._.xls, et que vous cliquez sur "Générer le CSV", le CSV va être bon: puisque moi je l'ai fermé, et vous venez de le réouvrir ;-)
Sauf, si après la réouverture de sondemulti_annecy_grand lac_ctdsn09_ ...etc..._.xls , vous utilisez les autres fonctionnalités (par exemple cliquer sur "Vérifier/Modifier Données Sonde", supprimer la ligne 36, puis appuyer sur OK de la boite de dialogue, ou même juste "Enregistrer") . Si juste après ça, on génère le CSV, les dates sont anglaises. Là aussi, il faut fermer le classeur et le réouvrir d'abord.


Le code se trouve dans le module "routine" de sondemulti_macro
L'enregistrement sous CSV dans la procédure "genererCSV"
L'interprétation des dates dans la procédure "remplirRawData" (elle pique les yeux, mais à priori elle n'est pas en cause)
 

Pièces jointes

  • sondemulti_macro.xlsm
    100.3 KB · Affichages: 62
  • sondemulti_annecy_grand lac_ctdsn09_2011-08-11_12H43.xls
    209.5 KB · Affichages: 59
  • ANCYGL0811.TOB.zip
    2.9 KB · Affichages: 38
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87