Bonjour et merci j’ai beaucoup appris grâce à votre forum, mais je n’ai pas réussi à faire la macro souhaitée.
Je veux faire une macro sous Excel 2007 (pas sur Excel 2003) qui permet:
- de chercher l'ensemble des fichier csv du répertoire
- d'ouvrir le 1er fichier csv
- de trier les lignes par ordre alphabétique (actuellement les fichiers sont triés par contrordre alphabétique)
- de le fermer en enregistrant
- puis de passer au fichier csv suivant, et ainsi de suite.
J'ai beaucoup essayé mais le problème que Excel ouvre le fichier csv il divise une ligne csv en plusieurs colonnes et quand il ferme il n'arrive pas à remettre le fichier csv dans le bon ordre (plus précisément, excel change le format de la date de la version date "alphabétique" "yyyy-mm-dd" à la version date système (?) : m/d/yyyy
De plus je n’ai pas pu trier toute la ligne, car cela ne trie que la date (1ère colonne) et non toutes les données de la ligne.
Par ailleurs, la première ligne définissant des champs des csv (cf exemple plus bas) ne doit pas être « triée » et doit rester en 1ère ligne pour être comprise par un autre logiciel.
voici le code actuel
‘voici la fonction de tri (inv en fait il inverse seulement puisque mes fichiers csv sont déjà trier mais dans le mauvais ordre, ie par dates décroissantes et non par dates croissantes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub appellea() Dim Namecsv As String Dim NamePath As String Namecsv = "CAC40 2007-2008" NamePath = "D:\" & Namecsv Workbooks.Open "D:\CAC40 2007-2008" NamePath inva Workbooks("CAC40 2007-2008").Close True Namecsv End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub inv() Dim I As Integer Dim NbreLigne , nb_2 As Integer Dim aide As String Dim Cel As Range 'On affecte la cellule "A1" à la variable Cel Set Cel = Range("A1") NbreLigne = Cel.End(xlDown).Row - 1 nb_2 = Int(NbreLigne / 2) 'If Range("A1").Offset(1) > Range("A1").Offset(2) Then For i = 1 To nb_2 aide = Str(Cel.Offset(i)) Cel.Offset(i) = Str(Cel.Offset(NbreLigne + 1 - i)) Cel.Offset(NbreLigne + 1 - i) = aide Next i 'End If End Sub
voici un fichier csv exemple: "CAC40.csv"
Date,Open,High,Low,Close,Volume,Adj Close
2008-04-18,4882.29,4976.37,4878.40,4961.69,192982500,4961.69
2008-04-17,4877.07,4900.66,4834.22,4862.14,165843700,4862.14
2008-04-16,4820.27,4863.06,4789.28,4855.10,181523100,4855.10
2008-04-15,4801.00,4820.75,4741.06,4780.68,118835800,4780.68
2008-04-14,4755.07,4793.63,4750.28,4766.49,119717800,4766.49
2008-04-11,4891.84,4917.89,4775.16,4797.93,153178100,4797.93
2008-04-10,4875.48,4880.59,4789.63,4859.42,161154900,4859.42
2008-04-09,4888.92,4924.57,4868.19,4874.97,127023000,4874.97
2008-04-08,4908.16,4914.43,4878.73,4912.69,113384100,4912.69
2008-04-07,4936.25,4959.97,4926.67,4944.60,128312000,4944.60
Idéalement, le fichier csv modifié doit donc devenir comme cela :
Date,Open,High,Low,Close,Volume,Adj Close
2008-04-07,4936.25,4959.97,4926.67,4944.60,128312000,4944.60
2008-04-08,4908.16,4914.43,4878.73,4912.69,113384100,4912.69
2008-04-09,4888.92,4924.57,4868.19,4874.97,127023000,4874.97
2008-04-10,4875.48,4880.59,4789.63,4859.42,161154900,4859.42
2008-04-11,4891.84,4917.89,4775.16,4797.93,153178100,4797.93
2008-04-14,4755.07,4793.63,4750.28,4766.49,119717800,4766.49
2008-04-15,4801.00,4820.75,4741.06,4780.68,118835800,4780.68
2008-04-16,4820.27,4863.06,4789.28,4855.10,181523100,4855.10
2008-04-17,4877.07,4900.66,4834.22,4862.14,165843700,4862.14
2008-04-18,4882.29,4976.37,4878.40,4961.69,192982500,4961.69
Merci et à bientôt
Partager