Bonjour Hassen et bienvenu, bonjour le forum,
Une seule ligne de données !... Pour tester un code il nous en faudrait plusieurs ! Tu le sauras pour la prochaine fois.
En piece jointe ton fichier modifié avec l'événementielle Change dans le composant VBA Feuil2(Feuil3) et le code ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OS As Worksheet 'déclare la varaible OS (Onglet Source)
Dim DL As Integer 'déclare la varaible DL (Dernière Ligne)
Dim I As Integer 'déclare la varaible I (Incrément)
Dim DEST As Range 'déclare la varaible DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
If Target.Address <> "$B$1" Then Exit Sub 'si le changement a lieu aillerus qu'en B1, sort de la procédure
Set OS = Worksheets("Feuil2") 'de'finit l'onglet source OS
Me.Range("A3").CurrentRegion.Offset(1, 0).Clear 'efface les anciennes données
If Target.Value = "" Then Exit Sub 'si B1 est effacée, sort de la procédure
DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'de'finit la dernière ligne éditée DL de la colonne A de l'onglet OS
For I = 4 To DL 'boucle sur toutes les lignes I de 4 à DL
If Format(OS.Cells(I, "G").Value, "mmmm") = Target.Value Then 'si le mois de la colonne G de la ligne de la boucle correspond au mois en B1
Set DEST = Me.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
OS.Rows(I).Copy DEST 'coopie la ligne I et la colle dans dest
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub