Conversion csv -> xls d'un repertoire complet

Résolu/Fermé
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 - 11 févr. 2009 à 11:59
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 19 févr. 2009 à 19:27
Bonjour à tous,
j'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
A voir également:

43 réponses

UsulArrakis Messages postés 7405 Date d'inscription vendredi 28 mars 2003 Statut Contributeur Dernière intervention 27 janvier 2022 3 189
11 févr. 2009 à 12:41
Salut
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
2
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 12:47
je veux en une seul fois. y a quant méme 100 fichiers et ca arrive souvent.

j'ai essayé de l'installé ayeur que dans program files, mais il met des fichier dll dans system32 et c'est la que ca coince
0
UsulArrakis Messages postés 7405 Date d'inscription vendredi 28 mars 2003 Statut Contributeur Dernière intervention 27 janvier 2022 3 189
11 févr. 2009 à 13:21
tu as le lien pour ton logiciel que je vérifie qu'il fait bien ce que tu souhaites
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 14:25
je l'ai testé chez moi, et il marche bien. voici le lien: http://www.convert-files.com/Download/CX.EXE
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 févr. 2009 à 15:13
Bonjour,
Normalement quand tu ouvre un fichier csv avec excel il n'y a besoin de rien d'autre. Suffit juste de le sauver sous.. avec extention xls
Il y à moyen de faire ça facilement avec une petite macro VBA
A+
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 15:25
salut! le probléme c'est qu'il garde le contenu telquel, il ne fait pas les separations des ;
deplus, il faut inserrer la macro dans chaque fichier. c'est un peu lourd
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 févr. 2009 à 15:50
Négatif, si tu l'ouvre à partir d'excel ça fonctionne pas, mais en l'ouvrant à partir de l'explorateur, excel fait automatiquement les séparations.
Ensuite reste à les sauver sous xls.
Je cherche pour importer directement du csv (je connais pour texte mais pas pour csv).
Il ne faudrait pas mettre une macro dans chaque classeur mais une seule à partir d'un classeur général.
Et si ce n'est que pour une seule fois ça vaudrait peut-être la peine de le faire en manuel.
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 17:41
malheureusement, ca va m'arriver souvent
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 févr. 2009 à 18:28
OK..... J'ai trouver un système.
Tu ouvre un classeur (moi je l'ai nommer "EssaisCvsXls.xls" mais pas obligé
Dans un module public ce code
Sub Recupfile()
Dim fs, F, f1, s, sf
Dim Ext As String, Chemin As String
Dim i As Long, Fin As Long
    Ext = "csv"
    'Initialiser le chemin en manuel
    Chemin = "C:\"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set F = fs.GetFolder(Chemin)
    Set sf = F.Files
    For Each f1 In sf
        'Debug.Print f1.Name
        If LCase(Right(f1.Name, 3)) = Ext Then
            ConvertiCvsXls Chemin, f1.Name
        End If
    Next
End Sub

Sub ConvertiCvsXls(Chemin As String, Fichier As String)
Dim TB
Dim Lig As Long, i As Integer, NvNom As String
    Workbooks.Open Filename:=Chemin & Fichier
    With ActiveSheet
        For Lig = 1 To Range("A65536").End(xlUp).Row
            TB = Split(.Cells(Lig, 1), ",")
            For i = 0 To UBound(TB) - 1
                .Cells(Lig, i + 1) = TB(i)
            Next i
        Next Lig
    End With
   Fichier = Left(Fichier, Len(Fichier) - 3) & "xls"
    ActiveWorkbook.SaveAs Chemin & Fichier
    Workbooks(Fichier).Close SaveChanges:=False
End Sub


Je n'ai pas mis de sélection chemin, je te laisse le soins de le mettre en manuel.
Je te conseil aussi de mettre un point d'arret pour ne faire qu'un fichier à la fois pour les tests.
De stoper après le premier et de bien controller que c'est OK (chez moi c'est nickel mais ont ne sait jamais)
Je n'ai pas prévu non plus d'éliminer le fichier cvs, dans un premier temps c'est plus prudent.
Mais il n'y aurais que 2 lignes à ajouter pour les supprimer en automatique.
Pour fichier cvs avec séparateur = ","
Tu dis
A+
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 févr. 2009 à 18:58
J'ai pas penser de te dire,
La macro est valable pour un nombre de colonne indéterminé mais si tes fichiers ont tous la même structure il y a moyen de faire plus rapide
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 19:47
y a qu'un truc qui fonctionne pas, c'est le separateur ",".
j'ai le fichier xls mais avec le méme contenu que le csv. tout en une colonne

edit: je vient de m'apercevoire que sur chaque ligne, il me manque les info jusqu'a la premier virgule

exemple:
csv=
29-DEC-2008 03:00:02.163,100.0,100.0,100.0,49.668750000000003,49.668750000000003,41.5,41.5,0.0,1.0,98.78125,67.534374999999997,67.534374999999997,65.0,54.450000000000003,0.0,15.7125,10.821875,13.4,100.0,0.0,9.6000000000000014,31.900000000000002,18.600000000000001,17.5,0

xls= 00:00.0,100,100,100,49.66875,49.66875,41.5,41.5,0,1,98.78125,67.534375,67.534375,65,54.45,0,15.7125,10.821875,13.4,100,0,9.6,31.9,18.6,17.5,0
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 févr. 2009 à 20:09
Tu peu pas me passer un de tes fichier cvs ?
si oui, tu met sur Cjoint.com et tu met le lien dans un poste suivant
Mais ce serra pour demain.
A+
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
11 févr. 2009 à 20:25
ok,
pour que le fichier soit moin volumineux, je l'ai réduit à 1700ligne, mais normalement, il y en à 10000
http://cjoint.com/data/cnupaFIZoj.htm

es ce que, a tout hasard, tu connaitrait la une ligne de commande pour le chemin? exemple, mettre le chemin de l'emplacement du fichier convertircsvxls .
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 10:13
HaaaaaaaHa , beh ça fonctionne impec.
FAUDRAIT JUSTE VOIR A ELARGIR LES COLONNES !!!!!

0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
12 févr. 2009 à 13:05
j'ai du me planter quelque par alors car ca ne marche pas de mon cotés
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 13:49
Je suis occupé à rendre l'appli automatique et quand ce serra terminer je la mettrais dans une astuce.
Je te communiquerais le lien.
Pour info : J'ai trouvé le problème sur ton fichier, le séparateur n'est pas la virgule (comme normal) mais le point.
Dans la ligne
TB = Split(.Cells(Lig, 1), ".")
Remplace la virgule par un point et tu refait un essais, tu va voir ça va.
Attention, par exemple pour tes dates il te manque les secondes mais il faudra formater les colonnes suivant ce que tu veux.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 14:30
Il y a plein d'erreur sur ton fichier...
1°) le séparateur de la 1ère ligne est la virgule et les suivantes c'est le point. Mais bon, s'il sont tous comme ça je pourrais encore y remédier.
2°) il y a des nombres... tel que 668750000000003,49. et 668750000000003,41 ?? aucun séparateur
or sur d'autres lignes dans la même colonne
40625,49. et 40625,41
Que viennent faires tout ces zéros ? sans séparateur ? c'est juste ?
pour info..
29-DEC-2008 03:00:02.163,100.0,100.0,100.0,49.668750000000003,49.668750000000003,41.
5,41.5,0.0,1.0,98.78125,67.534374999999997,67.534374999999997,65.0,54.450000000000003,0.
0,15.7125,10.821875,13.4,100.0,0.0,9.6000000000000014,31.
900000000000002,18.600000000000001,17.5,0

0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
12 févr. 2009 à 15:24
non, les separteur son que les , les points sont pour les virgule des nombres à 1millionaime de décimale,
pour que tu comprenne, j'ai le fichier xls converti correct : https://www.cjoint.com/?copwYLpuNb
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 15:32
ta date, elle à toujours 163 milliseconde ?????
Si oui... C'est ça qui me perturbe depuis le début
Ton séparateur décimale dans excel c'est quoi ? le point ou la virgule.
J'ai essayé de faire des calculs sur ta copie !! tu a essayé?
Evidemment ça dépend du but de la modif en xls, si c'est juste pour voir !
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 15:28
Je crois que j'ai trouver la spécificité de ton fichier.
Le séparateur est bien la virgule SAUF après la date ou c'est un point !!!!!!!
La sub est un peu plus compliquée et ne pourra servir que pour tes fichiers, normalement le séparateur est le même pour tout le fichier.
Remplace la macro ConvertiCvsXls
par celle-ci
Sub ConvertiCvsXlsSPECIAL()
Dim TB, PR, Txt As String
Dim Lig As Long, i As Integer, AncNom As String
    AncNom = Fichier
    Workbooks.Open Filename:=Chemin & Fichier
    With ActiveSheet
        For Lig = 1 To Range("A65536").End(xlUp).Row
            If Lig > 1 Then
                 PR = Split(.Cells(Lig, 1), ".")
                TB = Split(Mid(.Cells(Lig, 1), Len(PR(0)) + 2), ",")
            Else
                 PR = Split(.Cells(Lig, 1), ",")
                TB = Split(Mid(.Cells(Lig, 1), Len(PR(0)) + 2), ",")
            End If
            .Cells(Lig, 1) = PR(0)
            For i = 1 To UBound(TB) - 1
                .Cells(Lig, i + 1) = TB(i - 1)
            Next i
        Next Lig
    End With
    Fichier = Left(Fichier, Len(Fichier) - 3) & "xls"
    
    If Dir(Chemin & Fichier) = "" Then
        'le fichier xls n'existe pas encore
        ActiveWorkbook.SaveAs Chemin & Fichier
        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 Chemin & Fichier
            Workbooks(Fichier).Close SaveChanges:=False
            Application.DisplayAlerts = True
        Else
            Workbooks(AncNom).Close SaveChanges:=False
        End If
    End If
    If SuppFichier Then
        'supprime le fichier cvs
        Kill Chemin & AncNom
    End If
End Sub

Bien entendu ça va durer un peu plus longtemps.
tu dis...
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 févr. 2009 à 16:40
Autre constatations,
Excel ne prend pas de format date avec des millièmes de seconde, donc ça doit rester en texte
Même en format Double, excel ne prend pas les millionn!ème de milliardième
49.306,250,000,000,006 ??
maximum sur excel...
49,493.750.000.000.6
0
beneton Messages postés 64 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 14 février 2017 5
12 févr. 2009 à 19:08
je suis pas au milliardieme de seconde prés XD

ton script ne fonctionne pas, j'ai fait un imprime ecran de l'erreur et du débogueur: http://cjoint.com/data/cotgk0Ot4d.htm
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 févr. 2009 à 07:16
Je peu lire ton fichier de la façon que tu veux mais tu ne répond pas à mes questions à savoir,
Quel est le but ? Faire des opérations sur les données ? auquel cas, l'exemple que tu met sur Cjoint ne le permet pas.
Ou bien, ce sont les données en texte qui t'intéresse ?
En fonction de ta réponse je te passerait la macros finale.
0