Sub AffComb(a&, b&)
Dim i&, j&, NbCmb#, Tb&(), NbWrt#, NbRw&, m&, c%, Tc&(), s&, d&
Dim k&
If b > a Or b < 2 Or b > Columns.Count Then Exit Sub
Application.ScreenUpdating = False: m = Application.Calculation: Application.Calculation = xlCalculationManual
d = a - b
NbCmb = WorksheetFunction.Combin(a, b): NbWrt = NbCmb
ReDim Tc(1 To b)
Application.StatusBar = "Reste à écrire : " & NbWrt
Do
Sheets.Add: s = s + 1
Do
If NbWrt > Rows.Count Then NbRw = Rows.Count Else NbRw = NbWrt
ReDim Tb(1 To NbRw, 1 To b)
k = 0
If c = 0 And s = 1 Then
For i = 1 To b: Tb(1, i) = i: Next i
Else
Tb(1, 1) = Tc(1) - (Tc(2) = d + 2)
For i = 2 To b - 1
If Tc(i + 1) = d + i + 1 Then Tb(1, i) = Tc(i + (Tc(i) = d + i)) + 1 Else Tb(1, i) = Tc(i)
Next i
Tb(1, b) = Tc(b + (Tc(b) = a)) + 1
For j = 1 To b - 2
If Tb(1, j) + 1 = Tb(1, j + 1) And Tb(1, j) + 2 = Tb(1, j + 2) Then Exit For
Next
If j > b - 2 Then
k = 1
For j = 1 To b: Tb(k, j) = Tb(1, j): Next
End If
End If
For i = 2 To NbRw
Tb(i, 1) = Tb(i - 1, 1) - (Tb(i - 1, 2) = d + 2)
For j = 2 To b - 1
If Tb(i - 1, j + 1) = d + j + 1 Then
If Tb(i - 1, j) = d + j Then Tb(i, j) = Tb(i, j - 1) + 1 Else Tb(i, j) = Tb(i - 1, j) + 1
Else
Tb(i, j) = Tb(i - 1, j)
End If
Next j
If Tb(i - 1, b) = a Then Tb(i, b) = Tb(i, b - 1) + 1 Else Tb(i, b) = Tb(i - 1, b) + 1
For j = 1 To b - 2
If Tb(i, j) + 1 = Tb(i, j + 1) And Tb(i, j) + 2 = Tb(i, j + 2) Then Exit For
Next
If j > b - 2 Then
k = k + 1
For j = 1 To b: Tb(k, j) = Tb(i, j): Next
End If
Next i
Cells(1, 1).Resize(k, b).Offset(0, c * (b + 1)).Value = Tb
NbWrt = Round(NbWrt - NbRw): If NbWrt = 0 Then Exit Do
For i = 1 To b: Tc(i) = Tb(NbRw, i): Next i
c = c + 1
Application.StatusBar = "Reste à écrire : " & NbWrt
Loop Until c * (b + 1) + b > Columns.Count
c = 0
Cells.EntireColumn.AutoFit
Loop Until NbWrt = 0
Application.ScreenUpdating = True: Application.Calculation = m
End Sub