Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, nlig&, resu(), j%, i&, test As Boolean
tablo = [A1].CurrentRegion.Resize(, 8)
nlig = UBound(tablo)
ReDim resu(1 To nlig, 1 To 14)
For j = 2 To 8
For i = 2 To nlig
test = False
If j <> 7 And IsDate(tablo(i, j)) Then test = Year(tablo(i, j)) > 1900
If j = 7 And IsNumeric(CStr(tablo(i, j))) Then test = tablo(i, j) > 0
If test Then
resu(i, 2 * j - 3) = tablo(i, 1)
resu(i, 2 * j - 2) = tablo(i, j)
End If
Next i, j
'---restitution---
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With [J2] 'à adapter
.Cells(2, 1).Resize(Rows.Count - .Row, 14).ClearContents 'RAZ
.Cells(2, 1).Resize(nlig, 14) = resu
For j = 1 To 13 Step 2
.Cells(2, j).Resize(nlig, 2).Sort .Cells(2, j + 1), xlAscending, Header:=xlNo 'tri
Next
End With
Application.EnableEvents = True 'réactive les évènements
End Sub