Sub FiltreCouleur()
'nom défini en A1 => Couleur =LIRE.CELLULE(38;Feuil1!A1)
'cellules W2 et W5 nommées Code et Minimum
Dim dur#, ncol%, n&, a$
dur = Timer
Application.ScreenUpdating = False
[A1].CurrentRegion.EntireColumn.Copy [Y1] 'Y1 à adapter
With [Y1].CurrentRegion.Offset(1, 1)
ncol = .Columns.Count
'---effacement des cellules non colorées---
.Resize(, ncol - 1) = "=REPT(B2,Couleur=Code)"
'---concaténation en colonne Z et conversion de données---
For n = 1 To ncol - 1
a = a & "&"" ""&RC[" & n - ncol & "]"
Next
ThisWorkbook.Names.Add "concat", "=" & Mid(a, 6) 'nom défini
.Columns(ncol) = "=TRIM(concat)"
.Columns(ncol) = .Columns(ncol).Value
.Columns(1) = .Columns(ncol).Value
.Columns(2).Resize(, ncol - 2) = "" 'RAZ
.Columns(2).Resize(, ncol - 2).Interior.ColorIndex = xlNone 'RAZ
.Columns(1).TextToColumns .Cells(1), xlDelimited, Space:=True
'---suppression des lignes < Minimum---
.Columns(ncol) = "=LN(COUNTA(RC[" & 1 - ncol & "]:RC[-1])>=Minimum)"
.Columns(ncol) = .Columns(ncol).Value
.Columns(0).Resize(, ncol + 1).Sort .Columns(ncol), xlAscending, Header:=xlNo 'tri pour accélérer
n = Application.Count(.Columns(ncol))
.Columns(ncol) = ""
.Cells(n + 1, 0).Resize(Rows.Count - n - .Row + 1, ncol).Delete xlUp
'---recoloration---
On Error Resume Next
.SpecialCells(xlCellTypeConstants).Interior.Color = [Code].Interior.Color
End With
Application.ScreenUpdating = True
MsgBox "Durée " & Format(Timer - dur, "0.00 \s") & vbLf & vbLf & _
Application.Max([A1].CurrentRegion.Rows.Count - 1 - n, 0) & " ligne(s) supprimée(s)"
End Sub