Sub options()
Dim Model As String
Dim Cells3 As Range
Set liste = CreateObject("scripting.dictionary") 'voir l'aide pour Dictionary
Target = Worksheets("Feuil2").Range("B4") 'pas indispensable, mais figurait dans ton code
Model = Worksheets("Feuil2").Range("A6") 'idem
ActiveWorkbook.Sheets("Feuil2").Range("A7:B1000").ClearContents 'ça, tu avais compris
For Each Cells3 In Worksheets("Feuil1").Range("B5:B" & Worksheets("Feuil1").Range("B1000").End(xlUp).Row)
'on parcourt la plage, en feuil1, de B5 à la dernière cellule non-vide de la même colonne (en "remontant" depuis B1000)
If IsDate(Cells3) Then 'si on veut pouvoir extraire le mois, mieux vaut qu'il s'agisse d'une date
If Month(Cells3) = Month(Target) Then 'on compare les mois des deux dates
If Cells3.Offset(0, 1) = Model Then 'si la cellule juste à droite de la date contient l'article cherché
liste(Cells3.Offset(0, 2).Value) = liste(Cells3.Offset(0, 2).Value) + 1
'pour l'élément du Dictionary correspondant à la clé "vitre", "porte", ... on ajoute 1 à l'élément
End If
End If
End If
Next
If liste.Count > 0 Then 'pour éviter une erreur si liste est vide
Worksheets("Feuil2").Range("A7").Resize(liste.Count, 1) = Application.Transpose(liste.keys)
Worksheets("Feuil2").Range("B7").Resize(liste.Count, 1) = Application.Transpose(liste.items)
End If
End Sub