Private Sub Worksheet_Activate()
Dim limit1#, limit2#, celdeb As Range, nlig&, ncol%
Dim h1&, h2&, h&, source, dest(), i&, j%, n&
limit1 = 100 'à adapter
limit2 = 250 'à adapter
With Sheets("data") 'nom à adapter
Set celdeb = .[D2] '1ère cellule, à adapter
nlig = .Cells(.Rows.Count, celdeb.Column).End(xlUp).Row - celdeb.Row
ncol = .Cells(celdeb.Row, .Columns.Count).End(xlToLeft).Column - celdeb.Column
End With
h1 = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit1)
h2 = 2 * Application.CountIf(celdeb(2, 2).Resize(nlig - 1, ncol - 1), ">" & limit2)
h = IIf(h1 > h2, h1, h2) + 1
source = celdeb.Resize(nlig, ncol)
ReDim dest(1 To h, 1 To 4)
For j = 2 To ncol
For i = 2 To nlig
If source(i, j) > limit1 Or source(i, j) > limit2 Then
n = n + 2
dest(n, 1) = CDate(source(1, j))
dest(n, 2) = source(i, 1)
If source(i, j) > limit2 Then dest(n, 3) = source(i, j) _
Else dest(n, 4) = source(i, j)
End If
Next
Next
[A2].Resize(h, 4) = dest
Rows(h + 2 & ":" & Rows.Count).ClearContents
On Error Resume Next
Me.ListObjects(1).Resize Range("A1:D" & h + 1)
End Sub