Problème d'impression

Le
MiMa
Bonjour

Lorsque, par Visual basic, je définie une zone d'impression différente pour
un certain nombre de feuilles (environs 150), la procédure est très longue à
s'exécuter.
J'utilise le code (extrait) suivant :
..
'<<< PlgImp=Définition de la plage d'impression
PlgImp = Range("A8").CurrentRegion.Offset(-5, 0).Address
With H.PageSetup
.PrintArea = PlgImp
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
.Orientation = xlPortrait
End With
..
Existe-il un moyen accélérer le processus ? Ou bien une autre méthode pour
obtenir le même résultat ?
Merci à tous les Excelants.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jac
Le #20661031
... peut-être qu'en sélectionnant toutes les feuilles concernées et en
appliquant le PageSetup en une fois, ça pourrait devenir acceptable.

La plage d'impression variable pourrait se définir par une zone nommée
dynamiquement par une macro qui boucle sur toutes les feuilles. Ça
c'est rapide. donc la .PrintArea = PlgImp pourrait devenir .PrintArea =
Zone
(pas testé).

Jac

MiMa avait prétendu :
Bonjour

Lorsque, par Visual basic, je définie une zone d'impression différente pour
un certain nombre de feuilles (environs 150), la procédure est très longue à
s'exécuter.
J'utilise le code (extrait) suivant :
..............
'<<< PlgImp=Définition de la plage d'impression
PlgImp = Range("A8").CurrentRegion.Offset(-5, 0).Address
With H.PageSetup
.PrintArea = PlgImp
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
.Orientation = xlPortrait
End With
..............
Existe-il un moyen accélérer le processus ? Ou bien une autre méthode pour
obtenir le même résultat ?
Merci à tous les Excelants.


michdenis
Le #20663161
Bonjour,

Les procédures de mise en page produites par VBA ont toujours
été plutôt lentes à s'exécuter !

Mais tu peux très bien définir une mise en page pour une feuille
donnée par la commande Fichier / mise en page et enregistrer
ton fichier lorsque celle-ci est définie selon tes désirs. Excel va
enregistrer la mise en page faite au même titre que tes données.

Ceci signifie qu'à chaque fois que tu imprimeras une plage de cette
feuille, il appliquera la mise en page que tu as définie.

Tu as droit de définir une mise en page type par feuille.

Au moment de lancer l'impression, tu peux appliquer ceci pour
spécifier la plage d'impression seulement. Ceci rendra ta procédure
plus rapide....
'-----------------------------------
Sub test()
Dim PlgImp As String
With Worksheets("Feuil1")
PlgImp = .Range("A8").CurrentRegion.Offset(-5, 0).Address
.PageSetup.PrintArea = PlgImp
.PrintPreview 'à remplacer par PrintOut...
.PageSetup.PrintArea = ""
End With
End Sub
'-----------------------------------

Et selon tes besoins, il est possible d'utiliser la procédure événementielle
du ThisWorkbook pour appeler la macro...
'-----------------------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub
'-----------------------------



"MiMa" 4b1302a0$0$19150$
Bonjour

Lorsque, par Visual basic, je définie une zone d'impression différente pour
un certain nombre de feuilles (environs 150), la procédure est très longue à
s'exécuter.
J'utilise le code (extrait) suivant :
..............
'<<< PlgImp=Définition de la plage d'impression
PlgImp = Range("A8").CurrentRegion.Offset(-5, 0).Address
With H.PageSetup
.PrintArea = PlgImp
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
.Orientation = xlPortrait
End With
..............
Existe-il un moyen accélérer le processus ? Ou bien une autre méthode pour
obtenir le même résultat ?
Merci à tous les Excelants.
michdenis
Le #20663431
Il y a un fichier que j'ai commis expliquant une autre façon de procéder
pour écrire le code, plus rapide ... voir là :

http://cjoint.com/?lEnFzLghGm



"michdenis"
Bonjour,

Les procédures de mise en page produites par VBA ont toujours
été plutôt lentes à s'exécuter !

Mais tu peux très bien définir une mise en page pour une feuille
donnée par la commande Fichier / mise en page et enregistrer
ton fichier lorsque celle-ci est définie selon tes désirs. Excel va
enregistrer la mise en page faite au même titre que tes données.

Ceci signifie qu'à chaque fois que tu imprimeras une plage de cette
feuille, il appliquera la mise en page que tu as définie.

Tu as droit de définir une mise en page type par feuille.

Au moment de lancer l'impression, tu peux appliquer ceci pour
spécifier la plage d'impression seulement. Ceci rendra ta procédure
plus rapide....
'-----------------------------------
Sub test()
Dim PlgImp As String
With Worksheets("Feuil1")
PlgImp = .Range("A8").CurrentRegion.Offset(-5, 0).Address
.PageSetup.PrintArea = PlgImp
.PrintPreview 'à remplacer par PrintOut...
.PageSetup.PrintArea = ""
End With
End Sub
'-----------------------------------

Et selon tes besoins, il est possible d'utiliser la procédure événementielle
du ThisWorkbook pour appeler la macro...
'-----------------------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub
'-----------------------------



"MiMa" 4b1302a0$0$19150$
Bonjour

Lorsque, par Visual basic, je définie une zone d'impression différente pour
un certain nombre de feuilles (environs 150), la procédure est très longue à
s'exécuter.
J'utilise le code (extrait) suivant :
..............
'<<< PlgImp=Définition de la plage d'impression
PlgImp = Range("A8").CurrentRegion.Offset(-5, 0).Address
With H.PageSetup
.PrintArea = PlgImp
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
.Orientation = xlPortrait
End With
..............
Existe-il un moyen accélérer le processus ? Ou bien une autre méthode pour
obtenir le même résultat ?
Merci à tous les Excelants.
MiMa
Le #20681421
Bonsoir MichDenis

Milles excuses pour le retard de ma réponse, mais j'ai été obligé de
m'abscenter.
Merci pour tous ces renseignements.
Comme tu me le conseilles, je passe la définition de la zone d'impression au
moment de l'impression. C'est effectivement plus rapide.



"michdenis"
Il y a un fichier que j'ai commis expliquant une autre façon de procéder
pour écrire le code, plus rapide ... voir là :

http://cjoint.com/?lEnFzLghGm



"michdenis" discussion :

Bonjour,

Les procédures de mise en page produites par VBA ont toujours
été plutôt lentes à s'exécuter !

Mais tu peux très bien définir une mise en page pour une feuille
donnée par la commande Fichier / mise en page et enregistrer
ton fichier lorsque celle-ci est définie selon tes désirs. Excel va
enregistrer la mise en page faite au même titre que tes données.

Ceci signifie qu'à chaque fois que tu imprimeras une plage de cette
feuille, il appliquera la mise en page que tu as définie.

Tu as droit de définir une mise en page type par feuille.

Au moment de lancer l'impression, tu peux appliquer ceci pour
spécifier la plage d'impression seulement. Ceci rendra ta procédure
plus rapide....
'-----------------------------------
Sub test()
Dim PlgImp As String
With Worksheets("Feuil1")
PlgImp = .Range("A8").CurrentRegion.Offset(-5, 0).Address
.PageSetup.PrintArea = PlgImp
.PrintPreview 'à remplacer par PrintOut...
.PageSetup.PrintArea = ""
End With
End Sub
'-----------------------------------

Et selon tes besoins, il est possible d'utiliser la procédure
événementielle
du ThisWorkbook pour appeler la macro...
'-----------------------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub
'-----------------------------



"MiMa" discussion :
4b1302a0$0$19150$
Bonjour

Lorsque, par Visual basic, je définie une zone d'impression différente
pour
un certain nombre de feuilles (environs 150), la procédure est très longue
à
s'exécuter.
J'utilise le code (extrait) suivant :
..............
'<<< PlgImp=Définition de la plage d'impression
PlgImp = Range("A8").CurrentRegion.Offset(-5, 0).Address
With H.PageSetup
.PrintArea = PlgImp
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
.Orientation = xlPortrait
End With
..............
Existe-il un moyen accélérer le processus ? Ou bien une autre méthode pour
obtenir le même résultat ?
Merci à tous les Excelants.



Publicité
Poster une réponse
Anonyme