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 :

winzip depuis excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut winzip depuis excel
    Bonjour tout le monde,

    pinaise ca faisait longtemps que j'avais pas posé une question sur ce forum ...

    Alors voila mon problème, je lance winzip depuis ma macro Excel via ligne de commande, ca marche niquel par contre winzip se lance en parallèle à Excel et comme mon action suivante consiste à déplacer mon zip ben ca marche pas super ...
    j'suis obligé de faire un sleep 10000 pour attendre que WInzip ait fini,
    or je fais une boucle sur cette action ce qui a pour conséquence de perdre 10 secondes par zip, bref pas terrible

    type du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    strCreationZip = "C:\Program File\Winzip\WInzip32.exe -a mondocument.zip monDocument.doc"
     
    shell strCreationZip
     
    sleep 10000
     
    objFSO.MoveFile(monDocument.zip)
    je voudrais pouvoir récupérer (mais je sais pas si possible) une info de winzip qui me dit, ca y est, ton zip est terminé
    afin que je puisse ensuite manipuler le fichier


    Merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonsoir Australia et le forum
    tu ne peux pas spécifier directement le chemin de création du fichier, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strCreationZip = "C:\Program File\Winzip\WInzip32.exe -a \dossierarchive\mondocument.zip monDocument.doc"


    Une boucle sur les fenêtres encore ouvertes jusqu'à disparition de la fenêtre WinZip avec une fonction API type "FindWindowsA". A tester.

    ESVBA

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    Le truc c'est qu'il y a 2 cas possibles, soit le zip existe déja et je lui ajoute un fichier, soit je le crée et en fait c'est la même ligne de commande ....

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour Australia,
    je ne connais pas les codes "ligne de commande" de WinZip. Il y en a pas deux paramètres différents : pour ajouter un fichier à un ZIP existant et pour Effacer/Recréer un fichier zip existant ?

    Je ne comprend pas bien le dernier post..

    Test si le fichier ZIP existe en sachant son nom et emplacement : faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Dir("C:\dos\monfic.zip") <> "" Then
       'Code ... car le fichier existe déjà
    End If
    ESVBA

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    le problème vient pas des lignes de commande, ca marche très bien (et pour info, je pense pas dire une grosse c... en disant que c'est la même commande pour ajouter un fichier à un zip ou pour créeer un zip),

    le truc c'est comment trouver une astuce / commande pour savoir si mon zip est terminer ou non ...
    afin de déplacer le fichier zip ...

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour Australia et le forum,
    afin que je puisse ensuite manipuler le fichier
    C'était pour moi copier le zip dans un dossier archive. Donc ma solution était de le copier directement dans le dossier archive.




    Il faudra d'une façon ou d'une autre faire une boucle.

    La solution proposée plus haut :
    Une boucle sur les fenêtres encore ouvertes jusqu'à disparition de la fenêtre WinZip avec une fonction API type "FindWindowsA". A tester
    Donc boucler jusqu'à la disparition du processus (handle) de la création de l'archive.
    Processus terminé, archive terminée.
    D'où l'utilisation d'une API Windows.


    Va voir dans la section langage Visual Basic fu forum ou
    dans la FAQ office comme par exemple http://excel.developpez.com/faq/inde...isteFenetresIE le second code


    ESVBA

  7. #7
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Un petit exemple avec les API
    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
    Option Explicit
     
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
     
    Private Const STILL_ACTIVE = &H103
    Private Const PROCESS_QUERY_INFORMATION = &H400
     
    Sub ShellWait(ShellCommand As String)
        Dim hProcess As Long, RetVal As Long
     
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(ShellCommand, vbMinimizedNoFocus))
     
        Do
            GetExitCodeProcess hProcess, RetVal
            DoEvents
        Loop While RetVal = STILL_ACTIVE
    End Sub
     
    Sub Test()
        Call ShellWait("notepad.exe")
    End Sub

Discussions similaires

  1. Récuperer l'état de WINZIP depuis VBA EXCEL
    Par oksana13 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/02/2011, 18h14
  2. Connexion à Oracle depuis EXCEL
    Par Megaxel dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/10/2005, 13h04
  3. Renseigner un formulaire Access depuis Excel
    Par vciofolo dans le forum Access
    Réponses: 6
    Dernier message: 30/09/2005, 12h12
  4. Ouverture d'un template Word depuis Excel
    Par modus vivendi dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/08/2005, 11h29
  5. Problemes d'importation depuis excel
    Par KANCRENAZ dans le forum Access
    Réponses: 3
    Dernier message: 17/02/2005, 10h57

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