Comment afficher Page X / Y sur chaque feuille

Offoloren

XLDnaute Nouveau
Bonjour à tous,

après plusieurs heures de recherche sans trouver le résultat voulu, je me décide enfin à demander de l'aide.

Mon problème :
Je suis en train de créer un document Excel générique qui sera repris par la suite par des collègues et adapté à des cas particuliers.
Pour gagner du temps, je veux automatiser le maximum de taches dont la suivante :

** je veux afficher de façon automatique sur mes feuilles Excel le nombre de feuille que possèdent le classeur (par exemple Page 2 / 3)
Je ne veux pas que ce soit en pied de page mais bien dans le corps de la feuille.
Si j'ai besoin de le faire de façon automatique, c'est que l'utilisateur va créer des onglets selon ses besoins, le nombre de page peut donc changer d'un utilisateur à l'autre.

J'ai trouver comment calculer le nombre total d'onglet (avec ActiveWorkbook.Sheets.Count) mais impossible de trouver comment afficher le numéro de chaque feuille.

Si quelqu'un peut me dépanner, je suis preneur :)

Merci d'avance.
 

Pierrot93

XLDnaute Barbatruc
Re : Comment afficher Page X / Y sur chaque feuille

Re,

à noter, peut être placer ce code dans le module "thisworkbook", événement "newsheet" :
Code:
Option Explicit
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim ws As Worksheet
For Each ws In Worksheets
    ws.Range("A1").Value = "Feuille : " & ws.Index & " / " & Worksheets.Count
Next
End Sub
 

Offoloren

XLDnaute Nouveau
Re : Comment afficher Page X / Y sur chaque feuille

@Pierrot93 : ça marche impeccable. J'ai juste fais une modif en mettant "Private Sub Workbook_SheetActivate(ByVal Sh As Object)" sinon ça ne se mettait pas à jour et comme de toute façon, on est obligé d'aller sur les feuilles créées, ça donne le résultat voulu :)
@gilbert_RGI : désolé mais je n'ai pas compris ta remarque :(

Sinon, petit soucis innatendu quand même (sinon, ça ne serait pas marrant :D). Les onglets créés sont des copies d'onglets cachés. Je ne vois pas comment faire pour que seuls les onglets visibles soient comptabilisés.
Vous auriez peut-être une solution à ce petit inconvéniant :p
 

gilbert_RGI

XLDnaute Barbatruc
Re : Comment afficher Page X / Y sur chaque feuille

en reprenant la code de Pierrot93 (que je salue au passage)

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim ws As Worksheet
    Dim x As Integer, wc As Integer
    For Each ws In Worksheets
        If ws.Visible = False Then wc = wc + 1
    Next
    For Each ws In Worksheets
        If ws.Visible = False Then x = x + 1
        If ws.Visible = True Then
            ws.Range("A1").Value = "Feuille : " & ws.Index - x & " / " & Worksheets.Count - wc
        End If
    Next
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment afficher Page X / Y sur chaque feuille

Bonjour,


Code:
Function pagine()
 pagine = Application.Caller.Parent.Index & "/" & Sheets.Count
End Function

JB
 

Pièces jointes

  • Pagine.xls
    28.5 KB · Affichages: 70
  • Pagine.xls
    28.5 KB · Affichages: 69
  • Pagine.xls
    28.5 KB · Affichages: 67

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment afficher Page X / Y sur chaque feuille

Code:
Function pagine()
 n = 0
 For Each s In ActiveWorkbook.Sheets
   n = n + -(s.Visible)
 Next
 For i = 1 To Application.Caller.Parent.Index
   k = k + -(Sheets(i).Visible)
 Next i
 pagine = k & "/" & n
End Function


JB
 

Pièces jointes

  • Pagine.xls
    25.5 KB · Affichages: 51
  • Pagine.xls
    25.5 KB · Affichages: 51
  • Pagine.xls
    25.5 KB · Affichages: 49

Offoloren

XLDnaute Nouveau
Re : Comment afficher Page X / Y sur chaque feuille

ben, comment dire gilbert, ta méthode .... marche nickel :D Merci beaucoup.

BOISGONTIER, ta fonction est très intéressante, je la retiens mais c'est vrai que pour mon cas particulier, ça coince avec les onglets cachés.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Comment afficher Page X / Y sur chaque feuille

Code:
Function pagine()
 n = 0
 For Each s In ActiveWorkbook.Sheets
   n = n + -(s.Visible)
 Next
 For i = 1 To Application.Caller.Parent.Index
   k = k + -(Sheets(i).Visible)
 Next i
 pagine = k & "/" & n
End Function

Super JB

petit inconvenient la mise en place de la fonction n'est pas automatisée à l'insertion de la feuille
 

Dull

XLDnaute Barbatruc
Re : Comment afficher Page X / Y sur chaque feuille

Salut le Fil

Super Fonction JB :)

j'ajouterais juste

Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Calculate
End Sub
dans le Module ThisWorkbook
au cas où il y a masquage/démasquage des feuilles existantes

Bonne Journée
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 979
Membres
103 996
dernier inscrit
KB4175