![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: juin 2006
Messages: 3
|
Bonjour,
J'ai un problème avec Excel. Lorsque je fais une conversion d'un *.csv vers *.xls grâce à des macros ; le format des dates n'est pas respecté, Excel n'utilise que le format américain. par exemple la date 21/06/2006 n'est pas reconnu sous excel lors de cette conversion. existe-il une solution à ce problème ? PS:J'ai testé cette macro sous Excel 2007 beta 2 et j'ai constaté le même problème ? Microsoft ou des développeurs ont-ils trouvé des solutions ? |
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
Bonjour
cela se fait, j'en ai un exemple mais je ne suis pas sur le bon ordi. Si personne ne t'a dépanné, je le fais dans la matinée A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
re
tu peux t'inspirer de ce code réalisé pour .dat : ' Sélection du fichier de données Dim Ouvrir As Variant ChDir (ThisWorkbook.Path & '\\ARTIS') ' début zone récup .dat 'ouverture de fichier .dat Ouvrir = Application.GetOpenFilename(filefilter:='Fichier Artis (*.dat),*.dat', Title:='Récupération des Données ARTIS') If Ouvrir = False Then MsgBox 'aucun fichier sélectionné', vbOKOnly + vbCritical, 'fin de procédure ' Sheets('Accueil').Select erreur = 1 Exit Sub End If ' utilisation d'Array car données trop nombreuses (sup à env 60 colonnes sur XL97) Dim ColumnArray(1 To 256, 1 To 2) As Integer Dim x As Integer ' ColumnArray contient les n° de colonnes et le type de données à prendre encompte ' 1 standard, 4 date For x = 1 To 256 ColumnArray(x, 1) = x ColumnArray(x, 2) = 1 Next x 'Définition des colonnes à mettre au format date '_________________ 'méthode par tableau vba 'Dim Coldates(1 To 10) As Integer ' Coldates(1) = 25 ' Coldates(2) = 52 ' Coldates(3) = 53 ' Coldates(4) = 56 ' Coldates(5) = 64 ' Coldates(6) = 67 ' Coldates(7) = 0 ' Coldates(8) = 0 ' Coldates(9) = 0 ' Coldates(10) = 0 ' For x = 1 To 10 ' If Not Coldates(x) = 0 Then ' ColumnArray(Coldates(x), 1) = Coldates(x) ' ColumnArray(Coldates(x), 2) = 4 ' End If ' Next x '________________ ' Ouverture du fichier .dat Workbooks.OpenText Filename:=Ouvrir _ , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _ :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _ False, Comma:=False, Space:=False, Other:=False, _ FieldInfo:=ColumnArray
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
bonjour,
Merci pour ta réponse. Je ne comprends pas très bien, tu me conseille de passer par un format *.dat. Faire *.csv -> *.dat -> *.xls ? Je suis débutant sous VB dans Excel et je ne sais pas comment adapter ton code pour corriger mon problème ? Peux-tu m'expliquer un pe plus en détails ? Merci |
|
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
Je vais expliquer les manip que je n'arrive pas à effectuer avec les macro VB :
Ouverture du fichier *.csv Conversion *.csv -> *.xls Trier en fonction des dates et supprimer les lignes hors du mois. (par exemple, on sélectionne le mois de juin et toute les lignes qui ne correspondent pas au mois de juin sont supprimées). Créer un graphique dynamique Sauvegarder ce fichier sous Graphique.xls Voila en quelques mots ce que j'aimerais réaliser grâce à une macros sous Excel. Malheuresement le format de date me bloque... |
|
|
|
#6 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
re
une petite explication : dans l'exemple que je te donne, je change de répertoire pour me placer là où se trouve mes fichiers (chdir) ensuite j'ouvre la boite de dialogue XL qui m'affiche les fichiers présents dans ce répertoire, filtré dan smon cas sur les .dat mais tu remplaces par .csv à l'ouverture du fichier, je convertis les colonnes qui le nécessite en date (valeur 4 utilisée dans workbook.opentext, champ fieldinfo), méthode trouvée sur site microsoft. si tu veux comprendre regarde l'aide vba pour les mots-clé comme opentext... (éclaire le mot et fais F1) par contre pour les csv, ton délimiteur entre colonnes est peut-être la virgule ou le point virgule. Tu peux le savoir en utilisant l'enregistreur de macro A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#7 (permalink) |
|
Super Moderator
Date d'inscription: février 2005
Localisation: Rennes
Version Excel : Excel 2000 (PC)
Messages: 8 463
|
Bonjour
Pour faire suite à ce que dit Eric si tu ouvres ton csv tu peux choisir lors de l'ouverture le format de la colonne en date JMA Bonne journée
__________________
Pascal(Visitez mon Blog Photo)Vous pouvez devenir "Supporter XLD", plus de renseignements ICI |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
Salut Pascal
je pense qu'en ouverture manuelle ordi12 n'a pas de pb, c'est avec vba que les dates sont interprètées us mais effectivement quand je parle de l'analyseur de macro, si ordi12 sélectionne les formats par colonne, le code généré la fait apparaitre il me semble A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#9 (permalink) |
|
Guest
Messages: n/a
|
Bonjour,
mon délimitateur est en effet la virgule, mais il est vrai que manuellement je n'ai aucun problème. c'est seulement avec VB que les dates sont mal interprétées. Je teste vos solutions et je vous tiens informer. |
|
|
|
#10 (permalink) |
|
Guest
Messages: n/a
|
Je viens de tester cette macro :
Sub Macro() ' Sélection du fichier de données Dim Ouvrir As Variant ' début zone récup .csv 'ouverture de fichier .dat Ouvrir = Application.GetOpenFilename(filefilter:='Fichier d'Analyse (*.csv),*.csv', Title:='Récupération des Données Génésis') If Ouvrir = False Then MsgBox 'Aucun fichier sélectionné', vbOKOnly + vbCritical, 'Fin de procédure ' Sheets('Accueil').Select erreur = 1 Exit Sub End If ' utilisation d'Array car données trop nombreuses (sup à env 60 colonnes sur XL97) Dim ColumnArray(1 To 256, 1 To 2) As Integer Dim x As Integer ' ColumnArray contient les n° de colonnes et le type de données à prendre encompte ' 1 standard, 4 date For x = 1 To 256 ColumnArray(x, 1) = x ColumnArray(x, 2) = 1 Next x 'Définition des colonnes à mettre au format date '_________________ 'méthode par tableau vba 'Dim Coldates(1 To 10) As Integer ' Coldates(1) = 25 ' Coldates(2) = 52 ' Coldates(3) = 53 ' Coldates(4) = 56 ' Coldates(5) = 64 ' Coldates(6) = 67 ' Coldates(7) = 0 ' Coldates(8) = 0 ' Coldates(9) = 0 ' Coldates(10) = 0 ' For x = 1 To 10 ' If Not Coldates(x) = 0 Then ' ColumnArray(Coldates(x), 1) = Coldates(x) ' ColumnArray(Coldates(x), 2) = 4 ' End If ' Next x '________________ ' Ouverture du fichier .csv Workbooks.OpenText Filename:=Ouvrir _ , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _ :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _ False, Comma:=False, Space:=False, Other:=False, _ FieldInfo:=ColumnArray End Sub Malheureusement, le format des dates n'est pas correct. Cette macro était-elle bonne ? Comment puis-je réaliser ce projet (voir le message précédent) ? Merci de vos conseils |
|
|
|
#11 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
re
1/ je pense que la première partie fonctionne (ton csv s'est affiché et tu l'as ouvert 2/ensuite imaginons que tu veux la colonne 4 et la 8 en date, modifie comme suit : 'méthode par tableau vba Dim Coldates(1 To 10) As Integer Coldates(1) = 4 Coldates(2) = 8 Coldates(3) = 0 Coldates(4) = 0 Coldates(5) = 0 Coldates(6) = 0 Coldates(7) = 0 Coldates(8) = 0 Coldates(9) = 0 Coldates(10) = 0 For x = 1 To 10 If Not Coldates(x) = 0 Then ColumnArray(Coldates(x), 1) = Coldates(x) ColumnArray(Coldates(x), 2) = 4 End If Next x '________________ j'ai en effet prévu jusqu'à 10 colonnes dates il faut que tu enlèves les ' de début de ligne (mise en commentaire) et que tu mettes la numéro des colonnes qui t'intéressent et 0 pour remplir coldates jusqu'à l'indice 10 A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#12 (permalink) |
|
Guest
Messages: n/a
|
Voila ce que j'ai modifié dans la macros :
'méthode par tableau vba Dim Coldates(1 To 3) As Integer Coldates(1) = 6 Coldates(2) = 10 Coldates(3) = 11 For x = 1 To 3 If Not Coldates(x) = 0 Then ColumnArray(Coldates(x), 1) = Coldates(x) ColumnArray(Coldates(x), 2) = 4 End If Next x '________________ Les colonnes que je veux en date sont les colonnes 6, 10 et 11. Malheureusement, lorsque j'éxécute cette macro le format de date n'est pas bon. J'avais également vu une solution sur le site de Microsoft mais je n'ai eu aucun résultat satisfaisant (solution trouvé sur le site : http://support.microsoft.com/default...%3Bfr%3B911750) Comment coriger ce problème, et de plus je n'arrive pas non plus à trier selon les dates puisque le format n'est pas bon ... |
|
|
|
#13 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
re
envoie_moi si non confidentiel un petit fichier csv que je vois si je peux te dépanner eric.seigneur@freesbee.fr A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
|
|
#15 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2006
Localisation: Bois Guillaume (76)
Messages: 2 033
|
re
c'est ok on va travailler en direct , on reviendra sur le forum pour que les curieux y trouvent des infos, une fois que ce sera debuggé A+
__________________
A+ Pas à pas se fait notre chemin. Pas à pas.. |
|
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|