Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBS] Convertion xlsx vers csv et renommage

Sujet résolu
    22 septembre 2021 à 8:58:09

    Bonjour,

    Alors je sais qu'il y a déjà beaucoup de solution pour ce genre de demande sur pleins de forum mais j'ai beau toutes les avoirs essayé je n'arrive pas à faire fonctionner mon code. J'ai donc décidé de tout supprimer et faire un "squelette" de mon de code afin de savoir les étapes que je dois faire dans l'idée et de sollicité votre aide pour son aboutissement. :lol: 

    La partie de mon programme ou j'aurais besoin de votre aide est la partie VBS ou je vais dans mon dossier "c:\ScriptTestXlsx" récupérer les fichier xlsx pour les ouvrir, les enregistrer sous cvs dans le répértoire "c:\ScriptTestCsv" avec un renommage ou je rajoute juste à la fin du fichier "_Csv" par exemple 

    "toto - Documentations" = " toto - Documentations_Csv

    Mon premier script enregistrait bien mais fichier mais le laissait en xlsx, le renommais en "FALSE" et le déposait dans "Documents" o_O

    Voici mon nouveau VBS : 

    '****************************************************************************************************************
    ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
    ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
    '****************************************************************************************************************
    
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    Dim oExcel
    Set oExcel = CreateObject("Excel.Application")
    
    Dim oBook
    
    FOR %%f ("C:\ScriptTestXlsx\*.xlsx") DO (
        AncienNom =  'Recuperer le nom du fichier
        NouveauNom = AncienNom & "_Csv" ' Rajoute le "_Csv" à chaque fin de nom
        
        Set oBook = oExcel.Workbooks.Open("c:\ScriptTestXlsx\" & AncienNom) 'Ouvre le fichier 
        oBook.SaveAs Filename="C:\ScriptTestCsv\" & NouveauNom, FileFormat=xlCSVUTF8 'Le convertie et l'enregistre avec le nouveau nom 
        ) 
        
    
    oBook.Close False
    oExcel.Quit

    Je sais que ma boucle For %%f n'est pas bonne mais je n'ai pas trouvé encore l'équivalant de cette boucle en VBS 

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2021 à 11:53:32

      Dans l'absolu pas besoin de changer le nom, puisque son extension va changer.
      Tu déclares un FSO (FileSystemObject) mais tu ne l'utilises pas ??? avec lui tu peux parcourir ton dossier, récupérer le nom du fichier, l'extension, etc

      on trouve plein d'exemple comme ici https://www.it-swarm-fr.com/fr/vbscript/vbscript-liste-tout-pdf-fichiers-dans-le-dossier-et-les-sous-dossiers/970358480/ 

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2021 à 12:25:06

        Merci de ta réponse, effectivement je n'utilisais pas le FSO que j'ai déclaré car je ne comprenais pas trop comment l'utiliser correctement donc je l'ai laissé pour ne pas l'oublier. 

        J'ai essayé de comprendre les codes sur les liens que tu m'a envoyé et SI j'ai bien compris je part peut être sur la bonne voix je te montre mon script et je continue de me renseigner. 

        '****************************************************************************************************************
        ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
        ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
        '****************************************************************************************************************
        
        
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objStartFolder = "C:\ScriptTestXlsx\"
        
        Set objDossier = objFSO.GetFolder(objStartFolder)
        
        Set colFichiers = objDossier.Files
        
        For Each objFichier in colFichiers
          strFileName = objFichier.Name
        
          If objFSO.GetExtensionName(strFileName) = "xlsx" Then
              Wscript.Echo objFichier.Name
          End If
        
          Next
        
        Dim oExcel
        Set oExcel = CreateObject("Excel.Application")
        
        Dim oBook
        
        FOR each objFichier in objDossier(
        
            Set oBook = oExcel.Workbooks.Open("c:\ScriptTestXlsx\") 
            oBook.SaveAs Filename="C:\ScriptTestCsv\", FileFormat=xlCSVUTF8 'Le convertie et l'enregistre 
            ) 
            
        
        oBook.Close False
        oExcel.Quit



        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2021 à 12:34:52

          sauf que ta conversion en csv devrait se faire dans ta 1ère boucle (ligne 18), pas besoin d'en avoir une seconde (déplacer tes déclarations lignes 23-26 avant)

          tu as oublié le nom du fichier quand tu demandes à l'ouvrir (ligne 30) et le sauvegarder

          et il faut fermer le oBook dans la boucle (après le saveas)

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2021 à 14:30:14

            En effet :D j'ai modifié tout ca et j'ai lancé mon code mais rien n'est fait ^^' le script ne m'affiche pas de message d'erreur mais ne convertie rien non plus. J'ai pas trop compris o_O 

            '****************************************************************************************************************
            ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
            ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
            '****************************************************************************************************************
            
            
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            objStartFolder = "C:\ScriptTestXlsx\"
            
            Set objDossier = objFSO.GetFolder(objStartFolder)
            
            Set colFichiers = objDossier.Files
            
            For Each objFichier in colFichiers
              strFileName = objFichier.Name
            
              If objFSO.GetExtensionName(strFileName) = "xlsx" Then
                Dim oExcel
                Set oExcel = CreateObject("Excel.Application")
            
                Dim oBook
                Set oBook = oExcel.Workbooks.Open("c:\ScriptTestXlsx\*.xlsx") 
                oBook.SaveAs Filename="C:\ScriptTestCsv\", FileFormat=xlCSVUTF8 
                oBook.Close False
                oExcel.Quit
              End If
              msgbox"test"
              Next
            



            • Partager sur Facebook
            • Partager sur Twitter
              22 septembre 2021 à 15:08:53

              Euh tu as vu ce que tu essais d'ouvrir en ligne 22 ? *.xls  .... :waw:

              Tu dois ouvrir le fichier de ta boucle (strFileName), il faut vérifier que objFichier.Name renvoie uniquement le nom du fichier.

              idem pour le saveas, le nom de fichier doit être indiqué strFileName & ".csv" (il y aura double extension dans le nom (Fichier.xlsx.csv) mais pas très grave, dans un 1er temps )

              l'objet oExcel peut être créé avant la boucle et quitter après, ça évite d'en ouvrir plusieurs.

              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2021 à 15:27:51

                Euh oui pourquoi ? :-° j'aimerais que mon script convertissent touts les fichiers xlsx que je lui donne dans le dossier "C:\ScriptTestCsv\" 

                Alors si j'ai bien compris une fois modifier mon script devrais être comme ca : 

                '****************************************************************************************************************
                ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
                ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
                '****************************************************************************************************************
                
                
                Set objFSO = CreateObject("Scripting.FileSystemObject")
                objStartFolder = "C:\ScriptTestXlsx\"
                
                Set objDossier = objFSO.GetFolder(objStartFolder)
                
                Set colFichiers = objDossier.Files
                
                Dim oExcel
                
                For Each objFichier in colFichiers
                  strFileName = objFichier.Name
                
                  If objFSO.GetExtensionName(strFileName) = "xlsx" Then
                    
                    Set oExcel = CreateObject("Excel.Application")
                
                    Dim oBook
                    Set oBook = oExcel.Workbooks.Open("c:\ScriptTestXlsx\Classeur1.xlsx") 
                    oBook.SaveAs Filename="C:\ScriptTestCsv\" strFileName & ".csv", FileFormat=xlCSVUTF8 
                    
                End If
                    msgbox"test"
                    oBook.Close False
                    oExcel.Quit
                Next
                



                • Partager sur Facebook
                • Partager sur Twitter
                  22 septembre 2021 à 15:49:35

                  tu m'as mal lu ......

                  '****************************************************************************************************************
                  ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
                  ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
                  '****************************************************************************************************************
                  Dim oExcel
                  Dim oBook 
                  
                  objStartFolder = "C:\ScriptTestXlsx\"
                  objDestFolder= "C:\ScriptTestCsv\" 
                  
                  Set objFSO = CreateObject("Scripting.FileSystemObject")
                  
                  Set objDossier = objFSO.GetFolder(objStartFolder)
                   
                  Set colFichiers = objDossier.Files
                   
                  
                  Set oExcel = CreateObject("Excel.Application")
                   
                  
                  For Each objFichier in colFichiers
                    strFileName = objFSO.GetBaseName(objFichier) ' on récupère le nom du fichier sans extension
                   
                    If objFSO.GetExtensionName(objFichier.Name) = "xlsx" Then
                       
                   
                      Set oBook = oExcel.Workbooks.Open(objStartFolder & objFichier.Name)
                      oBook.SaveAs Filename:=objDestFolder & strFileName & ".csv", FileFormat:=xlCSV 'il se peut que xlCSVUTF8 ne fonctionne pas
                      oBook.Close False     
                    End If
                    msgbox"test"
                  
                  Next
                  oExcel.Quit


                  Edit: j'ai fait quelques modifications

                  Edit2: correction du := ligne 28

                  -
                  Edité par umfred 22 septembre 2021 à 18:25:15

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 septembre 2021 à 17:30:03

                    Ca parait plus lisible que ce que j'avais fait sur certain point mais ca ne fait rien non plus o_O J'ai donc mit des msgbox à différents endroits pour voir à partir d'où ca "bug" et jusqu'au "(2) test" tout ce passe bien et ensuite rien. Pourtant j'ai bien un fichier "Classeur1.xlsx" dans le dossier et je ne vois pas ou il y aurais un problème dans la boucle :(  Est-ce que je n'aurais pas un problème dans le paramétrage de ma boucle ? au niveau de "objFichier" in "colFichiers"

                    '****************************************************************************************************************
                    ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
                    ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
                    '****************************************************************************************************************
                    Dim oExcel
                    Dim oBook
                    msgbox"(1) test"
                    objStartFolder = "C:\ScriptTestXlsx\" ' Fichier départ
                    objDestFolder= "C:\ScriptTestCsv\" ' Fichier de déstination 
                     
                    Set objFSO = CreateObject("Scripting.FileSystemObject")
                     
                    Set objDossier = objFSO.GetFolder(objStartFolder)
                      
                    Set colFichiers = objDossier.Files
                      
                     
                    Set oExcel = CreateObject("Excel.Application")
                      
                    msgbox"(2) test"
                    For Each objFichier in colFichiers
                      strFileName = objFSO.GetBaseName(objFichier) ' on récupère le nom du fichier sans extension
                      
                      If objFSO.GetExtensionName(objFichier.Name) = "xlsx" Then
                          
                      
                        Set oBook = oExcel.Workbooks.Open(objStartFolder & objFichier.Name)
                        oBook.SaveAs Filename=objDestFolder & strFileName & ".csv", FileFormat=xlCSV 
                        oBook.Close False    
                      End If
                      msgbox"(3) test"
                     
                    Next
                    oExcel.Quit

                    EDIT :
                     Alors je m'excuse... j'ai laissé les documents dans mon ancien fichier qui était "C:\ScriptTestXls" et non pas "C:\ScriptTestXlsx" donc déjà maintenant tout les msgbox fonctionne donc le script se déroule bien MAIS ca serais trop beau que ce sois juste ca :( Donc dans le bon dossier cette fois j'ai mit 2 Fichiers Excel. J'ai lancer le programme un fichier à bien été généré mais je retombe sur mon ancien problème le fichier se génère dans "Documents" avec le nom FALSE.xls photo ci-dessous : 

                    Donc le script se déroule bien mais je n'ai pas le bon fichier de destination, le renommage et l'extension ne sont pas bon non plus je pense que j'ai encore un problème sur mon saveas :o

                    -
                    Edité par RemyDom 22 septembre 2021 à 18:12:24

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 septembre 2021 à 18:25:51

                      tu peux afficher dans le msgbox ligne 20 le nombre de fichiers du dossier:

                      msgbox "(2): nb fichiers: " & colFichiers.Count

                       Si 0, il faut vérifier si il y a bien des fichiers dans ton répertoire.

                      tu peux aussi rajouter un msgbox à la ligne 23 et à la fin, pour voir si il ne plante pas en cours de route.

                      Ah, et il faut mettre := pour les paramètres nommés de SaveAs (un oubli de correction de ma part) :

                       oBook.SaveAs Filename:=objDestFolder & strFileName & ".csv", FileFormat:=xlCSV

                      -
                      Edité par umfred 22 septembre 2021 à 18:26:46

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 septembre 2021 à 10:56:37

                        Le problème c'est que j'ai fait exprès de ne pas mettre les ":" avant le = car quand je fait ca il me met toujours "instructions attendue" donc je ne comprend pas 

                        Je t'envois le code avec l'erreur : 

                        '****************************************************************************************************************
                        ' Convertir puis renommer un fichier xlsx se trouvant dans le répertoire : c:\ScriptTestXlsx\
                        ' Mettre la version CSV dans le répertoire : c:\ScriptTestCsv\
                        '****************************************************************************************************************
                        Dim oExcel
                        Dim oBook
                        msgbox"(1) test"
                        objStartFolder = "C:\ScriptTestXlsx\" ' Fichier départ
                        objDestFolder= "C:\ScriptTestCsv\" ' Fichier de déstination 
                        
                        Set objFSO = CreateObject("Scripting.FileSystemObject")
                         
                        Set objDossier = objFSO.GetFolder(objStartFolder)
                          
                        Set colFichiers = objDossier.Files
                          
                         
                        Set oExcel = CreateObject("Excel.Application")
                          
                        msgbox"(2) Nombre de fichier : " & colFichiers.Count
                        For Each objFichier in colFichiers
                        
                          strFileName = objFSO.GetBaseName(objFichier) ' on récupère le nom du fichier sans extension
                          
                          If objFSO.GetExtensionName(objFichier.Name) = "xlsx" Then
                              
                            Set oBook = oExcel.Workbooks.Open(objStartFolder & objFichier.Name)
                            oBook.SaveAs Filename:=objDestFolder & strFileName & ".csv", FileFormat:=xlCSV 
                            oBook.Close False    
                          End If
                          msgbox"(5) Fin script"
                         
                        Next
                        oExcel.Quit



                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 septembre 2021 à 15:04:48

                          OK, ça doit être une différence entre VBS et VBA pour le coup. (en vba, sous excel, le script fonctionne bien)

                          a priori, VBS ne prend pas en compte les paramètres nommés (ça explique pour le coup le nom qui devient FALSE du fait que l'égalité est vu comme un test dont le résultat est FAUX)
                          donc ligne 28 devient:

                          oBook.SaveAs objDestFolder & strFileName & ".csv", 6 '6 = xlCSV 

                          Si ça créé le fichier dans le répertoire "Documents", ça doit être parce que le répertoire de destination n'existe pas.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 septembre 2021 à 9:27:35

                            Bonjour, 

                            Excuse moi j'ai eu un imprévus je viens d'essayé de modifier la ligne comme tu me la écrit et ca fonctionne ! Merci beaucoup :D

                            • Partager sur Facebook
                            • Partager sur Twitter

                            [VBS] Convertion xlsx vers csv et renommage

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            • Editeur
                            • Markdown