Bonjour Sohiel, bonjour le forum,
Le code ci-dessous à appliquer à un bouton...
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim PL As Range 'déclare la variable PL (PLage)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Application.EnableEvents = False 'empêche les macro événementielles (conmme Change par exemple)
Set O = Worksheets("JOURNAL") 'définit l'onglet O
Set PL = O.Range("A1") 'initialiase la plage PL (1 seule cellule)
TV = O.Range("C7").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, 7) = "CS OUT" Then 'condition : si la donnée ligne I colonne 7 de TV est égale à "CS OUT"
Set PL = IIf(PL.Cells.Count = 1, O.Rows(I + 6), Application.Union(PL, O.Rows(I + 6))) 'redéfinit la plage PL
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
If PL.Cells.Count > 1 Then PL.Delete 'si le nombre de cellule de la plage PL est supérieur à 1, supprime la plage PL
Application.EnableEvents = True 'autorise les macro événementielles (conmme Change par exemple)
Application.ScreenUpdating = False 'Affiche les rafraîchissements d'écran
End Sub
En revanche, ta macro événementielle Change prend la colonne C comme référence et comme dans ton exemple elle n'est pas renseignée, les lignes ne se copient pas les unes en-dessous des autres. Change cette ligne de code :
Target.EntireRow.Copy sht.Rows(sht.Range("C" & Rows.Count).End(xlUp).Row + 1)
par :
Target.EntireRow.Copy sht.Rows(sht.Range("D" & Rows.Count).End(xlUp).Row + 1)
[Édition]
Bonjour Iliyes, nos posts ses sont croisés...