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

VBA Access Discussion :

Dezipper des fichiers ZIP dans répertoire différent


Sujet :

VBA Access

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci je testerai ta soluce
    pour l'instant je mets le code sans cette modification si cela peut aider quelqu'un
    voici le déroulé de la macro
    dézippe tous les fichiers du répertoire ou se trouve la BDD
    crée un dossier du nom du zip et y copie le dossier présent dans le zip
    récupérer dans chaque dossier un fichier bien définie
    le mets dans un format particulier
    y ajoute des informations
    exporte celui ci au format xls pret à l'emploi

    macro de dézippage
    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
     
    Function DEZIPPE()
    Dim RepertoireBase As String, NomFichier As String
     
    'Récuperation de la liste des fichiers
    RepertoireBase = Application.CurrentProject.Path & "\"
    NomFichier = Dir(RepertoireBase & "*.zip", vbDirectory)
     
    'On passe d'un fichier zip a l'autre
    Do While NomFichier <> ""
        'Dezippage Fichier
         Dim osa As Shell
            Set osa = New Shell
                osa.Namespace((RepertoireBase)).CopyHere osa.Namespace((RepertoireBase & NomFichier)).Items
            Set osa = Nothing
     
        'Création du répertoire du fichier dézipper
        NomFicSansExt = Left(NomFichier, InStrRev(NomFichier, ".") - 1)
        RepertoireDest = Application.CurrentProject.Path & "\" & NomFicSansExt & "\"
        'If Dir(RepertoireBase & NomFicSansExt) = "" Then MkDir (RepertoireBase & NomFicSansExt)
        MkDir (RepertoireBase & NomFicSansExt)
     
        'Copie et Supprime les dossiers
            Set oFSO = New Scripting.FileSystemObject
                oFSO.CopyFolder RepertoireBase & "SIMPLES", RepertoireDest & "SIMPLES", True
                oFSO.DeleteFolder RepertoireBase & "SIMPLES", True
            Set oFSO = Nothing
     
        NomFichier = Dir
     
    Loop
    End Function
    macro de traitement
    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
     
    Function EXPORT_TABLE()
    'Declaration des variables
    Dim RepertoireBase As String, NomFichier As String
    Dim R001, R002, R003, QueryDef
    Dim FSO As Object, folder As Object
     
    'Fonction UnZippe Fichiers
        Call DEZIPPE
     
    '******************************TRAITEMENT FDC**********************************************
    'Purge Table Principale
        R001 = "DELETE * FROM IMPORTATION_RECAP"
        DoCmd.RunSQL R001
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        For Each folder In FSO.GetFolder(Application.CurrentProject.Path & "\").SubFolders
     
        NomFichier = Dir(folder.Path & "\SIMPLES\" & "pressmaker_FDC*.xls", vbDirectory)
            Do While NomFichier <> ""
                DoCmd.TransferSpreadsheet , acSpreadsheetTypeExcel8, "IMPORTATION_RECAP", folder.Path & "\SIMPLES\" & NomFichier, True '
                Debug.Print NomFichier
                NomFichier = Dir
            Loop
        Next
     
    'Création Table pour Insertion Persos Poste
        R002 = "SELECT DESIGNATION, NUMPARUTION INTO DESIGNATION FROM IMPORTATION_RECAP GROUP BY DESIGNATION, NUMPARUTION"
        DoCmd.RunSQL R002
     
    'Insertion Persos Poste
        R003 = "INSERT INTO IMPORTATION_RECAP ( DESIGNATION, NUMPARUTION, ADR2, ADR3, ADR4, ADR5, ADR6, LG1 ) SELECT DESIGNATION.DESIGNATION, DESIGNATION.NUMPARUTION, ""M PERSO"" AS ADR2, ""RUE DE PERSOVILLE"" AS ADR3, ""PERSO"" AS ADR4, ""PERSO"" AS ADR5, ""99999 PERSOVILLE"" AS ADR6, ""9999999"" AS LG1 FROM DESIGNATION   ORDER BY DESIGNATION.DESIGNATION"
        DoCmd.RunSQL R003
     
    'Exportation du Fichier Final
        Set R004 = CurrentDb.CreateQueryDef("R004_EXPORT_TABLE", "Select * From IMPORTATION_RECAP ORDER BY NUMPARUTION, LG1 ")
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "R004_EXPORT_TABLE", Application.CurrentProject.Path & "\EXPORT_TABLE_FDC.xls"
        DoCmd.DeleteObject acTable, "DESIGNATION"
        DoCmd.DeleteObject acQuery, "R004_EXPORT_TABLE"
     
     
    '******************************TRAITEMENT FDP**********************************************
        R001 = "DELETE * FROM IMPORTATION_RECAP"
        DoCmd.RunSQL R001
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        For Each folder In FSO.GetFolder(Application.CurrentProject.Path & "\").SubFolders
     
            NomFichier = Dir(folder.Path & "\SIMPLES\" & "pressmaker_FDP*.xls", vbDirectory)
                Do While NomFichier <> ""
                    DoCmd.TransferSpreadsheet , acSpreadsheetTypeExcel8, "IMPORTATION_RECAP", folder.Path & "\SIMPLES\" & NomFichier, True '
                    Debug.Print NomFichier
                    NomFichier = Dir
                Loop
            Next
     
    'Création Table pour Insertion Persos Poste
        R002 = "SELECT DESIGNATION, NUMPARUTION INTO DESIGNATION FROM IMPORTATION_RECAP GROUP BY DESIGNATION, NUMPARUTION"
        DoCmd.RunSQL R002
     
    'Insertion Persos Poste
        R003 = "INSERT INTO IMPORTATION_RECAP ( DESIGNATION, NUMPARUTION, ADR2, ADR3, ADR4, ADR5, ADR6, LG1 ) SELECT DESIGNATION.DESIGNATION, DESIGNATION.NUMPARUTION, ""M PERSO"" AS ADR2, ""RUE DE PERSOVILLE"" AS ADR3, ""PERSO"" AS ADR4, ""PERSO"" AS ADR5, ""99999 PERSOVILLE"" AS ADR6, ""9999999"" AS LG1 FROM DESIGNATION   ORDER BY DESIGNATION.DESIGNATION"
        DoCmd.RunSQL R003
     
    'Exportation du Fichier Final
        Set R004 = CurrentDb.CreateQueryDef("R004_EXPORT_TABLE", "Select * From IMPORTATION_RECAP ORDER BY NUMPARUTION, LG1 ")
            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "R004_EXPORT_TABLE", Application.CurrentProject.Path & "\EXPORT_TABLE_FDP.xls"
            DoCmd.DeleteObject acTable, "DESIGNATION"
            DoCmd.DeleteObject acQuery, "R004_EXPORT_TABLE"
     
    'Fermeture BDD
        DoCmd.Quit
     
    End Function
    en espérant inspirer

    david

  2. #22
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Comme il y a potentiellement plusieurs fichiers ZIP, il faut faire le DIR en son entier et à chaque fois qu’un sous répertoire est inexistant le rajouter à un tableau que tu redimensionnes dynamiquement pour ajouter le sous répertoire non trouvé .

    Ensuite tu boucles sur le tableau et tu crées pour chaque élément du tableau un sous répertoire
    ... suite du code
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Merci pour ton idée
    Mais je ne maîtrise pas du tout les tableaux dans vba

  4. #24
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    C’est l’occasion. Très bon tuto de silkroad ICI
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  5. #25
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Tuto d'autant plus excellent qu'il te donne le code. Par contre adapte le pour n'avoir qu'une dimension car ne sont enregistrés que les répertoires manquants.

    Pour un tableau multidimensionnel, je préfère soit un dictionnaire soit une structure

    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
     
    Option Explicit
     
    Sub ListeFichiersRepertoire()
        Dim Repertoire As String, Fichier As String
        Dim Tableau() As Variant
        Dim x As Integer, i As Integer
        Dim VerifTab As Variant
     
        'Définit le répertoire pour la recherche
        Repertoire = "C:\Documents and Settings\dossier"
        'Recherche tous les types de fichiers
        Fichier = Dir(Repertoire & "\*.*")
     
        'Boucle sur les fichiers pour récupérer les infos
        Do While Fichier <> ""
            'Incrémente le compteur de fichiers
            x = x + 1
     
     
            '--- Redéfinit la taille de la dernière dimension du tableau
            ReDim Preserve Tableau(1 To 2, 1 To x)
            '------------------------------------
     
     
            'Récupère le nom du fichier
            Tableau(1, x) = Fichier
            'Récupère  la date et l'heure de création ou de dernière modification.
            Tableau(2, x) = FileDateTime(Repertoire & "\" & Fichier)
            Fichier = Dir
        Loop
     
     
        '--- On vérifie si le tableau est vide
        On Error Resume Next
        'VerifTab va prendre la valeur Empty si le tableau est vide.
        VerifTab = UBound(Tableau)
        On Error GoTo 0
     
        If IsEmpty(VerifTab) Then Exit Sub
        '---
     
     
        'Boucle pour lire le contenu du tableau.
        'UBound(Tableau, 2) permet de récupérer la limite supérieure de la 2eme dimension
        For i = 1 To UBound(Tableau, 2)
            'Inscrit le résultat dans la fenêtre d'exécution (Ctrl+G)
            Debug.Print Tableau(1, i) & " --> " & Tableau(2, i)
        Next i
    End Sub
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci informer

    je vais tenter d'appliquer cette soluce et te tiens au courant

    david

  7. #27
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Merci de cliquer sur le pouce vert des réponses qui t’ont aidé.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

Discussions similaires

  1. Télécharger des fichiers stockés dans répertoire spécifique dans le serveur
    Par Devloppor dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 22/12/2014, 12h51
  2. Lister le nom des fichier contenu dans un zip.
    Par ThanosT dans le forum C#
    Réponses: 1
    Dernier message: 28/05/2008, 23h05
  3. Réponses: 4
    Dernier message: 11/07/2007, 19h28
  4. Lister des fichiers contenus dans un répertoire
    Par mithrendil dans le forum Langage
    Réponses: 5
    Dernier message: 01/05/2007, 09h27
  5. [C++] Zip et Dezipper des fichiers...
    Par doudoustephane dans le forum C++
    Réponses: 7
    Dernier message: 17/05/2006, 20h11

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