Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'impression

4 réponses
Avatar
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.

4 réponses

Avatar
Jac
... 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.


Avatar
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" a écrit dans le message de groupe de 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.
Avatar
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" a écrit dans le message de groupe de 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" a écrit dans le message de groupe de 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.
Avatar
MiMa
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" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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" a écrit dans le message de groupe de
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.