Conversion csv -> xls d'un repertoire complet

Résolu
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

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.

Bobot (l’IA à votre service)
  1. Contributeur
    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
    1. 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
      1. Contributeur
        tu as le lien pour ton logiciel que je vérifie qu'il fait bien ce que tu souhaites
        0
        1. Contributeur
          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
          1. 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. Contributeur
              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
          2. malheureusement, ca va m'arriver souvent
            0
            1. Contributeur
              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
              1. Contributeur
                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
                1. 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. Contributeur
                    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
                2. 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
                  1. Contributeur
                    HaaaaaaaHa , beh ça fonctionne impec.
                    FAUDRAIT JUSTE VOIR A ELARGIR LES COLONNES !!!!!

                    0
                    1. j'ai du me planter quelque par alors car ca ne marche pas de mon cotés
                      0
                      1. Contributeur
                        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
                        1. Contributeur
                          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
                          1. 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. Contributeur
                              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
                          2. Contributeur
                            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
                            1. Contributeur
                              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
                              1. 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
                                1. Contributeur
                                  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