Macro d'impression: pourkoi ca rame?

joliemaman007

XLDnaute Nouveau
Bonjour tout le monde.
je suis tres dubitative ... si si.
je fais (je pense) une macro super simple:
imprimer une zone fixe, d'une feuille fixe (toujours le meme nom, toujours la meme zone); seule obligation: c'est que l'impression se fasse sur une seule page. ca fonctionne, certe, mais ca met plus de 30 secondes !!! (alors que si j'appuie betement sur le bouton d'impression, c'est 30 fois plus rapide). Ou est le bug ? siouplé ohhh maitres et maitresses des codes encore méconnus de ma petite tete ....

________________

Voici mon code:

a noter:
la valeur de NomDeLaFeuille est 'Form1C'

Sub Imprime_Enregistrement(NomDeLaFeuille As String)
'
' Imprime_Enregistrement Macro
' Macro recorded 22-11-2005 by Joliemaman007
'
'
' Verifier qu'il y a quelque chose à imprimer (donc que ID est rentré
' Pour le moment l'impression ne se fait que sur l'intercalaire Form1C
' donc se deplacer dessus. Par la suite, on pourra faire un loop sur plusieurs
' formulaires a imprimer.

' blocage du mouvement sur l'ecran
Application.ScreenUpdating = False
Application.EnableEvents = False

'sortie de loop si pas de ID car cela veut dire qu'il n'y a rien à imprimer
If NomDeLaFeuille = 'Form1C' And Range('item_id').Value = '' Then GoTo suite

'déprotege
With Worksheets(NomDeLaFeuille)
.Unprotect
End With

'definit le page setup
With Worksheets(NomDeLaFeuille).PageSetup
.PrintTitleRows = ''
.PrintTitleColumns = ''
.LeftHeader = ''
.CenterHeader = ''
.RightHeader = ''
.LeftFooter = '&BXCRED Confidential&B'
.CenterFooter = '&D'
.RightFooter = 'Page &P'
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0.275590551181102)
.TopMargin = Application.InchesToPoints(0.31496062992126)
.BottomMargin = Application.InchesToPoints(0.31496062992126)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.196850393700787)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With

'si on imprime, d'abord effacer les zone de calcul de numerotation
With Worksheets(NomDeLaFeuille)
ActiveSheet.Range('G6').Range('A1').Select
Selection.ClearContents
End With

Worksheets(NomDeLaFeuille).PageSetup.PrintArea = '$A$5:$AL$91'

With Worksheets(NomDeLaFeuille)
.PrintOut
End With

'Reprotege
With Worksheets(NomDeLaFeuille)
.Protect
End With

suite:

Application.EnableEvents = True
Application.ScreenUpdating = True
If NomDeLaFeuille = 'Form1C' And Range('item_id').Value = '' Then MsgBox ('NOTHING TO PRINT / RIEN A IMPRIMER;' & Chr(13) & 'Select one form from the drop down menu' & Chr(13) & 'in the yellow square')

End Sub

:ermm:
joliemaman007
ps: je n'attache pas le fichier car je suis dans l'incapacité de le zipper a 50k max ....
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

es-tu obligé de refaire toute la mise en page car cela prend beaucoup de temps ?

Par exemple les marges les entetes les pieds de page existent déjà ou tu dois les creer ?? car si ils existent déjà il est inutile de les refaire en macro
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir JolieMaman et Pascal, bonsoir à toutes et à tous,

JolieMaman (pléonasme ;)), tu peux aller faire un tour sur le site de site de Frédéric Sigonneau sur Ce site n'existe plus, et pour ton souci de lenteur de mise en page, tu vas voir sous 'Impression et mise en page'. XL4 a encore de beaux jours devant lui à ce niveau-là et si tu cliques sur Ce site n'existe plus, tu verras la possibilité d'accélérer ton code...

Amicalement
Charly

PS : Pour information, le site : Ce site n'existe plus.
 

joliemaman007

XLDnaute Nouveau
Bonjour Pascal et Charly
Tout d'abord à pascal:
1. merci d'avoir déplacé la question. dsl de m'etre fourvoyé. bigre.
2. En fait, je ne sais pas. Je définis les zone et les setup d'impression. Ce ficheir, je vais ensuite le faire parvenir à 30 pays différents qui donc ont des formats différents, alors je voulais etre sure que l'impression se ferait corectement (donc sur 1 seule page),
Si il est suffisant de juste metre une reference au 'print to fit'et que le reste n'est pas necessaire, alors cela devrait convenir. Mais ce qui me surprend, c'est que si on le fait à la main, c'est nettement plus rapide.

Charly: :) - j'aime bien les pléonasmes. j'ai regardé; mais, quand bien meme je défini les variable, cela n'a aucun effet. c'est comme si la macro enregistrait les valeurs des variables, mais la fonction: Application.ExecuteExcel4Macro pSetUp n'a aucun effet.

D'autres idées ?
 

PascalXLD

XLDnaute Barbatruc
Modérateur
RE

Oui tu peux juste faire le

With Worksheets(NomDeLaFeuille).PageSetup
.FitToPagesWide = 1
.FitToPagesTall = 1
End With

Au lieu de toutes tes lignes

Verifies mais tu dois gagner du temps

Tu dis que cela prend plus de temps qu'à la main mais là tu refaisais toute la mise en page à chaque fois les marges les pieds de page les entetes tout quoi même les trucs qui ne changeaient pas
 

joliemaman007

XLDnaute Nouveau
:) :) :) :) :)
YESSSSS

super.
au moins maintenant, ca va vite.
Je n'ai plus qu'a esperer que si les parametres de l'imprimante de l'utilisateur sont différents des miens, cela n'aura pas d'incidence sur le resultat (a savoir impression sur une seule page).

En tous les cas, merci à vous deux,

bonnes fetes a tous

joliemaman
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 862
Membres
103 979
dernier inscrit
imed