OVH Cloud OVH Cloud

Compter le nombre de pages à imprimer

23 réponses
Avatar
bcar
Bonjour,

Comment faire sous excel 2003 pour compter le nombre de pages qui vont
être imprimée dans une worksheet ?

Sous 2007 je fais ThisWorkbook.Worksheets(1).PageSetup.Pages.Count et
c'est bon, mais la propriété Pages n'existe pas sous 2003.

Mon but est de compter le nombre de pages total qui vont être imprimées
dans le classeur pour faire uns numérotation globale (et non pas qui
repart à 1 pour chaque worksheet) : 1/x, 2/x, ... dans les pieds de page
des feuilles imprimées.

sous 2007 je fais grosso modo :
cpt = cpt + ThisWorkbook.Worksheets(1).PageSetup.Pages.Count
cpt = cpt + ThisWorkbook.Worksheets(2).PageSetup.Pages.Count
total = cpt
cpt = 0
With ThisWorkbook.Worksheets(1)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With
With ThisWorkbook.Worksheets(2)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With

Merci pour vos réponses

3 réponses

1 2 3
Avatar
isabelle
bonjour,

j'ai testé cette macro et elle fonctionne bien pour des zone d'impression défini,

Sub test2()
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
strSheetName = "[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name
MsgBox ExecuteExcel4Macro("Get.Document(50," & """" & strSheetName & """" & ")")
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub

isabelle

Non en fait le problème vient du fait que j'ai définit la zone
d'impression de chacune de mes feuilles, c'est cela qui fait que
ExecuteExcel4Macro("Get.Document"...) donne de mauvais résultats

Je continue de chercher, mais si quelqu'un à une astuce, je suis preneur

Bonjour,

merci beaucoup, je ne connaissais pas cette méthode.
Malheureusement elle ne fonctionne pas, elle s'obstine à me renvoyer
22 alors que mon la feuille que je teste contient 10 pages, et que
l'ensemble des feuilles que je désire imprimer fait 33 pages et que
l'ensemble du classeur en fait une centaine.

En fait le problème à l'air de venir du fait que :
- je suis en mode paysage
- je travaille avec les échelles : j'ajuste à 1 page en largeur ce qui
à pour conséquence de faire une Réduction d'échelle comprise suivant
les feuilles entre 70% et 80% de la taille normale.

Cependant comme cela marche parfaitement sous 2007, je reste persuadé
qu'il doit bien y avoir un moyen de le faire sous 2003, même si c'est
barbare ou détourné.



Bonjour bcar,

Sub testImp()
MsgBox "Votre édition comportera : " _
& Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") _
& " feuille(s)"
End Sub


ChrisV


"bcar" a écrit dans le message de news:
fov43n$ojt$
Bonjour,

Comment faire sous excel 2003 pour compter le nombre de pages qui
vont être imprimée dans une worksheet ?

Sous 2007 je fais ThisWorkbook.Worksheets(1).PageSetup.Pages.Count
et c'est bon, mais la propriété Pages n'existe pas sous 2003.

Mon but est de compter le nombre de pages total qui vont être
imprimées dans le classeur pour faire uns numérotation globale (et
non pas qui repart à 1 pour chaque worksheet) : 1/x, 2/x, ... dans
les pieds de page des feuilles imprimées.

sous 2007 je fais grosso modo :
cpt = cpt + ThisWorkbook.Worksheets(1).PageSetup.Pages.Count
cpt = cpt + ThisWorkbook.Worksheets(2).PageSetup.Pages.Count
total = cpt
cpt = 0
With ThisWorkbook.Worksheets(1)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With
With ThisWorkbook.Worksheets(2)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With

Merci pour vos réponses










Avatar
isabelle
...et pour plusieurs feuille sélectionner,

Sub test3()
Application.ScreenUpdating = False
For Each f In ActiveWorkbook.Windows(1).SelectedSheets
f.Activate
ActiveWindow.View = xlPageBreakPreview
strSheetName = "[" & ActiveWorkbook.Name & "]" & f.Name
m = ExecuteExcel4Macro("Get.Document(50," & """" & strSheetName & """" & ")")
total = total + m
ActiveWindow.View = xlNormalView
Next
MsgBox total
Application.ScreenUpdating = True
End Sub

isabelle

bonjour,

j'ai testé cette macro et elle fonctionne bien pour des zone
d'impression défini,

Sub test2()
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
strSheetName = "[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name
MsgBox ExecuteExcel4Macro("Get.Document(50," & """" & strSheetName &
"""" & ")")
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub

isabelle

Non en fait le problème vient du fait que j'ai définit la zone
d'impression de chacune de mes feuilles, c'est cela qui fait que
ExecuteExcel4Macro("Get.Document"...) donne de mauvais résultats

Je continue de chercher, mais si quelqu'un à une astuce, je suis preneur

Bonjour,

merci beaucoup, je ne connaissais pas cette méthode.
Malheureusement elle ne fonctionne pas, elle s'obstine à me renvoyer
22 alors que mon la feuille que je teste contient 10 pages, et que
l'ensemble des feuilles que je désire imprimer fait 33 pages et que
l'ensemble du classeur en fait une centaine.

En fait le problème à l'air de venir du fait que :
- je suis en mode paysage
- je travaille avec les échelles : j'ajuste à 1 page en largeur ce
qui à pour conséquence de faire une Réduction d'échelle comprise
suivant les feuilles entre 70% et 80% de la taille normale.

Cependant comme cela marche parfaitement sous 2007, je reste persuadé
qu'il doit bien y avoir un moyen de le faire sous 2003, même si c'est
barbare ou détourné.



Bonjour bcar,

Sub testImp()
MsgBox "Votre édition comportera : " _
& Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") _
& " feuille(s)"
End Sub


ChrisV


"bcar" a écrit dans le message de news:
fov43n$ojt$
Bonjour,

Comment faire sous excel 2003 pour compter le nombre de pages qui
vont être imprimée dans une worksheet ?

Sous 2007 je fais ThisWorkbook.Worksheets(1).PageSetup.Pages.Count
et c'est bon, mais la propriété Pages n'existe pas sous 2003.

Mon but est de compter le nombre de pages total qui vont être
imprimées dans le classeur pour faire uns numérotation globale (et
non pas qui repart à 1 pour chaque worksheet) : 1/x, 2/x, ... dans
les pieds de page des feuilles imprimées.

sous 2007 je fais grosso modo :
cpt = cpt + ThisWorkbook.Worksheets(1).PageSetup.Pages.Count
cpt = cpt + ThisWorkbook.Worksheets(2).PageSetup.Pages.Count
total = cpt
cpt = 0
With ThisWorkbook.Worksheets(1)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With
With ThisWorkbook.Worksheets(2)
.PageSetup.CenterFooter = "Page &P+" & cpt & " de " & total
cpt = cpt + .PageSetup.Pages.Count
.PrintOut Copies:=1, Collate:=True
End With

Merci pour vos réponses












Avatar
bcar
Oui effectivement cette fonction marche sauf dans au moins un cas :
si on fait "mise en page - ajuster 1 page(s) en largeur" la fonction ne
donnera pas le bon résultat, pourquoi ?
Par contre si on choisit de spécifier "Réduire/Agrandir à" et qu'on y
met le même pourcentage que celui qu'Excel avait calculé pour le
"Ajuster-1 pages(s) en largeur" cela fonctionne.
A mon avis c'est un bug.

C'est de là que vient mon problème. Je vais donc spécifier des
pourcentage de réduction plutôt que de forcer l'ajustement

En tout cas merci pour toutes vos propositions qui m'ont permis
d'avancer sur le sujet.

...et pour plusieurs feuille sélectionner,

Sub test3()
Application.ScreenUpdating = False
For Each f In ActiveWorkbook.Windows(1).SelectedSheets
f.Activate
ActiveWindow.View = xlPageBreakPreview
strSheetName = "[" & ActiveWorkbook.Name & "]" & f.Name
m = ExecuteExcel4Macro("Get.Document(50," & """" & strSheetName & """" &
")")
total = total + m
ActiveWindow.View = xlNormalView
Next
MsgBox total
Application.ScreenUpdating = True
End Sub

isabelle

bonjour,

j'ai testé cette macro et elle fonctionne bien pour des zone
d'impression défini,

Sub test2()
Application.ScreenUpdating = False
ActiveWindow.View = xlPageBreakPreview
strSheetName = "[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name
MsgBox ExecuteExcel4Macro("Get.Document(50," & """" & strSheetName &
"""" & ")")
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub

isabelle





1 2 3