XL 2021 Transformer fichier zip en xlsm

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,
Suite à ma demande précédente, comment transformer mon fichier zip en xlsm
En vous remerçiant.

VB:
    Dim Source, Destination, MyHex, MyBinary
    Dim oShell, oApp, oFolder, oCTF, oFile
    Dim oFileSys
    
    'Spécifiez le répertoire
    Source = "D:\Users\Nicolas\Desktop\TestZip"
    Destination = "D:\Users\Nicolas\Desktop\maSauvegarde.zip"
    
    MyHex = _
    Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    For i = 0 To UBound(MyHex)
        MyBinary = MyBinary & Chr(MyHex(i))
    Next
    
    Set oShell = CreateObject("WScript.Shell")
    Set oFileSys = CreateObject("Scripting.FileSystemObject")
    
    'Création de la base du fichier zip.
    Set oCTF = oFileSys.CreateTextFile(Destination, True)
    oCTF.Write MyBinary
    oCTF.Close
    Set oCTF = Nothing
    
    Set oApp = CreateObject("Shell.Application")
    
    Set oFolder = oApp.Namespace(Source)
    If Not oFolder Is Nothing Then _
        oApp.Namespace(Destination).CopyHere oFolder.Items
    
    Set oFile = Nothing
    On Error Resume Next
    
    Do While (oFile Is Nothing)
        'Attention: provoque une erreur 70 si un des fichiers à zipper
        'est toujours ouvert.
        Set oFile = oFileSys.OpenTextFile(Destination, ForAppending, False)
        
        If Err.Number <> 0 Then
            Err.Clear
        End If
    Loop

Merci
Nicolas
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour TooFatBoy,
Voilà ce qu'il y a dedans, rien de spécial, juste le contenu d'un dossier provenant d'un fichier excel modifié,
à rezipper et remettre au format xlsm. ;)
Capture d’écran 2024-06-29 070322.jpg

Merci
Nicolas
 

jurassic pork

XLDnaute Occasionnel
A noter qu'à partir de windows 10 on peut utiliser la commande tar de l'interpréteur pour compresser des fichiers en zip.
Voici un exemple qui compresse les fichiers qui se trouvent dans le répertoire folder qui contient le contenu d'un fichier .xlsm
VB:
Sub CompressFolderFiles()
  folder = "d:\temp\ClasseurTest"
  contenu = "*.*"
  zipFile = "d:\temp\MonNouveauClasseurTest"
  Debug.Print ShellRun("tar -a -v -c -f """ & zipFile & ".zip"" -C """ & folder & """ """ & contenu & """")
  Name zipFile & ".zip" As zipFile & ".xlsm"
End Sub

Public Function ShellRun(sCmd As String) As String
    Dim oShell As Object, oExec As Object, s As String, sLine As String
    Set oShell = CreateObject("WScript.Shell")
    Set oExec = oShell.Exec("cmd /c " & sCmd & "&&exit")
    While Not oExec.StdOut.AtEndOfStream
        sLine = oExec.StdOut.ReadLine
        If sLine <> "" Then s = s & sLine & vbCrLf
        ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & (10) & ")" ' Sleep de 10ms
    Wend
    While Not oExec.StdErr.AtEndOfStream
        sLine = oExec.StdErr.ReadLine
        If sLine <> "" Then s = s & sLine & vbCrLf
        ExecuteExcel4Macro "CALL(""kernel32"",""Sleep"",""JJ""," & (10) & ")" ' Sleep de 10ms
    Wend
    ShellRun = s
End Function

La fonction ShellRun permet de récupérer ce qui se passe dans la console cmd pendant l'exécution de la commande (stdOut et stdErr)
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour jurassic pork, job75, TooFatBoy,
Voici ce que j'ai pondu pour l'instant,

VB:
Sub RenommerZipEnXlsm()
    Dim cheminDossier As String
    Dim nomFichierZip As String
    Dim nomFichierXlsm As String
    Dim cheminCompletZip As String
    Dim cheminCompletXlsm As String

    ' Spécifiez le chemin du dossier contenant le fichier zip
    cheminDossier = "D:\Users\Nicolas\Desktop\"  ' Modifier le chemin selon votre configuration

    ' Spécifiez le nom du fichier zip
    nomFichierZip = "MaSauvegarde.zip"  ' Modifier le nom du fichier zip

    ' Spécifiez le nom du fichier xlsm
    nomFichierXlsm = "fichier.xlsm"  ' Modifier le nom du fichier xlsm

    ' Construire les chemins complets des fichiers
    cheminCompletZip = cheminDossier & nomFichierZip
    cheminCompletXlsm = cheminDossier & nomFichierXlsm

    ' Vérifiez si le fichier zip existe
    If Dir(cheminCompletZip) <> "" Then
        ' Renommer le fichier zip en fichier xlsm
        Name cheminCompletZip As cheminCompletXlsm
        MsgBox "Le fichier a été renommé avec succès.", vbInformation
    Else
        MsgBox "Le fichier zip spécifié n'existe pas.", vbExclamation
    End If
End Sub

C'est peut-être pas la meilleur solution, mais ça fonctionne,
ce n'est qu'un petit d'un assez gros code,
j'ai commencé à assembler une bonne partie déjà mais reviendrai sans doute vers vous pour l'optimisation.

Merci à tous. :)
Nicolas
 

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman