Conversion csv -> xls d'un repertoire complet
Résoluj'ai une centaine de fichiers csv, que je souhaite convertir en xls (avec comme separateur les ; ).
j'ai trouvé un logiciel sympas: converterXLS
mais c'est logiciel à installé, et sur mon pc du boulot, je n'ai pas les droit administrateur pour.
existe t il quelque chose avec juste un executable?
(ou une autre méthode)
merci
Configuration: Windows XP Internet Explorer 7.0
43 réponses
La problématique porte sur la conversion en lot d'une centaine de fichiers CSV en fichiers XLS avec le séparateur ';', sans droits administrateur pour installer un logiciel. Plusieurs proposent d'utiliser Excel pour lancer une conversion manuelle ou via une fonction Données → Convertir, et d'exécuter une macro de traitement pour automatiser la tâche sur les 100 fichiers. D'autres échanges suggèrent des solutions basées sur des macros et des scripts qui lisent un répertoire et transforment chaque CSV en XLS, compatibles avec Excel 2000 à 2007. En pratique, le choix du séparateur et le mapping des colonnes peuvent nécessiter des ajustements lors de la conversion, car un séparateur mal interprété peut décaler les données.
-
ContributeurSalut
tu veux les convertir tous en une seule fois ou un par un ?
si un par un tu le fais à partir d'excel : ouvrir le csv avec excel puis menu Données / convertir
pour le logiciel que tu as trouvé essaye de l'installer ailleurs que dans ProgramFiles -
ContributeurContent pour toi qu'ont y soit finalement parvenu.
A+ -
c'est super! ca marche aussi bien sur exel2003 que 2007
ca tombe bien j'ai 240 fichier à convertir pour demain
hop, 2min et c'est fini.
merci encore -
ContributeurEn principe le "slach est compris mais je constate que dans "Mes documents..." il manque
ajouter la ligneSub ConvertiCvsXls() Dim TB Dim Lig As Long, i As Integer, AncNom As String AncNom = Fichier If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
Ca devrait aller. -
non, elle y est déja cette ligne
--------------------------------------------------------
'Lire tout les fichiers du répertoir spécifié.
Sub ConvertiRep()
Dim fs, F, f1, s, sf
Dim i As Long, Fin As Long
'-----------------------------------------------------------
'Sélectionner le répertoir
SelectionRep
'-----------------------------------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set F = fs.GetFolder(Chemin)
Set sf = F.Files
For Each f1 In sf
If LCase(Right(f1.Name, 3)) = Ext Then
Fichier = f1.Name
ConvertiCvsXls
End If
Next
End Sub -
ContributeurTu a raison, vu que je n'avais pas plusieurs csv j'ai pas tester cette partie.
dans la sub ConvertiRep
faut ajouter une ligneIf LCase(Right(f1.Name, 3)) = Ext Then Fichier = f1.Name ConvertiCvsXls End If
Note que je comprend pas, sur la démo il y a cette ligne ! -
non, je veux sauvegarder dans le méme repertoire
-
Contributeuril n'est pas prévu de lire dans un répertoir et de sauver dans un autre.
C'est ça que tu veux faire ? -
salut!
j'ai testé sur exel2003, la conversion fonction correctement (en fesant les modif que tu as dit post 33)
mais la sauvegarde de tout le dossier ne fonctionne pas. il manque la syntaxe "/" sur le chemin
http://cjoint.com/data/cvnTqLFP4b.htm
je pense que c'est une bricole, mais je ne sais pas où. -
si j'ai 2 version qui fonctionne ca me va. je reteste le tout, et je te dis(bien que pour la version exel 2003 se sera pour jeudi). merci
-
ContributeurBon désespère pas.. :-)
L'erreur que tu signale ne peut être due qu'a une maivaise insertion de la fonction.
Tu devais la mettre A LA PLACE DE CELLE EXISTANTE, cad d'abord supprimé l'existente et ENSUITE coller la nouvelle à la même place.(dans le même module)
NB: quand il y a une erreur signalée c'est important de donner sont N° et le libellé de l'erreur.
J'ai tester sur 2007 et la fonction ci dessus fonctionne impec.
La version dans la démo fonctionne sur le 2000
Tu veux quoi?
Une version unique qui prend en compte les différences (possible, je l'avais fait mais je l'ai supprimé)
Ou bien une version pour 2007 et une version pour 2000>2003
?? tu dis -
j'ai bien lu et compris. mais ton script ne fonctionne pas chez moi. de plus y va y avoir probléme: j'ai 2 poste a mon boulot où je suis suceptible de faire les conversion et il y en a un avec ecxel 2007 et l'autre 2003
je suis entrain de désespérer -
ContributeurSuite à ton MP... RELIRE MON POSTE 35 SVP.
-
avant l'ouverture de l'explorateur pour choisir un fichier, il y a un bug sur la ligne:
If SelectionFichier() Then
ConvertiCvsXls
je sais pas si s'est parce que je mal inserré. -
ContributeurOK, sur le 2007 c'est différent, j'ai du tester pour trouver.
En fait le 2007 fait directement la convertion (sans rien signaler).
Donc faut modifier la macros, elle ne te servira plus que pour convertir tout le répertoir et faire la mise en forme des colonnes. (mais plus pour convertir csv/xls qui est pris en charge directement par Excel2007)
'Convertir un fichier cvs en xls (EXCEL 2007) . Sub ConvertiCvsXls() Dim TB Dim Lig As Long, i As Integer, AncNom As String AncNom = Fichier Workbooks.Open Filename:=Chemin & Fichier Application.DisplayAlerts = False Application.ScreenUpdating = False With ActiveSheet Cells.NumberFormat = "0.000" Columns("A:A").NumberFormat = "dd mmm yyyy hh:mm:ss" End With If SauveXLS Then Fichier = Left(Fichier, Len(Fichier) - 3) & "xls" If Dir(Chemin & Fichier) = "" Then 'le fichier xls n'existe pas encore ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:= _ xlOpenXMLWorkbookMacroEnabled Workbooks(Fichier).Close SaveChanges:=False Else 'le fichier xls existe, voir si ont l'écrase sans tomber en erreur. If MsgBox("Le fichier " & Fichier & " existe déjà" & Chr(13) _ & "Faut-il l'écraser ?", vbQuestion + vbYesNo, _ "Ecraser fichier") = 6 Then Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:= _ xlOpenXMLWorkbookMacroEnabled Workbooks(Fichier).Close SaveChanges:=False Application.DisplayAlerts = True ElseIf Tous Then 'Eviter la surcharge de classeur si tous les fichiers Workbooks(AncNom).Close SaveChanges:=False Else Application.DisplayAlerts = True Application.ScreenUpdating = True Exit Sub End If End If End If If SuppFichier Then 'supprime le fichier cvs Kill Chemin & AncNom End If Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Tu dis, et en fonction de ta réponse je modifiérais la démo.
-
oui, merci, mais ca résoud toujours pas le probléme de ma colone où la date et l'heure sont toute les méme alors qu'entre chaque ligne y devrai y avoir 10 seconde de plus a chaque fois.
en plus, quand j'ouvre le fichier converti et sauvegardé, il y a un message "se fichier n'a pas le format correct, voulais vous quand méme ouvrir?" je mets oui, et je me retrouve avec le méme fichier qu'au départ(tout en une colonne, comme s'il n'a pas été converti) -
ContributeurComprend pas, je fait exactement...
Sélection Standard
et ajouter les 2 lignes.
résultat
https://www.cjoint.com/?cqjEb6FVPa
a+
EDIT, il y a autre chose qui cloche, c'est le format pour sauver, j'ai rectifier sur la démo
2 lignes à modifier (ou a ajouter une partie)
ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:=xlExcel5
-
j'avais trouvé, mais ca me fait toujours la méme date sur les 8000lignes
-
ContributeurTu doit employer le format Standard, quand il y a des dates avec des heures c'est du type 39811,1253722569
et en format numérique tu n'a plus que 3 décimales.
Et ajouter les 2 lignes ci-dessous avant le WithCells.NumberFormat = "0.000" Columns("A:A").NumberFormat = "dd mmm yyyy hh:mm:ss"
Mais en principe, c'est chacun qui doit adapter suivant ses besoins, en cherchant un peu tu aurais trouver
A+ -
ca marche pas. ta conversion du début me modifie toute la colonne à la méme date: exemple 29/12/2008 00:00:00 sur toute la colonne
- 1
- 2
- 3