Sub ComptageCongés()
Dim tablo, i%, j%, N%, Lecr%, Début, Fin
Application.ScreenUpdating = False
With Sheets("extraction")
DL = .[A65500].End(xlUp).Row
.Range("P2:P" & DL).FormulaLocal = "=SI(I2=1;H2;SI(K2=1;J2;SI(M2=1;L2;SI(O2=1;N2;0))))" ' En col P, 1 si une absence sinon 0
tablo = .Range("A2:P" & DL) ' On met tout dans un tableau
.[P:P].ClearContents ' On efface les formules
End With
With Sheets("Synthèse")
.[A2:J10000].ClearContents
Lecr = 2 ' Init ligne d'écriture
DL = UBound(tablo)
For i = 1 To DL
If tablo(i, 16) <> 0 Then ' Si 1 alors il y a un congés sur la ligne
Début = tablo(i, 7) ' On enregistre la date de début
j = i
While tablo(j, 16) = tablo(i, 16) ' Tant que le congé n'a pas changé
j = j + 1 ' On continue
Wend
Fin = tablo(j - 1, 7) ' Sinon on enregistre la date de Fin
For N = 1 To 6 ' On recopie les 6 1eres colonnes
.Cells(Lecr, N) = tablo(i, N)
Next N
.Cells(Lecr, 7) = tablo(i, 16) ' Type congé
.Cells(Lecr, 8) = Début ' date début
.Cells(Lecr, 9) = Fin ' Date de fin
.Cells(Lecr, 10) = 1 + Fin - Début ' Nombre de jours
Lecr = Lecr + 1: i = j ' Réinit pointeurs
End If
Next i
End With
End Sub