Voir aussi
Compter le nombre de pages à imprimer
Comment savoir le nombre de pages qui va être imprimé à partir dune feuille ? Cela me permettra de faire une numérotation de pages qui affiche Num page/nb total de pages
Avec xl2007: ThisWorkbook.Worksheets(1).PageSetup.Pages.Count

Avec les versions antérieures cette fonction n'existe pas.

le plus simple : recourir aux bonnes vieilles macros XL4 (toujours fonctionnelles, même dans XL2007)

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


Cette ligne
NbPages = (Sheets(1).HPageBreaks.Count + 1) * (Sheets(1).VPageBreaks.Count + 1)
fonctionne très bien... sauf si tu as des données dicontinues du genre des données en A1:A100 et en AA1:AA30.

Essaie ceci si tu imprimes format paysage
et que tu limites la largeur à une page

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Sh As Worksheet
For Each Sh In ActiveWindow.SelectedSheets
With Sh.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
' .CenterFooter = "&P & "" page"" /&N & "" Pages"
'OU
.CenterFooter = "&P/&N"
End With
Next
End Sub
ChrisV, Denis Michon,
Ajouté ou modifié le 05/04/2008 (N°1996)
Combien de feuilles vont s'imprimer ?
Avant de lancer l'impression de ma feuille Excel, j'aimerais savoir combien de feuilles vont sortir de mon imprimante.
Pour la feuille active:
Sub test()
nbpages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
MsgBox nbpages
End Sub

ou sinon :

MsgBox (ActiveSheet.HPageBreaks.Count + 1) *
(ActiveSheet.VPageBreaks.Count + 1)

S'il y a plusieurs feuilles:

tpage = 0
For s = 1 To 3
tpage = tpage + (Sheets(s).HPageBreaks.Count + 1) *
(Sheets(s).VPageBreaks.Count + 1)
Next s
MsgBox tpage
Denis Michon, Jacques Boisgontier,
Ajouté ou modifié le 27/10/2007 (N°1911)
Afficher le numéro de page sur une feuille
Je souhaiterais afficher le numéro de la page dans une cellule du haut de mon tableau. Cette cellule fait partie d'une ligne que je recopie pour la mise en page lors de l'impression. Donc le numéro de page change avec la mise en page.
Cette fonction perso (adaptation de Frédéric Sigonneau) renvoie le
numéro de la page de la cellule où elle est appelée :

Function NumPage() As Integer
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Wksht As Worksheet, Cellule As Range
Dim Col As Integer, Ligne As Long

Application.Volatile
Set Cellule = Application.Caller
Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
If Wksht.PageSetup.Order = xlDownThenOver Then
HPC = Wksht.HPageBreaks.Count + 1
VPC = 1
Else
VPC = Wksht.VPageBreaks.Count + 1
HPC = 1
End If
NumPage = 1
For Each VPB In Wksht.VPageBreaks
If VPB.Location.Column > Col Then Exit For
NumPage = NumPage + HPC
Next VPB
For Each HPB In Wksht.HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NumPage = NumPage + VPC
Next HPB
End Function

Ensuite, en A25 par exemple :

=NumPage()

Pour obtenir le résultat que tu souhaites, cela suppose que tu n'utilises pas
l'option Lignes à répéter en haut de la boite de dialogue Mise en page. Il faut
bien, comme tu l'écris, que la fonction soit saisie sur "une ligne que tu
recopies pour la mise en page lors de l'impression.

Attention aussi : HPageBreaks et VPageBreaks ont parfois tendance à provoquer
des erreurs d'exécution injustifiées, au moins sous Excel 97. Je crois
qu'il faut utiliser le moins possible l'aperçu des sauts de page pour
éviter ce bogue par la suite.

Ci-dessous une fonction du même type en XLM. Il est possible (?) que ce soit
plus stable qu'en VBA. En tout cas c'est très nettement plus rapide à l'exécution,
dans la mesure où il est possible de récupérer en une seule fois tous les sauts
de page horizontaux et verticaux dans des tableaux, alors que HPageBreaks et
VPageBreaks obligent à des boucles. Ces boucles sont remplacées ici par de
simples EQUIV. La version XLM est environ 21 fois plus rapide que VBA pour
renvoyer le numéro de page 20/40 (testé sous XL2000).

=VOLATILE()
=POSER.NOM("Doc";LIRE.CELLULE(62;CELLULE.APPELANTE()))
=POSER.NOM("VP";LIRE.DOCUMENT(64;Doc))
=SI(ESTNA(VP))
=POSER.NOM("VPC";1)
=POSER.NOM("VPN";0)
=SINON()
=POSER.NOM("VPC";COLONNES(VP)+1)
=POSER.NOM("VPN";EQUIV(LIGNE(CELLULE.APPELANTE());VP))
=SI(ESTNA(VPN))
=POSER.NOM("VPN";0)
=FIN.SI()
=FIN.SI()
=POSER.NOM("HP";LIRE.DOCUMENT(65;Doc))
=SI(ESTNA(HP))
=POSER.NOM("HPC";1)
=POSER.NOM("HPN";0)
=SINON()
=POSER.NOM("HPC";COLONNES(HP)+1)
=POSER.NOM("HPN";EQUIV(COLONNE(CELLULE.APPELANTE());HP))
=SI(ESTNA(HPN))
=POSER.NOM("HPN";0)
=FIN.SI()
=FIN.SI()
=RETOUR(SI(LIRE.DOCUMENT(61;Doc)=1;VPC*HPN+VPN;HPC*VPN+HPN)+1)

J'ai intégré l'équivalent de cette fonction dans une version récente de
Morefun.xll (fonction NUMPAGE).
Laurent Longre,
Ajouté ou modifié le 19/05/2004 (N°1417)
Position des sauts de page
Comment trouver la position des sauts de page ?
Voici un MsgBox qui te donne le numéro de ligne de la première cellule qui a
franchi le premier saut de page horizontal :

MsgBox Worksheets(1).HPageBreaks(1).Location

avec HPageBreaks(i) ou i est le ième saut de page

En ayant repéré la ligne qui suit le saut de page, tu connais par
soustraction la ligne juste au-dessus...
Hervé, (N°951)
Insérer saut de page au changement d'initiale
J'ai un tableau trié alphabétiquement sur la 1ère colonne. J'aimerais insérer automatiquement un saut de page, après chaque changement de 1ère lettre sur cette première colonne.
Sub zaza()
Dim c As Range
On Error Resume Next
For Each c In Range("Zn")
If Left(c, 1) <> Left(c.Offset(-1), 1) Then _
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=c
Next c
End Sub
ChrisV, (N°950)
Numéros de pages onglet par onglet pour tout le classeur
J'ai mis des numéros de page à toutes mes feuilles (dans les pieds de page) sous le format numéro page /nombre total de page. Le problème c'est qu'il compte les pages sur le total des pages de tout le classeur or je voudrais avoir une numérotation des pages par feuille de calcul. Est-ce possible sans devoir imprimer chaque feuille séparément ?
Oui, en passant par le gestionnaire de rapports. Sous XL2000:

Affichage/Gestionnaire de rapports/Ajouter, Nom du rapport: "Zaza",
section à ajouter: (ici tu cliques successivement sur le nom des
feuilles dans la liste déroulante "Feuille" et tu les ajoutes avec le
bouton "Ajouter"). Enfin tu cliques sur OK (*), ce qui te ramène à une
boîte de dialogue "Gestionnaire de rapports" à partir de laquelle tu
peux imprimer (mais pas d'aperçu avant impression: il faut avoir
confiance!).
Laurent Mortézai, (N°949)
Nombre de pages à imprimer
Comment afficher le nombre de pages à imprimer dans la barre d'état (comme on le voit dans l'aperçu avant impression...) ?
Sub testImp()
Application.StatusBar = _
"Votre édition comportera : " _
& Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") _
& " feuille(s)"
End Sub

Pour restaurer l'état "normal" de la barre d'état:
Application.StatusBar = False

Cette peut également être mise dans quelques évènements de
feuille qui pourrait modifier ce nb de pages à imprimer genre :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
testImp
End Sub
ChrisV, Popi, (N°948)