Sub Avec_Index()
Dim c, aA, aOut, Fl, i, t
t = Timer
With Sheets("Feuil1")
aA = .Range("A1").CurrentRegion 'cette plage
Set c = .Range(.Range("G1"), .Range("G" & Rows.Count).End(xlUp)) 'cette plage en colonne G
ReDim aOut(1 To c.Rows.Count) 'créer tableau
For i = 1 To c.Rows.Count 'boucle les cellules
aOut(i) = IIf(c.Cells(i, 1).Font.Color = vbRed Or i = 1, i, "~") 'marquer dans le tableau les cellules rouges avec "1"
Next
Fl = Filter(aOut, "~", 0)
End With
With Sheets("Feuil2")
.UsedRange.Clear 'Efface tout sur feuille 2
.Range("A1").Resize(UBound(Fl) + 1, 4) = Application.Index(aA, Application.Transpose(Fl), Array(1, 2, 6, 7)) 'copier et coller
'.Range("A1").CurrentRegion.EntireColumn.AutoFit
End With
MsgBox "prêt en " & Format(Timer - t, "0.00\s")
End Sub
Sub Avec_Autofilter()
Dim c, aOut, i, t
t = Timer
Dim WS2: Set WS2 = Sheets("Feuil2")
WS2.UsedRange.Clear 'Efface tout sur feuille 2
With Sheets("Feuil1")
If .AutoFilterMode Then .AutoFilterMode = False 'remettre à zéro autofilter éventuel dans cette feuille
.Columns("C:E").Hidden = True 'cacher colonnes
Set c = .Range(.Range("G2"), .Range("G" & Rows.Count).End(xlUp)) 'cette plage en colonne G
ReDim aOut(1 To c.Rows.Count, 1 To 1) 'créer tableau
For i = 1 To c.Rows.Count 'boucle les cellules
aOut(i, 1) = -(c.Cells(i, 1).Font.Color = vbRed) 'marquer dans le tableau les cellules rouges avec "1"
Next
c.Offset(, 1).Value = aOut 'coller le tableau en colonne H
With .Range("A1").CurrentRegion 'cette plage
.AutoFilter 8, 1 'autofilter valeur 1 en colonne G
.Resize(, 7).Copy WS2.Range("A1") 'copier et coller
.AutoFilter 'supprimer filtre
End With
.Columns("C:E").Hidden = False 'montrer colonnes
End With
WS2.Range("A1").CurrentRegion.EntireColumn.AutoFit
MsgBox "prêt en " & Format(Timer - t, "0.00\s")
End Sub