Option Explicit
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then ComboBox1 = "Janvier"
End Sub
Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = -1 Then ComboBox2 = Year(Date)
End Sub
Private Sub ComboBox3_Change()
If ComboBox3.ListIndex = -1 Then ComboBox3 = "12 mois"
Me.Caption = "Impression " & ComboBox3
End Sub
Private Sub ComboBox4_Change()
If ComboBox4.ListIndex = -1 Then ComboBox4 = 4
End Sub
Private Sub ComboBox5_Change()
If ComboBox5.ListIndex = -1 Then ComboBox5 = 1
End Sub
Private Sub CommandButton1_Click() 'OK
Dim npage As Byte, F1 As Worksheet, copie As Byte, F2 As Worksheet, i%, jour As Date
npage = ComboBox4 'nombre de mois par page
Me.Hide
Set F1 = ActiveSheet
For copie = 1 To Val(ComboBox5)
Next
F1.Copy 'nouveau document
Set F2 = ActiveSheet
F1.Activate
With F2.PageSetup
.PrintArea = "$A:$H"
.CenterHorizontally = True
.CenterVertically = Val(ComboBox3) = 1 Or npage = 1
.Orientation = IIf(Val(ComboBox3) = 1 Or npage = 1, xlLandscape, xlPortrait)
.BlackAndWhite = CheckBox1
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.DisplayAlerts = False
For i = 1 To Val(ComboBox3)
With F2.[A1].Offset(16 * ((i - 1) Mod npage))
F1.[1:16].Copy .Cells
.Cells.Copy .Cells 'vide le presse-papiers
jour = DateSerial(Val(ComboBox2), ComboBox1.ListIndex + i, 1)
.Cells(, 4) = Application.Proper(Format(jour, "mmmm"))
.Cells(, 6).Name = "An"
.Cells(, 6) = Year(jour)
.Resize(16, 8) = .Resize(16, 8).Value
End With
If i Mod npage = 0 Or i = Val(ComboBox3) Then
DoEvents 'pour que l'affichage soit bien à jour
'F2.PrintPreview 'pour tester
F2.PrintOut 'pour imprimer
'F2.PrintOut Copies:=Val(ComboBox5) 'pour imprimer
F2.[A:H].Clear
End If
Next
F2.Parent.Close False
Me.Show
End Sub
Private Sub UserForm_Initialize()
Dim a, i%
a = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
For i = 1 To 12
ComboBox1.AddItem a(i - 1)
ComboBox3.AddItem i & " mois"
ComboBox5.AddItem i
Next
For i = 1 To 6
ComboBox4.AddItem i
Next
ComboBox1 = IIf([D1] = "", " ", [D1])
ComboBox3 = " "
ComboBox4 = " "
ComboBox5 = " "
For i = 2009 To 2020
ComboBox2.AddItem i
Next
ComboBox2 = IIf([An] = "", " ", [An])
End Sub