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 Word Discussion :

(VBA-Word) Temporiser une macro


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Points : 17
    Points
    17
    Par défaut (VBA-Word) Temporiser une macro
    Bonjour,

    J'ai un Userform sous Word 2007 qui me permet d'imprimer une trentaine de documents Word. Le problème est que j'utilise une imprimante réseau qui commence à imprimer après avoir reçu une dizaine de fichiers environ et imprime le tout en désordre.

    J'ai pensé à mettre une temporisation après l'envoi de chaque fichier du style "Application.wait" qui fonctione sous VBA-Excel.

    Pour Word, j'ai trouvé ce code que je n'arrive pas à faire fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
     
    Sub Sleep()
     
       Sleep (10000)   'Implements a 10 second delay
     
    End Sub
    Auriez-vous une autre suggestion à me faire.

    Cordialement,

    Cercle

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je pense à utiliser DoEvents, qui donne temporairement la main au système d'exploitation.

    Dans la boucle d'impression, utiliser le DoEvents juste après l'envoi vers l'imprimante.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Merci, je teste lundi et je reviens.

    Cordialement,

    Cercle

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par Cercle Voir le message
    Merci, je teste lundi et je reviens.

    Cordialement,

    Cercle
    Lundi, on va devoir attendre alors!
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par Cercle Voir le message
    Pour Word, j'ai trouvé ce code que je n'arrive pas à faire fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub Sleep()
       Sleep (10000)   'Implements a 10 second delay
    End Sub
    Auriez-vous une autre suggestion à me faire.
    Oui, change le nom de ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
       Sleep (10000)   'Implements a 10 second delay
    End Sub
    Juste pour info, DoEvents devrait suffire, comme le dit Euh ! Reuh !...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonjour les amis du VBA,

    Merci beaucoup pour vos réponses. J'ai testé le DoEvents aini que la macro modifiée pour le Sleep. Ca ma permis de faire des tests et de constater que vos suggestions fonctionnent bien.

    Seulement voilà, je pensais qu'en donnant la main au système avec le DoEvents et en ralentissant la procédure avec le Sleep, cela libérerait le spool de l'imprimante. J'ai testé sur 2 pc et 3 imprimantes différentes et le résultat est désespérément le même; les impressions sortent dans le désordre.

    Ce que je n'arrive pas à comprendre, c'est que j'ai le même Userform sur excel et l'impression démarre immédiatement.

    J'ai cherché une solution partout sur le Web et comme personne ne rencontre le même problème, il faut croire que je n'ai pas de chance.

    S'il s'agit de chance...

    Je joins mon fichier en espérant que quelqu'un se prendra la tête à ma place. Pour ma part, je n'en peux plus..

    Amicalement,

    Cercle
    Fichiers attachés Fichiers attachés

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonsoir Cercle,
    Je passais par là par hasard...
    Pour ton pb, ajoute un DoEvents ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveDocument.PrintOut
        DoEvents
        ActiveDocument.Close
    Ensuite, pour HF, inutile d' en faire une fonction, une simple sub suffit.
    Je n'ai pas plus creusé.
    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonsoir les amis du VBA,

    Merci pour les réponses. J'ai réglé le pb en convertissant les fichiers doc en pdf et en utilisant un Userform sur excel.

    J'aurais encore une question. Avec mes OptionButton, je lance chaque fois une macro différente alors qu'il n'y a que les fichiers à imprimer qui changent.

    J'ai essayé après le "For i = 1 to Nbre" de faire des call sub. Ca ne fonctionne pas. Est-il possible de raccourcir ce code.

    Merci d'avance à ceux qui voudront bien m'apporter leurs conseils.

    Cordialement,

    Cercle

    P.S. Je me rends bien compte que ce n'est pas le bon forum, mais bon, comme j'ai commencé ici
    Fichiers attachés Fichiers attachés

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Voilà le code que tu as pour chacune de tes procédures.

    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
    Public Sub PPF()
     
        Dim msg, titre As String
        Dim ret As String
        Dim vDossier As String
        vDossier = (ThisWorkbook.Path & "/")
     
        titre = " Impression en " & Nbre & " exemplaire(s) "
        msg = " Voulez-vous imprimer maintenant ? "
        ret = MsgBox(msg, vbYesNo, titre)
     
        If ret = vbYes Then
        Cancel = False
        End If
        If ret = vbNo Then
        Cancel = True
        Exit Sub
        End If
     
        For i = 1 To Nbre
        ShellExecute FindWindow("XLMAIN", Application.Caption), "print", _
        vDossier & "1.pdf", "", "", 1
        Next i
    '
    End Sub
    Seule cette ligne change !
    vDossier & "1.pdf", "", "", 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub PPX(Fil as string)
    ...
    ...
    ...
    vDossier & Fil, "", "", 1
    Avec l'appel qui donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If OptionButton1.Value = True Then Call PPX("1.pdf")
    If OptionButton2.Value = True Then Call PPX("2.pdf")
    ....
    Tu n'as qu'une seule procédure PPX.
    ....

    Mais, je ne comprends as pourquoi tu fais une boucle pour l'impression !

    Si tu utilises la méthode PrintOut, tu peux spécifier le nombre de copie que tu veux imprimer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    activeworkbook.PrintOut(,,nbreCopie)
    Avec nbreCopie une variable qui contient le nombre de copies.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonsoir les amis du VBA,

    "Bien heureux les hommes qui comme vous, possèdent les connaissances"

    Un grand merci à Heureux-oli et ouskel'n'or pour les réponses. J'ai fait les changements et ça fonctionne impec.

    En ce qui concerne la boucle, je l'ai fait par facilité. Mais maintenant, j'ai mis une variable et c'est mieux.

    Encore merci et A+

    Cercle

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

Discussions similaires

  1. [VBA-Word] appliquer une macro sur un groupe de document
    Par perophron dans le forum VBA Word
    Réponses: 22
    Dernier message: 11/06/2007, 18h27
  2. [VBA-E]Comment Temporiser une macro ?
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 14h40
  3. [VBA-E] Associer une macro à une cellule
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/04/2006, 13h50
  4. [VBA-E]Lancer une macro sur changement de valeur cellule ?
    Par jeremiegrenoble dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/03/2006, 14h22
  5. [VBA-E]Etablir une macro d'une fonction rechercheV
    Par dani317 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/10/2005, 11h06

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