Format de date ISO 8601

PAPA WALKER

XLDnaute Junior
Bonjour à tous,

J'ai cherché sur le forum mais je n'ai pas trouvé mon bonheur. Si la réponse existe déjà, désolé de reposer cette question.

Voilà,
Je dois produire un CSV avec plusieurs champs, dont un champ date.
Mon correspondant me demande de formater mon champ avec une norme iso 8601 en respectant ce format:
yyyy-MM-ddTHH:mmZ ce qui se traduirait pour lui en date sous le format d'exemple:

2013-02-09T13:20+01:00 (pour la date du 9/2/2013 à 13h20)

j'ai cherché dans les formats personnalisés, mais je ne comprends pas bien la signification de la lettre Z en fin du format, ni comment obtenir : +01:00 après mes minutes?

Merci de votre aide
 

Pièces jointes

  • format_date_iso8601.xlsx
    11.8 KB · Affichages: 86

Staple1600

XLDnaute Barbatruc
Re : Format de date ISO 8601

Bonjour (EDITION: Désolé pour la collision, MJ13; (salutations au passage) ;)


Pour comprendre le Z
ISO 8601 - Wikipédia

Et un début de piste en VBA
Code VBA:
Sub ISO8601()
'auteur: Nikolai Sandved
'Returns current system date and time in the ISO 8601 format YYYY-MM-DDThh:mm:ss.
ISODateandtime = Format$(Now(), "yyyy-mm-ddTHH:MM:SS")
MsgBox ISODateandtime
End Sub
 

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

Merci de vos réponses aussi rapides.
J'ai lu le wiki et je comprends bien ce qui est écrit, mais je ne fais pas le lien avec un format de cellule EXCEl qui une fois exporté en Csv donnerait ;2013-02-09T13:20+01:00;
J'ai tenté de formater avec ces Z en mettant un pu plusieurs, en recopiant les exemples.. mais je ne vois jamais le +01:00?

L'idée est vraiment de partir d'une feuille EXCEL et de l'enregistrer en CSV avec un séparateur en ";"
Je fais peut-être fausse route ou mauvaise lecture?
 

Staple1600

XLDnaute Barbatruc
Re : Format de date ISO 8601

Re

J'ai modifié un peu les choses
Code VBA:
Sub Makeiso()
Dim c As Range
For Each c In Selection
c = ISO8601(c)
Next c
End Sub


Code VBA:
Function ISO8601(r As Range)
'code original: Nikolai Sandved
'adapté en fonction VBA perso un samedi pluvieux
Dim ISODateandtime$
ISODateandtime = Format$(r, "yyyy-mm-ddTHH:MM:SS")
ISO8601 = ISODateandtime & "+01:00"
End Function


Dans un classeur vierge saisi en B1 par exemple
=MAINTENANT()+LIGNE()
et recopie vers le bas jusqu'en B13 par exemple
Puis sélectionnes les cellules B1:B13 et lances la macro Makeiso
 
Dernière édition:

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

Bonjour Staple, j'ai exécuté ta macro et la msgbox me renvoie bien la date et l'heure actuelle mais pas dans le format attendu puis que je n'ai tjs pas ce +01:00 à la fin.
Ps j'ai enlevé les SS car il n'en faut pas.
Le format attendu est yyyy-MM-ddTHH:mmZ qui est sensé donner 2013-02-09T15:35+01:00
C'est cette notion de +01:00 qui m'interpelle..?
Cdlt
 

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

Ok Staple,

Je viens de faire tout ça et je pense que ça va marcher comme ça une fois que j'aurai supprimé les SS.
Mais dis donc ça n'était pas du tout réalisable en direct dans les formats personnalisés d'Excel.
Je crois que j'aurais tourné en rond assez longtemps avant de trouver une solution approchante à la tienne.
Je fais des petites choses en excel, mais pas aussi facilement ni aussi vite que toi.
Déjà, la notion de fonction en plus de la macro...
ça donne envie d'en apprendre toujours plus.
Merci
 

Staple1600

XLDnaute Barbatruc
Re : Format de date ISO 8601

Re

C'est en forgeant qu'on devient forgeron ;)
C'est en se mouchant qu'on devient moucheron ;)
C'est en macrotant qu'on devient macroteux ;)

Tu n'as pas deux fichiers exemples à nous soumettre pour essayer d'aller plus loin ?
Un avec les données brutes et un exemple du csv final que tu veux obtenir.
(le tout sans données confidentielles)
 

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

A oui?
Ecoute, je peux t'envoyer ça avec l'idée du fichier final en effet.
Je pensais rechercher des exemples différents et compiler le tout, mais si tu te sens d'humeur pour brainstormer avec moi...

laisse-moi un peu de temps et je prépare un fichier EXCEL avec la globalité..

je poste ici?

Cdlt
 

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

Me revoici avec le fichier que j'ai essayé de faire pour expliquer tout ça...
J'espère avoir été suffisamment clair pour que ça le soit pour toi?
C'est ni très complexe, ni très simple...

je vais continuer d'y bosser de mon coté et je surveillerai tes post pour y répondre au plus vite.
A plus tard et merci de tes conseils..
 

Pièces jointes

  • Fichier_Exemple.xlsx
    13.1 KB · Affichages: 71

Staple1600

XLDnaute Barbatruc
Re : Format de date ISO 8601

Bonsoir

Donc tu nous dis
Le tableau ci-dessus va servir à mettre à jour les vleurs de date d'appication et de prix
Mon idée était est de pouvoir faire des mises à jour en masse en pouvant filtrer sur un ou deux critères des colonnes A et B
Par exemple, je sélectionne tous les Clients de type Famille_1 et j'augmente le Prix de la colonne G de + 100, la colonne J de + 150, etc..
Je flag la colonne A pour toutes les lignes où j'ai mis à jour un prix
Je me servirai de ce flag pour générer le CSV en ne récupérant que les lignes flaggées


Le CSV
Le fichier sera au format .csv ‘ ;’ (point-virgule) taille limitée à 25 caractères maximum et sans espace ni extension dans le nom
Le fichier comprendra systématiquement une ligne d’entête et x lignes de données de mises à jour de tarifs produits.
l'Entête contiendra le Nom du fichier, Date et heure de la génération du fichier, un commentaire
Nom = 25 Caractères max
Date au format iso 8065 évoqué
Commentaires 100 caractères max


Exemple d'entête
Tarif_Q1_2013;2013-04-22T20:00+01:00;Tarifs pour Q1 2013 de la machine de Hyères


Le corps du CSV
Site1;Distrib1;2013-04-22T00:00+01:00;P1;A1;1800;P1;A2;2200;P1;A3;1950P1;A4;1800 ; P2;A1;900;P2;A2;1500;P2;A3;1950;P2;A4;1950;P3;A1;400;P3;A2;400;P3;A3;P3;A4;0
Site3;Distrib3;2013-04-22T00:00+01:00;P1;A1;500;P1;A2;1800;P1;A3;500;P1;A4;500;P2;A1;900;P2;A2;1500;P2;A3;1950;P2;A4;1950;P3;A1;200;P3;A2;400;P3;A3;P3;A4;0

Quelques observations:
Pour tes mises à jour de masse
1) filtre automatique -> critère sur colonne C
2) Edition/Copier/Collage spécial [x]Addition ou [x]Multiplication

Pour moi tes noms d’entêtes risque de poser problème pour la colonne des dates. (à cause de certains caractères)

Je te laisse tester les points 1 et 2.
Pendant ce temps, je vais casser une petite croûte et je repasse plus tard.
 

PAPA WALKER

XLDnaute Junior
Re : Format de date ISO 8601

Merci à toi, je vais explorer tes deux pistes.

Filtrer, flagger, mettre à jour..

Mais pour ce soir je dois me consacrer à mes deux filles...
je reprendrai demain matin..
Pour les entêtes, ce ne sont que des exemples et donc la syntaxe n'est pas la bonne

Merci en tout cas de tes échanges.
Pour le csv, 1ère ligne d'entête est obligatoire et est ignorée lors du traitement d'import du CSV.
Cdlt
 

Modeste geedee

XLDnaute Barbatruc
Re : Format de date ISO 8601

Bonsour®
Bonjour Staple, j'ai exécuté ta macro et la msgbox me renvoie bien la date et l'heure actuelle mais pas dans le format attendu puis que je n'ai tjs pas ce +01:00 à la fin.
Ps j'ai enlevé les SS car il n'en faut pas.
Le format attendu est yyyy-MM-ddTHH:mmZ qui est sensé donner 2013-02-09T15:35+01:00
C'est cette notion de +01:00 qui m'interpelle..?
Cdlt

quand on ajoute Z l'heure indiquée est l'heure UTC (ou GMT)
quand on n'utilise pas Z c'est le décalage entre Heure Locale et l'heure UTC (i.e. décalage selon hiver ou été, variable selon la longitude, pays et saison)
Capture.JPG

voir pièce jointe

et aussi :
Local And GMT Times
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    15.8 KB · Affichages: 162
  • Capture.JPG
    Capture.JPG
    15.8 KB · Affichages: 165
  • dateHeure ISO.xls
    81.5 KB · Affichages: 126

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 779
Membres
103 663
dernier inscrit
b4ri5.c