Macro excel de tri alphabétique des lignes d'une série de fichiers csv
anouar1985
Messages postés3Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention22 avril 2008
-
19 avril 2008 à 20:22
anouar1985
Messages postés3Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention22 avril 2008
-
22 avril 2008 à 19:52
Bonjour et merci d'avoir créé ce forum, j’ai trouvé des éléments utiles grâce à vous, mais je n’ai pas réussi à faire la macro souhaitée.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
Bonjour je veux faire une macro sous Excel 2007 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
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
‘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)
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
Acta_6
Messages postés29Date d'inscriptionmercredi 25 avril 2007StatutMembreDernière intervention22 avril 2008 21 avril 2008 à 11:54
Oui. Je pense que la solution de MPi est la meilleure.
Par contre, même si je n'ai jamais cherché a ouvrir un fichier csv sous Excel, je ne pense pas que tu pourras l'empécher d'interpréter la date comme il le fait.
Si tu veux conserver ton format, il faut que tu appliques ton format yyyy/mm/dd a toute la colonne "A" avant de faire le tri.
Columns("A").NumberFormat = "yyyy/mm/dd"
anouar1985
Messages postés3Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention22 avril 2008 21 avril 2008 à 20:43
Bo njour et merci d'avoir créé ce forum, j'ai trouvé des éléments utiles grâce à vous, mais je n'ai pas réussi à faire la macro souhaitée.
Merci
Acta_6 et MPi votre code
effectivement a bien fonctionner mais j’ai un problème des
guillemets qui s’ajoutent pour toutes les lignes si je ferme avec Workbooks(Namecsv).Close True par contre ça marche trés bien quand je ferme
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 21 avril 2008 à 22:18
Est-ce que tes données sont toutes dans la même colonne quand tu importes et que tu fermes ?
Si oui, il faudrait que tu changes le séparateur , par ; avant de l'importer.
Et au lieu d'utiliser Workbooks.Open, il faudrait que tu utilises les méthodes traditionnelles de lecture de fichier
Open fichier For Input As ...
Sinon, il te faudrait convertir tes données.
Tu peux utiliser l'enregistreur de macro pour te générer un code.
Menu Données / Convertir
bouton Suivant
et tu coches la virgule comme séparateur
Autre solution, ce serait de configurer ton système en anglais... ce que je n'aime pas, mais que mes collègues font, faute d'astuces...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
anouar1985
Messages postés3Date d'inscriptionsamedi 19 avril 2008StatutMembreDernière intervention22 avril 2008 22 avril 2008 à 19:52
Merci beaucoup grâce à ce que vous m’avez expliqué
j’ai
réussi à fonctionner mon programme en changeant l
e séparateur ; par , dans mes options régionales
Voici le programme complet
Sub FileOpen() ‘
une procédure pour parcourir tous les fichiers csv dans mon répertoire
Dim
Fichier, Chemin As String
Dim Wb As Workbook
Chemin =
"D:\data" '<--
adapter le chemin du répertoire