IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fichier archive ZIPPE [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut Fichier archive ZIPPE
    Bonjour le forum,

    Mon entreprise nous mets à disposition des fichiers de données archives zippés.
    On les télécharge et on les trouve avec une extension ".Z".

    Une fois extrait les fichiers sont au format CSV.

    Ma question est la suivante:

    VBA nous permet -il de lire ces fichiers archives en l'état?

    ou

    Peux-t-on avec VBA extraire le fichier CSV de l'archive?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Lire les archives tel quel, non.

    Les dézipper par VBA oui, mais cela dépend de ton logiciel de dézippage.
    En effet des logiciels comme WinZip, Winrar, 7Zip peuvent être piloté en lignes de commandes (à l'aide de la fonction Shell).

    Ces lignes de commandes permettent d'extraire, de créer, etc. en fait de faire plein de choses.

    Exemple Winrar en ligne de commande : http://excel.developpez.com/faq/inde...#CompresserRAR

    Dans le répertoire du ton DD où se trouve le programme il y a un fichier d'aide (souvent un fichier texte) qui comporte toutes les options de la ligne de commande.

    Philippe

  3. #3
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonjour le forum,

    Merci Philippe de ta réponse.

    Grâce à elle, ainsi qu'un post sur le sujet, j'ai réussi à écrire un bout de code.

    Mon souci est que je n'ai que 7-ZIP pour extraire les fichiers, et son fontionnement semble être différent de WINZIP ou WINRAR.

    Il m'ouvre un explorateur à la racine de mon fichier source et me propose un sous-dossier au nom de l'archive (je dois l'enlever à la main).

    Voici mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            If Right(FileItem.Name, 2) = ".Z" And Left(FileItem.Name, 3) = "GRD" And vPassage = False Then
                Set oShell = CreateObject("WScript.Shell")
                myzip = vChemin & FileItem.Name
                myshell = "7zFM.exe e " & myzip & " " & oWbo.Path
     
                oShell.Run myshell, 1, True
     
                DoEvents
                GoTo Reprise
                '"=
            End If
    Merci d'avance

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Bonjour Duddy, Philippe ,

    C joint un code fonctionnant avec 7-Zip. Le code n'est pas de moi (notamment les commentaires anglais) mais je ne sais pas retrouver ou je l'avais eu. J'y avais ajouté quelques trucs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Option Explicit
     
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
        (ByVal hProcess As Long, lpExitCode As Long) As Long
     
    Private Declare Function OpenProcess Lib "kernel32" _
        (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) _
        As Long
     
    Private Declare Function CloseHandle Lib "kernel32" _
        (ByVal hObject As Long) As Long
     
    Private Const PROCESS_QUERY_INFORMATION = &H400
    Private Const STILL_ACTIVE = &H103
     
    Public UZipDownload As Boolean
     
    Private Sub ShellAndWait(ByVal PathName As String, Optional WindowState)
     
    Dim hProg As Long
    Dim hProcess As Long, ExitCode As Long
     
        UZipDownload = True
     
        If IsMissing(WindowState) Then WindowState = 1
     
        'hProg est un "process ID under Win32"
        hProg = Shell(PathName, WindowState)
     
        'To get the process handle:
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hProg)
     
        Do
            'populate Exitcode variable
            GetExitCodeProcess hProcess, ExitCode
            DoEvents
        Loop While ExitCode = STILL_ACTIVE
     
     
        If ExitCode <> 0 Then 
            UZipDownload = False 
            Select Case ExitCode
                Case 1
                    MsgBox "Erreur 7z.exe code " & ExitCode & ": Warning (Non fatal error(s))"
                Case 2
                    MsgBox "Erreur 7z.exe code " & ExitCode & ": Fatal Error"
                Case 7
                    MsgBox "Erreur 7z.exe code " & ExitCode & ": Command line error"
                Case 8
                    MsgBox "Erreur 7z.exe code " & ExitCode & ": Not enough memory for operation"
                Case 255
                    MsgBox "Erreur 7z.exe code " & ExitCode & ": User stopped the process"
            End Select
        End If
     
     
        hProg = CloseHandle(hProcess)
    End Sub
     
    'With this example you unzip a fixed zip file: ZipLongName = "C:\Users\Ron\Test.zip"
    'Note this file must exist, this is the only thing that you must change before you test it
    'The zip file will be unzipped in a new folder in: Application.DefaultFilePath
    'Normal if you have not change it this will be your Documents folder
    'The name of the folder that the code create in this folder is the Date/Time
    'You can change this folder to this if you want to use a fixed folder:
    'DestinationPath = "C:\Users\Ron\TestFolder\"
    'Read the comments in the code about the commands/Switches in the ShellStr
     
    Sub UnzipFile_7z(ZipLongName As String, DestinationPath As String, ProgramName As String, ByVal ProgramPath As String)
     
    Dim ShellStr As String
     
        If Right(ProgramPath, 1) <> "\" Then ProgramPath = ProgramPath & "\"
     
        If Dir(ProgramPath & ProgramName) = "" Then
            MsgBox ProgramName & " not found in " & ProgramPath
            Exit Sub
        End If
     
        'extrait (e) toute (*.*)l'archive, renomme l'existant(-aot)
        ShellStr = ProgramPath & ProgramName & " e -aot" & " " & Chr(34) & ZipLongName & _
            Chr(34) & " -o" & Chr(34) & DestinationPath & Chr(34) & " " & "*.*"
     
        Call ShellAndWait(ShellStr, 1)
     
        If UZipDownload = False Then
            MsgBox "Unzip Failure"
        End If
     
    End Sub
    Pour l'utiliser, un exemple qui extrait l'archive "MonArchive.rar" située dans ""C:\Documents and Settings\". L'archive est extraite dans "C:\Documents and Settings\DossierExtrait" en utilisant l'exe "7z.exe" situé dans "C:\Program Files\7Zip\App\7-Zip" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        Call UnzipFile_7z("C:\Documents and Settings\MonArchive.rar", _
        "C:\Documents and Settings\DossierExtrait", _
        "7z.exe", "C:\Program Files\7Zip\App\7-Zip")
    End Sub
    Cordialement

    KD

    Edit : ce n'est pas un code universel, le choix fait ici est d'extraire tous les fichiers et d'éventuellement renommer les fichiers déjà existants. Pour d'autres choix il faudra modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellStr = ProgramPath & ProgramName & " e -aot" & " " & Chr(34) & ZipLongName & _
            Chr(34) & " -o" & Chr(34) & DestinationPath & Chr(34) & " " & "*.*"
    selon la documentation de 7-zip.

    Edit 2 : La ligne précédente n'extrait que les fichiers apparaissant à l'ouverture de l'archive et pas ceux situés dans des sous-dossiers de l'archive. La ligne suivante extrait tout en respectant l'arborescence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellStr = ProgramPath & ProgramName & " x -aot" & " " & Chr(34) & ZipLongName & _
            Chr(34) & " -o" & Chr(34) & DestinationPath & Chr(34) & " " & "*"
    (e a été remplacé par x et *.* par *)

    Edit 3 : Le code originel a été trouvé là : http://www.rondebruin.nl/files/code7zippageunzip.txt

  5. #5
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir le forum,

    Merci à GuyXL pour son code qui fonctionne pil-poil.

    Encore une fois, je ne suis pas déçu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Standby et fichiers archives
    Par ilalaina dans le forum Administration
    Réponses: 5
    Dernier message: 24/01/2008, 11h22
  2. Ouvrir et exploiter un fichier Archive
    Par cwamm dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 05/12/2006, 20h48
  3. fichier archive C
    Par gy0m76 dans le forum C
    Réponses: 8
    Dernier message: 23/11/2006, 18h07
  4. Lister des fichiers archives
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 05/10/2006, 15h50
  5. [VB6] créer un fichier archive à un programme
    Par vb6.beginner dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 11/06/2006, 01h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo