Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Centre$, Gauche$, Ws As Worksheet, Plage As Range
Dim Lignes&
Application.ScreenUpdating = False
With ThisWorkbook
For Each Ws In .Worksheets
'définir les commentaires gauche et centre pour l'entête d'impression
Gauche = .Worksheets('Date').Range('D3')
Centre = ' Coupe formation Niv 1-2-3 ' & .Worksheets('Date').Range('D2')
'=======================Concerne feuille Niveaux 1======================
With Ws
Select Case .Name
Case 'Date', 'Notice', 'Accueil', Is <> ''
Centre = ''
Gauche = ''
Select Case .Name
Case 'Date'
Set Plage = .Range('A1:F106')
Case 'Notice'
Set Plage = .Range('A1:M39')
Case 'Accueil'
Set Plage = .Range('A1:M43')
Case Is <> ''
Set Plage = .Range('A1:S41')
End Select
Case 'Niveau 1', 'Niveau 2', 'Niveau 3'
If .Range('A5') = '' Then
Select Case .Name
Case 'Niveau 1'
Set Plage = .Range('A5:AT5')
Case 'Niveau 2'
Set Plage = .Range('A5:AX5')
Case 'Niveau 3'
Set Plage = .Range('A5:BN5')
End Select
Else
Set Plage = .Range('A5:A65536')
Lignes = WorksheetFunction.CountIf(Plage, '>''') + WorksheetFunction.Count(Plage)
Select Case .Name
Case 'Niveau 1'
Set Plage = Plage.Resize(Lignes, 46)
Case 'Niveau 2'
Set Plage = Plage.Resize(Lignes, 50)
Case 'Niveau 3'
Set Plage = Plage.Resize(Lignes, 66)
End Select
End If
End Select
.Unprotect
.PageSetup.CenterHeader = Centre
.PageSetup.LeftHeader = Gauche
.PageSetup.PrintArea = Plage.Address
.Protect
End With
Next Ws
End With
Application.ScreenUpdating = True
End Sub