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 :

Problème pour Zipper des fichiers en cascade,


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut Problème pour Zipper des fichiers en cascade,
    Bonjour,

    J'ai besoin de réaliser une petite macro qui zippe des fichiers en cascade mais je rencontre un petit soucis : dès que les fichiers prennent un peu de temps à zipper, j'ai des erreurs car Excel appelle "l'application externe" qui zippe pour un nouveau fichier alors qu'elle n'a pas fini de zipper le premier...

    Si quelqu'un a une idée... Je n'ai rien trouvé sur le sujet en fouillant un peu partout sur le net, ou sinon c'était au-delà de ma compréhension..

    Merci d'avance!

    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
    Sub Zipp_Files(Nom_Dossier As String, Chemin As String)
     
    '----------Commentaire--------------------------------------------------------------------------------------------------------------------
     
    'Ce sub permet de zipper une serie de fichiers un par un se trouvant dans un dossier
     
    '----------Déclaration des variables locales----------------------------------------------------------------------------------------------
     
    Dim DossierZip As Variant
    Dim DossierInit As Variant
    Dim Fichier As Object
    Dim Nom_Fichier As Variant
    Dim oShell As Object
    Dim FSO As Object
    Dim oFSO As Object
    Dim i As Long
    Dim MyBinary As String
    Dim MyHex As Variant
    Dim Chemin_Fichier As Variant
     
    '----------Initialisation des variables locales----------------------------------------------------------------------------------------------
     
    DossierZip = Chemin & Nom_Dossier  & ".zip"
    DossierInit = Chemin & Nom_Dossier 
     
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set FSO = CreateObject("Scripting.FileSystemObject")
     
    '----------Code------------------------------------------------------------------------------------------------------------------------------
    On Error GoTo err
     
    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 i
     
    With FSO.CreateTextFile(DossierZip, True)
        .Write MyBinary
        .Close
    End With
     
    Set oShell = CreateObject("Shell.Application")
     
    For Each Fichier In oFSO.GetFolder(DossierInit).Files
        Chemin_Fichier = Fichier.Path
        Fichier.Attributes = 0
        oShell.Namespace(DossierZip).CopyHere (Chemin_Fichier)
    Next
     
    err:
     
    Select Case err.Number
        Case 58: MsgBox Contenu_MsgBox(1)  'Le fichier zip existe déjà
        Case 76: MsgBox Contenu_MsgBox(3)  'Chemin incorrect
        Case Else: MsgBox Contenu_MsgBox(4) & "Error n° " & err.Number 'Erreur inconnue
    End Select
     
    End Sub

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, ce fichier ( à adapter bien sur pour les chemins ) fonctionne sans aucun problèmes.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Merci pour le fichier !

    Je me rends compte que j'ai toujours le même problème, même en prenant ton code... Du coup je me dis que je suis peut être sur une fausse piste :/

    Pourtant quand j’exécute le code ligne par ligne avec le débogueur, ça marche, mais quand je l’exécute normalement, ça plante.

    J'ai mis un timer sur la boucle de création des zip, et ça m'a "résolu" le problème... Jusqu'au jour un quelqu'un voudra zipper des gros fichier, et là, ça risque de planter à nouveau mais bon. J'ai pas pu faire mieux pour l'instant !

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    A titre informatif, j'ai trouvé une solution à mon problème avec un wait et un test sur le nombre de fichiers présent dans le dossier zipper :

    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
    Set oShell = CreateObject("Shell.Application")
     
    ' Copie en une fois de tous les fichiers du dossier dans le zip
    oShell.Namespace(DossierZip).CopyHere oShell.Namespace(DossierInit).items
     
    ' Fait patienter le script en attendant que la compression ait lieu:
    '   si le nombre de fichiers contenu dans le Zip est différent du nombre de fichiers contenu dans le dossier
    '     => on attends une seconde de plus et on re-vérifie.
    On Error Resume Next
     
    StartTime = Timer
     
    Do Until oShell.Namespace(DossierZip).items.Count = oShell.Namespace(DossierInit).items.Count
        Application.Wait (Now + TimeValue("0:00:01"))
     
        'si le temps d'attente est suppérieur à 30 seconde, on arrete tout
        If Timer > StartTime + 30 Then
            goto Gestion_Erreur
        End If
    Loop

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

Discussions similaires

  1. Problème pour zipper un fichier
    Par Coin dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 25/08/2007, 10h29
  2. Problème pour déplacer des fichiers
    Par kurul1 dans le forum C++Builder
    Réponses: 16
    Dernier message: 07/03/2007, 16h25
  3. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  4. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  5. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30

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