Sub QueLesRouges()
Dim sh, n&, der&, i&, j&, f
For Each sh In Worksheets 'calcul d'un majorant n du nombre de lignes du tableau résultat
If sh.Name <> Sheets("Synthèse").Name Then n = n + sh.UsedRange.Rows.Count
Next sh
ReDim t(1 To n, 1 To 4): n = 0 'déclaration et dimmensionnement du tableau résultat
For Each sh In Worksheets 'pour chaque feuille de calcul
If sh.Name <> Sheets("Synthèse").Name Then 'seulement si on ne traite pas la feuille "Synthèse"
With sh 'avec la feuille qu'on traite
If .FilterMode Then .ShowAllData 'si filtre, on affiche tout - pour bon fonctionnement de End(xlup)
der = .Cells(Rows.Count, "a").End(xlUp).Row 'dernière ligne de données de la la feuille sh
If der >= 4 Then 'si il y a au moins une ligne source
f = .Range("a4:d" & der) 'on lit le tableau source de sh
For i = 1 To UBound(f) 'boucle sur le tableau source
'si la police est rouge, on recopie la ligne source (depuis f) dans la ligne suivante du tableau résultat (t)
If .Cells(3 + i, "a").Font.Color = vbRed Then: n = n + 1: For j = 1 To 4: t(n, j) = f(i, j): Next
Next i
End If
End With
End If
Next sh
Application.ScreenUpdating = False 'on fige l'affichage (plus rapide)
With Sheets("Synthèse") 'avec la feuille "Synthèse"
.Activate 'on active la feuille
If .AutoFilterMode Then Cells.AutoFilter 'si autofiltre, on l'enlève
.Range("b5:e" & Rows.Count).Clear 'on efface les résultats précédents (ligne 5 à la dernière ligne)
.Range("b5").Resize(n, 4) = t 'on transfère les n premières lignes résultats de t sur la feuille
.Range("d5").Resize(n).NumberFormat = "# ##0.00" 'on formate la colonne des montants (deux décimales)
.Range("b4").Resize(n + 1, 4).AutoFilter 'on "autofiltre" le résultat
End With
End Sub