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

Access Discussion :

A propos de la routine de décompression de fichiers


Sujet :

Access

  1. #1
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut A propos de la routine de décompression de fichiers
    Bonjour à tous,
    J'ai adapté sur une petite application de gestion de fichiers de sig (mapinfo), la contribution de Elifqaoui et Romain Puyfoulhoux qui permet de compresser et décompresser des fichiers zip à l'aide de la dll zlib.dll.
    C'est super; très rapide ça marche très bien, et on peut faire tout un tas de chÔses avec, mais y a un truc qui me bloque; faut dire que je ne suis pas un spécialiste de vba.
    Dans mon adaptation, j'ai placé le code de la routine dans une boucle qui me permet de décompresser des centaines de fichiers zip d'un seul coup.
    Je crée un répertoire où je mets les archives et un autre qui reçoit les fichiers décompressés; et en qq s je décompresse plusieurs centaines de fichiers; cool.
    Mon petit problème est que chaque zip contient un nom de sous-répertoire que winzip recrée pour placer les fichiers décompressés.
    La routine elle, ignore Ce sous-rép, et place directement les fichiers dans l'endroit qu'on lui indique.
    Est-ce qu'un esprit éclairé saurait, s'il y a moyen de récupérer le nom de ce sous rép. pour l'utiliser dans le code vba ?

    A dichat sans faute!
    DonQuiShoote.

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    dans la fonction extract de la class tu as trois paramètres :

    FolderPath => Chemin de destination de l'extraction.
    Optional PreservePath => paramètre optionnel qui permet de reprendre les sous répertooire.
    Optional Overwrite => paramètre optionnel qui permet d'écraser les fichiers si preésence dans le dossier des mêmes fichiers.


    en mettant PreservePath à True tu devrais créer en mettant que le l'extraction le sous dossier, si celui-ci a bien été créé lors de l'archive.

    L'appel de la fonction doit être comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set zip = New ZipExtractionClass
    zip.Extract("D:\Mon chemin d'extraction", True, True)
    Dolphy

  3. #3
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Merci du renseignement dolphy; je regarderai ça de plus près, lundi car je ne retourne plus au boulot de la semaine! Cool Les fonctionnaires sont réputés pour être des bourreaux du travail; mais il faut bien qu'on récupère un chouia de temps en temps!
    A dichat sans faute!

  4. #4
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    Me voilà reviendu au boulot!
    Il me semblait bien que j'appelais extract comme tu l'indiques; mais je n'étais pas sûr.
    Voilà comment j'ai bricolé ma fonction :
    (il s'agit bien d'un bricolage, car comme je ne connais pas le vba,
    mon code a une sale binette!).
    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
     
    Private Sub Dezipper_Click()
    Dim zip As ZipExtractionClass
    Dim Dezipper As String, ligne As Long
    ' pour tester, dezziper= d:\Q9IWJL\d\access\dezip\
    Dezipper = Left(destination, Len(destination) - 1)
        For ligne = 0 To archives.ListCount - 1
        Set zip = New ZipExtractionClass
        ' pour tester, original = d:\Q9IWJL\d\access\zip\
            If zip.OpenZip(original & archives.ItemData(ligne)) Then
                If zip.Extract(Dezipper, True, True) Then
                End If
            zip.CloseZip
            End If
        Set zip = Nothing
        Next
        MsgBox "Extraction terminée!"
        ' affichage des noms de fichiers décompressés dans une combobox
        Remplir2
    End Sub
    Je devrais probablement mettre set en dehors de la boucle; je n'ai pas encore 'arrangé' mon code!
    Donc, de cette façon, avec 2 true derrière le chemin; la fonction met tous les fichiers ensemble sans recréer le sous-répertoire d'origine. Il y a certainement un blème qq'part dans mon code merdique, mais je ne vois pas où !?!
    Merci pour ton aide dolphy.
    Bonne journée,
    DonQuiShoote

  5. #5
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut DonQuiShoote,

    je n'ai pas réussi à comprendre ton code .

    Ci-joint un code qui permet de parcourir tout le répertoire sélectionné et d'extraire tous les fichiers ZIP qui s'y trouvent. Avec ce code j'obtiens bien les sous répertoire ( si le ZIP a été crée avec le sous répertoire).

    Je te met en pièce joint la classe que j'ai utilisé.

    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
    Sub ListeFichier()
     
    Dim objFSO, objDossier, objFichier, objResultat
    Dim Repertoire, NomFichierTxt
     
    On Error Resume Next
     
        Repertoire = "D:\Mes documents\temp"
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objDossier = objFSO.GetFolder(Repertoire)
        Set zip = New ZipExtractionClass
     
        'Test si dossier vide
        If (objDossier.Files.Count - 1 > 0) Then
            'Boucle permettant de parcourir tous les fichiers du dossier répertoire
            For Each objFichier In objDossier.Files
                'Contrôle si extension .*zip
                If (InStr(1, objFichier.Name, ".zip", 1) > 0) Then
                    'Ouvre le fichier zip => classe zlib
                    If zip.OpenZip(Repertoire & "\" & objFichier.Name) Then
                        'Extrait le fichier vers Répertoire et ajoute à zone de liste
                        If zip.Extract(Repertoire & "\", True, True) Then
                            zdlTest.RowSource = zdlTest.RowSource & objFichier.Name & ";"
                        End If
                        'Ferme le fichier zip => classe zlib
                        zip.CloseZip
                    End If
                End If
            Next
            'Message pour dire fin extraction
            MsgBox "Extraction terminée.", vbInformation
        Else
            'Message si le répertoire ne contient pas de fichiers
            MsgBox "Le dossier ne comporte pas de fichier *.zip"
        End If
     
        'Vide des instances
        Set objResultat = Nothing
        Set objDossier = Nothing
        Set objFSO = Nothing
        Set zip = Nothing
     
    End Sub
    Dolphy

  6. #6
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup dolphy;
    demain, j'essaierai de modifier le code de mon application à l'aide de ton exemple.
    Je vois déjà certaines différences, comme la façon de déclarer le chemin :
    la variable & "\" & lenomdufichier.
    J'ai placé le "\" dans la variable; c'est peut-être pour ça que ça bogue !?!
    Je te dirais si ça marche.
    Autrement la classe que tu me refiles; il y a des différences avec les classes de cette routine ?

    Pour la fonction que j'ai posté; elle fait la même chose que la tienne, seulement j'ai placé la routine dans une boucle de manière à pouvoir extraire tous les zip d'un répertoire d'un coup.
    A l'insee où je bosse, on reçoit parfois des partenaires des centaines (quand ce n'est pas des milliers de zips contenant des données pour nos études; c'est plutôt fastidieux pour les assistants techniques dont je fais partie, de récupérer les données une à une. C'est pour cela que j'ai monté cette petite application de manière à la lancer dans un répertoire où je balancerai toutes les archives de façon à ce qu'elle fasse le boulot pour moi!

    Encore merci et à dichat sans faute!
    DonQuiShoote.

  7. #7
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    re,

    Citation Envoyé par DonQuiShoote
    Autrement la classe que tu me refiles; il y a des différences avec les classes de cette routine ?
    Je n'ai rien modifié à la classe, pour l'exemple j'ai utilisé celle-ci c'est tout.


    Citation Envoyé par DonQuiShoote
    Pour la fonction que j'ai posté; elle fait la même chose que la tienne, seulement j'ai placé la routine dans une boucle de manière à pouvoir extraire tous les zip d'un répertoire d'un coup.
    Le bout de code que j'ai donné permet de déziper fichier par fichier, en fait je parcour le dossier, puis si fichier zip je l'extrait et ensuite je reprends le parcours jusqu'au prochain zip.

    @ demain.

    Dolphy

  8. #8
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Eh bêh; y a qq'chose qui m'échappe! Ce n'est pas la 1ere fois; surtout en programmation!
    J'ai changé le code de ma procédure d'extraction par le tien; c'est exactement pareil; elle met tous les fichiers dans le répertoire désigné sans créer les sous-répertoires !?!

    J'ai besoin d'avoir un répertoire pour les archives et un pour les fichiers extraits.
    J'ai donc modifié ton code en conséquence; j'espère que c'est là que j'ai merdé, autrement le bug est pernicieux et je me demande ousqu'il se trouve !?!

    Voila le code modifié :

    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
     
    Private Sub Dezipper_Click()
     
    Dim objFSO, objDossier, objFichier, objResultat
    Dim NomFichierTxt, RepZip, RepDezip
    Dim zip As ZipExtractionClass
     
    'crée variable contenant le chemin des zip et celui de l'extraction
    RepDezip = Left(destination, Len(destination) - 1)
    RepZip = Left(original, Len(original) - 1)
     
    On Error Resume Next
     
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objDossier = objFSO.GetFolder(RepZip)
        Set zip = New ZipExtractionClass
     
        'Test si dossier vide
        If (objDossier.Files.Count - 1 > 0) Then
            'Boucle permettant de parcourir tous les fichiers du dossier répertoire
            For Each objFichier In objDossier.Files
                'Contrôle si extension .*zip
                If (InStr(1, objFichier.Name, ".zip", 1) > 0) Then
                    'Ouvre le fichier zip => classe zlib
                    If zip.OpenZip(RepZip & "\" & objFichier.Name) Then
                        'Extrait le fichier vers  destination et ajoute à zone de liste
                        If zip.Extract(RepDezip & "\", True, True) Then
                            zdlTest.RowSource = zdlTest.RowSource & objFichier.Name & ";"
                        End If
                        'Ferme le fichier zip => classe zlib
                        zip.CloseZip
                    End If
                End If
            Next
            'Message pour dire fin extraction
            MsgBox "Extraction terminée.", vbInformation
        Else
            'Message si le répertoire ne contient pas de fichiers
            MsgBox "Le dossier ne comporte pas de fichier *.zip"
        End If
     
        'Vide des instances
        Set objResultat = Nothing
        Set objDossier = Nothing
        Set objFSO = Nothing
        Set zip = Nothing
     
    End Sub
    Je voudrais mettre un msgbox "telrep extrait" entre chaque répertoire pour meubler le temps mort (assez long quand plusieurs centaines d'extractions), mais je veux enlever le bouton 'ok' pour ne pas obliger l'utilisateur à le cliquer 50 fois; je ne sais pas comment faire !?! Suis-je minable en vba !

    Ad talure!
    DonQuiShoote

  9. #9
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Eureka! J'ai trouvé!
    (où je vais me chercher ça !?!)
    Il n'y a pas de répertoires d'enregistrés dans mes zip! (Comme tu me l'as dit)!
    Ma confusion vient du fait que la routine d'extraction (enfin celle qu'on a à l'insee) de XP crée un sous-répertoire du nom du fichier zip et met les fichiers extraits dedans.
    Il me suffit donc de mettre une ligne supplémentaire entre chaque archive et faire pareil.
    Tu peux me dire l'instruction qui permet de creér un rep en vba ? Tu dois la connaitre; ce n'est pas comme moi qui suis nul en vba et qui vais mettre 1h pour la trouver!
    Excuse-moi de t'avoir fait travailler pour rien. Enfin non; pas pour rien, car je garde ton code qui est bien plus élégant que le mien!
    Merci pour ton aide.
    DonQuiShoote.

  10. #10
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    hello ,

    regarde l'aide access avec MkDir.


    Dolphy

  11. #11
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Super!
    Ca marche impeccable!
    Merci pour ton aide dolphy!
    ad talure,
    DonQuiShoote.

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

Discussions similaires

  1. [PCLTAR] Décompresser un fichier tar.z
    Par Manupong dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 27/11/2006, 10h46
  2. routine de renommage des fichiers
    Par jeremy.blanche dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 11/08/2006, 11h24
  3. Logiciel pour décompresser un fichier .TAR
    Par Mousk dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 12/03/2006, 19h52
  4. Comment décompresser un fichier dans une application ?
    Par f6dqm1 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 14/01/2005, 16h31

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