J'aurais bien essayé de ne faire qu'un seul code pour éviter le surplus de bouton mais cela nécessite de faire un repérage sur la feuille.
Sinon faites les modifications suivantes
1. remplacez la macro tableau par celle ci-dessous
Sub Tableau()
'Fonction ajouter une page type tableau à la suite de l'analyse de risques
Dim derniereligne As Integer
'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True
With Sheets("Analyse de risques")
'Rechercher la denière ligne non vide
derniereligne = .Cells(.Rows.Count, 1).End(xlUp).Row ' + 3
'Controle si la dernière ligne ne contient pas le mot Risque
If .Range("A" & derniereligne) = "Risque" Then Exit Sub
'Coller valeur
Sheets("Modèles").Rows("31:45").Copy .Rows(derniereligne + 3)
'Mise a jour pagination
Call NumeroterPage
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False
End Sub
2. Remplacez la macro Revision
Sub RévisionAR()
'Bouton permettant d'ajouter une page dans le même modèle que le tableau
'pour les raisons de la révision du document
'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True
With Sheets("Analyse de risques")
'Rechercher la denière ligne non vide
Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
y = (Int(Ligne / 30))
a = (30 * y) + 1
'Coller valeur
Sheets("Modèles").Rows("1:30").Copy .Rows(Ligne)
'Mise a jour pagination
Call NumeroterPage
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False
End Sub
3. remplacez le code NumeroterPage par celui ci-dessous
Sub NumeroterPage()
Dim WS As Worksheet
Dim Nblignes As Integer
Dim Totpage As Byte, VC As Byte, HC As Byte
Set WS = Sheets("Analyse de risques")
With WS
'mise en page pour impression
ActiveWindow.View = xlNormalView
Nblignes = .UsedRange.Rows.Count - 1
.PageSetup.PrintArea = "$A$1:$AD$" & Nblignes 'derniereligne + 15
HC = .HPageBreaks.Count + 1
VC = .VPageBreaks.Count + 1
Totpage = HC * VC
End With
Dim prem As String
Dim cel As Range
Dim i As Byte
With WS.Cells
Set cel = .Find("Pagination", LookIn:=xlValues, lookat:=xlPart)
If Not cel Is Nothing Then
prem = cel.Address
i = 1
Do
WS.Range("AB" & cel.Row) = i & " sur " & Totpage
i = i + 1
Set cel = .FindNext(cel)
Loop While Not cel Is Nothing And prem <> cel.Address
End If
End With
End Sub
Si vous voyez un souci dans la numérotation page, n'hésitez par à relancer le code numeroterpage