Conversion csv -> xls d'un repertoire complet

Résolu
beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
lermite222 Messages postés 9042 Statut Contributeur -
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
Configuration: Windows XP
Internet Explorer 7.0

43 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. UsulArrakis Messages postés 7683 Statut Contributeur 3 196
     
    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
  2. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
  3. UsulArrakis Messages postés 7683 Statut Contributeur 3 196
     
    tu as le lien pour ton logiciel que je vérifie qu'il fait bien ce que tu souhaites
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  6. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
  7. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    malheureusement, ca va m'arriver souvent
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  10. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
  11. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    HaaaaaaaHa , beh ça fonctionne impec.
    FAUDRAIT JUSTE VOIR A ELARGIR LES COLONNES !!!!!

    0
  13. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    j'ai du me planter quelque par alors car ca ne marche pas de mon cotés
    0
  14. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  15. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  16. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
  17. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  18. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  19. beneton Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   5
     
    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
  20. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  • 1
  • 2
  • 3