Collision lors d'Impression de classeurs Excel

cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013 - 2 mars 2009 à 15:04
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 10 mars 2009 à 12:53
Bonjour,

j'ai fit un applicatif qui crée des bons de commande sous excel.

A la fin du traitement je fais

for each xlsheet as excel.worksheet in xlBook.worksheets
   xlsheet.PrintOut(, ,

CInt(Exemplaires))
next

Mon problème est que parfois à l'impression, les feuilles sortent mélangées

La boucle fonctionnerait-elle trop vite pour le spooler (en réseau)?

Quelqu'un a-t-il déjà eu ce genre de problème?

Si oui, y-a-t-il un moyen d'imposer à mon for d'attendre la fin de l'impression avant de lancer la suivante?

Merci d'avance.
-Perdu dans les méandres de la création virtuelle-

7 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 mars 2009 à 19:13
Bonjour,

En principe, le spooler réceptionne les fichiers à imprimer dans l'ordre auquel on lui envoit... Et les renvoient dans le même ordre... Donc la question ne serait-elle pas plutôt, est-ce que Excel liste les feuillles que tu veux imprimer dans l'ordre que tu veux ?
Normalement, c'est l'ordre des onglets qui prime... sinon je ne vois pas.

Exemple de code d'illstration :
Sub es()
Dim Feuille As Worksheet
For Each Feuille In ActiveWorkbook.Worksheets
MsgBox Feuille.Name
Feuille.PrintPreview
Next
End Sub

Amicalement,
Us.
0
cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013
2 mars 2009 à 20:01
Bonsoir,

En fait, dans la boucle, si je ne m'abuse il va donc traiter les infos comme suit:

Feuil1 print
Feuil2 print
Feuil3 print
Feuil4 print
...

La question que je me pose est la suivante: Sommes-nous bien sûr qu'il va attendre que l'impression de Feuil1soit bien terminée (finalisée et envoyée en entier au spooler) avant de passer à la suivante OU se peut-il qu'il lance la Feuil2 avant que la 1 soit finie et que par accumulation de petits retard il en arrive à imprimer par exemple Feuil7 avant Feuil6 (car le retard accumulé par les précédentes excederait la durée complète d'impression de la Feuil6)?

On arriverait en pratique

Ex: 5 Sec de traitement par feuille et 6 secondes de réception par la spooler

Feuil1 (1 sec de retard)
Feuil2 (2 sec de retard)
Feuil3 (3 sec de retard)
Feuil4 (4 sec de retard)
Feuil5 (5 sec de retard)
Feuil7 (6 sec de retard)
Feuil6 (7 sec de retard)
etc...

Ne suis-je pas trop confus? est-ce possible ou suis-je fou ? Que de questions et merci pour les réponses
-Perdu dans les méandres de la création virtuelle-
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
3 mars 2009 à 12:59
Salut,

en supposant que tu ais raison, il existe un moyen de verifié que le la memoire alouée au spooler n'est pas pleinne. Il existe plusieurs API windows qui te permetrait de le verifier.

pour cela tu peux aller voir ici : http://support.microsoft.com/kb/202480/fr

A+
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
3 mars 2009 à 16:30
Bonjour,





"En fait, dans la boucle, si je ne m'abuse il va donc traiter les infos comme suit:
Feuil1 print
Feuil2 print
Feuil3 print
Feuil4 print"




NON. L'ordre dépend du rangement des onglets, et non de la création des feuilles ou autres paramètres... uniquement de l'ordre dans lesquelles elles sont au moment de l'impression. Prends un exemple simple, avec 3 feuilles, avec le code que je propose. Si tu déplaces un onglet (par exemple, la feuille3, en deuxième position) et relance le code, tu pourra constater ce que je dis. Donc le désordre que tu as ne viendrait-il pas de là ?... C'est le sens de ma remarque.

Amicalement,
Us.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
3 mars 2009 à 16:35
Euh... de plus, un spooler plein ne peut pas faire passer une impression avant une autre... sinon c'est un bug.

Amicalement,
Us.
0
cs_Jaxom Messages postés 29 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 22 mars 2013
10 mars 2009 à 10:50
Re Hello,

Après moult test; il semble bien que le problème se trouve quelque part entre mon programme et le parc du client

En effet, si je lance 2 boucles de suite

For each xls
'imprime les feuilles du fichier 1
next

For each xls
'imprime les feuilles du fichier 2
next

J'ai des feuilles du fichier 2 qui arrivent à s'intercaler dans les feuilles du fichier 1

Ex: (Num Magasin 3 digit + B brouillons ou O officiel) (les impressions sont triées sur le num Magasin

Résultat:
...
619B
620B
208F
624B
647B
654B
661B
915F
686B
901B
...

Alors, pour être complet, les feuilles brouillons font entre 2 et 4 pages, les officieles entre 1 et2

Si par contre, j'exécute le logiciel sur mon PC donc tout en local (Soft, DB et imprimante) tout va bien.

Bref, je pense "ralentir" les boucles. Y-a-t-il donc un moyen de monitorer excel pour savoir quand l'impression est finie?

Genre while xls.printing= true PieuteUnPeu ???
-Perdu dans les méandres de la création virtuelle-
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
10 mars 2009 à 12:53
Bonjour,

Bien. Là, je crois que je suis un peu dépassé.
En ce qui concerne Excel, il n'y a pas, à ma connaissance de moyen de savoir si l'impression est finie ou pas. Du moins directement par Excel... En effet, Excel (comme tout logiciel) envoit les impressions et s'en lave les mains ensuite... Il faudrait alors chercher un moyen d'interroger la file d'impression plutôt (pouvant être fait à partir de VBA)... Cela est surement possible, mais bon, comment ?... je ne sais pas trop (peut-être avec une API...)...

Un remarque tout même, puisqu'il s'agit de réseau, il n'y aurait-il pas un réglage possible pour l'imprimante pour lui dire qu'elle imprime les fichiers en attente dans la file les uns à la suite des autres... Il me semble que cela est faisable... En gros, il me semble qu'il y a des paramètres de réglage pour définir les impressions en prioritaire ou pas... et dans ce cas là, il ne faudrait pas de ce genre de chose... Enfin, tout cela pour dire, qu'un simple réglage doit être possible... car normalement, ce que tu observes est également vrai si les envois d'impression se font par d'autres logiciels... Ce n'est pas propre à Excel à priori.

Désolé, de ne pas pouvoir d'aider plus...

Amicalement,
Us.
0
Rejoignez-nous