|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
Bonjour,
J'ai un probleme de conversion de date. Je recois un fichier d'un logiciel exterieur dont une colonne est constituée de dates. Je fais ceci pour la conversion Code :
Cells(7 + dI, 1) = Format(Cells(7 + dI, 1), "jj/mm/aaaa hh:mm:ss") Mais le résultat me donne des resultats de ce style Par contre pour aout ça marche tres bien, de ceci je passe bien en Pourquoi cela ne marche t'il pas avec septembre au niveau des jours et des années !??? Merci |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 919 ![]() |
Bonjour,
en VBA les formats sont en anglais (il me semble) Code :
Cells(7 + dI, 1) = Format(Cells(7 + dI, 1), "dd/mm/yyyy hh:mm:ss")
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Normalement, dans le VBA, il faut mettre les format en anglais, donc dd/MM/yyyy. Mais je suis étonné que ça marche pour le mois d'août.
Le fichier que tu reçois est un fichier texte ? Le mieux serait déjà de passer par une variable date intermédiaire pour être sûr qu'il la parse correctement. Ce sera plus simple ensuite pour l'affichage.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#4 | ||||||
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
Merci pour vos réponses mais j'ai déja tenté le format anglais
de là Code :
Code :
il a inversé jour et mois car dans excel quand je clique sur "format de cellule", "nombre" pour le remettre dans d'autres formats de dates pour voir, il me met le 9 janvier 2011 au lieu du 1er septembre et si ça avait marché, j'aurais eu mes courbes mais elles ne sont pas là, je les vois quand je met 0 dans les abcisses donc problemes de dates le format de données est de ce type, sauf qu'il y a bien plus de colonnes et de lignes...les colonnes correspondent à des mesures de capteurs sur un satellite et il y a un paquet de lignes car mesures sur 1 journée voir plus...et le but est d'afficher les courbes de ces données, il s'agit d'une macro dont je reprends le code, je n'en suis pas l'auteur. La conversion de la première colonne de dates ne se passe pas bien... Code :
|
||||||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Ce qu'il faut bien comprendre, c'est qu'à priori ta donnée initiale est du texte. Excel ne sait pas que c'est une date. Ensuite, quand tu lui demandes de le formater dans un format de date personnalisé, il attend une date en entrée pour appliquer ce format. Là j'ai envie de dire, on s'en fout du format que tu veux appliquer, le gros problème va être au niveau de la conversion du texte en date. Et là Excel part d'abord du principe que c'est en anglais et ne prendra un format français que si ça ne marche pas, c'est à dire, si le jour est supérieur à 12.
Je pense qu'il faut faire une conversion personnalisée pour être sûr de n'avior aucun problème.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
En tentant la fonction CDate, ça semble passer
ceci devient ça, ce qui me va bizarre car la fonction CDate est la fonction de base que j'avais déja tenté sur d'autres fichiers et ça me générait un bug style incompatibilité de type...je vais voir à moyen terme si ça fonctionne dans tous les cas de figure... Bon weekend. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Vérifie quand même que c'est bon en faisant par exemple MOIS(A1) quelque part. Pour être sûr qu'il a vraiment la bonne date, car même si c'est bon à l'affichage, il ne faudrait pas qu'il y ait une erreur si tu fais des calculs sur les dates par exemple.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#8 | ||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
Les dates sous Excel, c'est comme les styles et les listes à puces dans Word, soit on consacre 2 heures à comprendre comment ça marche, soit on souffre de nombreuses heures entières à tenter, sans espoir, de résoudre le foutoir induit par un léger changement Pour les dates, ça ne résous pas tout, mais ça met sur la piste la plus rapide des test à faire pour analyser le comportement contextuel du pouvoir d'interprétation d'Excel. Citation:
ça marche avec cette syntaxe : car voir le tableau dans le tutoriel sur les dates, ce mois exprimé en lettres et en abrégé ne laisse pas de doutes à l'interpréteur d'Excel. il n'en n'est pas de même pour tous, malheureusement comme va le montrer l'image des tableaux à suivre, mais encore une fois au niveau du pouvoir d'interprétation d'Excel, vu le nombre de langues sous lequel il est porté, on peut comprendre que la tâche n'est pas simple OrmonthData1-2012.jpg On peut constater, dans le 2éme tableau, que si on saisit la date en lettres et en entier tout est OK. Citation:
PS : à noter que les dates sont des nombres pour Excel et qu'à ce titre alignées à droite dans les cellules par défaut, un alignement à gauche indiquera toujours une saisie en format texte ! Cordialement, Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||
|
|
10
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
Effectivement, c'est un truc de fou, j'ai testé du coup avec le mois d'aout et plantage alors que ça marchait pour septembre !
Incompatibilité 13 je crois, probleme de type alors que ça marche sur d'autres mois...et en regardant le tableau, ça fait peur de voir les interprétations d'excel... Plantage sur cette ligne Code :
Cells(7 + dI, 1) = CDate(Cells(7 + dI, 1)) Je m'y remets... |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Oui, c'est ce que je te conseillais au début, écrire toi même ta fonction de parsing...
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
L'inconvenient, c'est que ça rajoute du temps de traitement et vu le nombre de lignes à traiter, j'ai un peu peur du résultat, je vais voir si c'est beaucoup plus lent ou non...
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Si tu récupère ton Range dans un Variant, que tu travailles dessus, puis que te recolles le résultat d'un coup, il n'y a plus d'accès répétés à la feuille et ça doit être très rapide.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#13 | ||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Citation:
Vu que tu as d'origine des dates en texte avec les mois en abrégé US (donc pas des dates en fait pour Excel) . Vu qu'aucun des mois n'est représenté par une chaîne qui se retrouve en entier dans un autre. On peut faire sur cette colonne une série de 12 chercher remplacer pour convertir les mois courts en mois longs puisque comme vu dans mon tableau image, tu peux alors appliquer ta macro de format sans souci... Au niveau vitesse, ça devrait aller très vite, un petit coup d'enregistreur de macros sur janvier te donnera le code voulu.. Citation:
Cordialement, Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||
|
|
00
|
|
|
#14 | ||
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
Finalement, je lis vos réponses après l'avoir fait
Code :
ça marche très bien sur tous les fichiers que j'ai à ma disposition aout et septembre....je n'ai pas pensé à le faire mais faudra que je m'en prenne un et que je modifie quelques dates en remplacant le mois par un que j'ai pas testé histoire de tous les faire pour voir si la ligne passe bien en date, en tout cas, comme ça il a pas bugué et il m'a bien aligné les dates à droite, donc bien converties...à voir si ça marche sur tous les mois quand je le stresserai un peu... ![]() En fait, les fichiers sont fournies par l'équipe thermique et c'est quand le satellite entre en vide thermique (voir photo) que les tests sont faits, il a lieu dans 10 jours pour une durée de 3 semaines, donc ça me laisse du temps pour la finir vu que c'est sur la dernière semaine, je travaille dessus quand j'ai un peu de temps de dispo mais excel et vbs, c'est pas trop ma tasse de thé...la macro sera lancée du poste présent à gauche sur la photo pour traiter les données. Me reste le pdf des courbes à debuguer et une autre partie mais ça avance .
|
||
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Tant que tu ne fais pas du VBA pour des trajectoires de vol habité !
Sinon, pour tes tests, le plus important est de tester des jours supérieurs à 12, c'est là que ça peut poser problème, ce n'est pas une question de août ou septembre. Sinon, une petite fonction pour t'aider : Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
10
|
|
|
#16 |
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Super la photo ( j'ai cru à une machine à laver au départ) !
Sinon, dans le post, je te disais de remplacer les mois courts texte par des mois longs en texte, vu que ton code était OK ainsi, tu évitais sans coup férir les soucis d'inversion de dates ![]() Sinon tu l'utilises comment ton code, car via une boucle la performance temps = pas terrible. Mais en 10 jours, ça passe cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
|
|
00
|
|
|
#17 | ||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Bonjour,
A tester - Sub Remplacement2() - sur ton poste, chez moi c’est OK et ça traite les 10 000 données en moins de 1 sec sous 2003 (plus sous 2010). Je précise le contexte car il induit la nature du résultat.
Code :
Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||
|
|
10
|
|
|
#18 | ||
|
Futur Membre du Club
![]() Inscription : mai 2002 Messages : 37 ![]() |
Merci à vous deux pour les réponses. Je vais regarder ça quand j'aurai un peu de temps. Je l'ai quasiment fini, j'ai débugué l'enregistrement des courbes sous pdf, me reste donc à regarder plus en détails vos réponses et un module de classe à revoir pour faire du dynamique ou au moins agrandir le nombre de champs.
Pour répondre à une question, ça n'est pas une macro qui tourne en temps réel, les tests se font, les thermiciens nous retournent deux fichiers text de données + un autre fichier de mesures de chez nous en radiofréquences et avec la macro, je passe tous ces fichiers dans la moulinette (macro), y a une barre de progression qui indique où on en est et ça créé un fichier excel d'une 20aine d'onglets dont la majorité composées de courbes avec possibilité de répondre oui quand il a fini à un enregistrement au format pdf en plus de l'enregistrement en xls classique; la durée de traitement max est d'environ 3-5mn. Par contre, je ne fais pas de calculs de dates ensuite, c'est juste pour tracer les courbes en fonction du temps Code :
Et ma colonne, je ne connais pas le nombres de lignes donc c'est une boucle for de 65000 mais je sors dès qu'il n'y a plus de dates avec quelque chose de ce style Code :
If Cells(7 + dI, 1) = "" Then Exit For |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com