Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2007, 00h09   #1
Invité régulier
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 6
Points : 6
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 :
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
Cercle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 08h49   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 13h05   #3
Invité régulier
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 6
Points : 6
Merci, je teste lundi et je reviens.

Cordialement,

Cercle
Cercle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 13h10   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2007, 11h56   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par Cercle Voir le message
Pour Word, j'ai trouvé ce code que je n'arrive pas à faire fonctionner
Code :
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 :
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 !...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2007, 19h39   #6
Invité régulier
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 6
Points : 6
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
Type de fichier : doc Menu impression.doc (73,0 Ko, 17 affichages)
Cercle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 21h20   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Bonsoir Cercle,
Je passais par là par hasard...
Pour ton pb, ajoute un DoEvents ici
Code :
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+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 00h25   #8
Invité régulier
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 6
Points : 6
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
Type de fichier : xls Print.xls (87,0 Ko, 3 affichages)
Cercle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 09h57   #9
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Voilà le code que tu as pour chacune de tes procédures.

Code :
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 :
1
2
3
4
5
Public Sub PPX(Fil as string)
...
...
...
vDossier & Fil, "", "", 1
Avec l'appel qui donne ceci :

Code :
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 :
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2007, 22h24   #10
Invité régulier
 
Inscription : octobre 2007
Messages : 20
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 20
Points : 6
Points : 6
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
Cercle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h55.


 
 
 
 
Partenaires

Hébergement Web