Afficher le numéro de page sur une feuille
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 : Laurent Longre
Mots clefs associés à cette page : imprimer, imprimante, numéro, page
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
