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. Contributeur
      Content pour toi qu'ont y soit finalement parvenu.
      A+
      0
      1. 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
        0
        1. Contributeur
          En principe le "slach est compris mais je constate que dans "Mes documents..." il manque
          ajouter la ligne
          Sub 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.
          0
          1. 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
            0
            1. Contributeur
              Tu a raison, vu que je n'avais pas plusieurs csv j'ai pas tester cette partie.
              dans la sub ConvertiRep
              faut ajouter une ligne
                      If 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 !
              0
              1. non, je veux sauvegarder dans le méme repertoire
                0
                1. Contributeur
                  il n'est pas prévu de lire dans un répertoir et de sauver dans un autre.
                  C'est ça que tu veux faire ?
                  0
                  1. 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ù.
                    0
                    1. 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
                      0
                      1. Contributeur
                        Bon 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
                        0
                        1. 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
                          0
                          1. Contributeur
                            Suite à ton MP... RELIRE MON POSTE 35 SVP.
                            0
                            1. 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é.
                              0
                              1. Contributeur
                                OK, 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.

                                0
                                1. 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)
                                  0
                                  1. Contributeur
                                    Comprend 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
                                    0
                                    1. j'avais trouvé, mais ca me fait toujours la méme date sur les 8000lignes
                                      0
                                      1. Contributeur
                                        Tu 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 With
                                                Cells.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+
                                        0
                                        1. 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
                                          0
                                          • 1
                                          • 2
                                          • 3