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 A2
5 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).

Auteur :

Mots clefs associés à cette page : , , ,