Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OF As Worksheet 'déclare la variable OF (Onglet Fermé)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim LI As Integer 'déclare la variable LI (Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Set OS = Worksheets("Feuil1") 'définit l'onglet OS (à adapter à ton cas)
Set PL = OS.Range("A1") 'initialise la plage PL
TV = OS.Range("A4").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = "Fermé" Then Set PL = IIf(PL.Cells.Count = 1, OS.Rows(I + 3), Application.Union(PL, OS.Rows(I + 3))) 'si la donnée ligne I colonne 1 de TV est vide, définit la plage PL
Next I 'prochaine ligne de la boucle
If PL.Cells.Count = 1 Then 'condition : si l aplage PL ne comporte qu'une seule cellule
Exit Sub 'sort de la pocédure
Else 'sinon
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe a la ligne suivante)
Set OF = Worksheets("Fermé") 'définit l'onglet OF (génère une erreur si cet onglet n'existe pas)
If Err > 0 Then 'condition : si une erreur a été générée
Err.Clear 'supprime l'erreur
OS.Copy after:=OS 'copy l'onglet OS après lui-même
Set OF = ActiveSheet 'définit l'onglet OF
OF.Name = "Fermé" 'renomme l'onglet OF
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
OF.Range("A4").CurrentRegion.Offset(1, 0).ClearContents 'vide d'éventuelles anciennes données dans l'onglet OF
PL.Copy OF.Range("A5") 'copie la plage PL dans la cellule A5 de l'onglet OF
PL.Delete 'supprime la plage PL'supprime la plage PL
End If 'fin de la condition
End Sub