Sub Macro1()
Dim CO As Workbook 'déclare la variable CO (Classeur Origine)
Dim OO As Object 'déclare la variable OO (Onglet Origine)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim CE As Workbook 'déclare la variable CE (Classeur Effacement)
Dim OE As Object 'déclare la variable OE (Onglet Effacement)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TD() As String 'déclare le tableau de variables TD (Tablweau des D)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Set CO = ThisWorkbook 'définit le classeur origine CO
Set OO = CO.Sheets("Feuil1") 'définit l'onglet origine oo
CH = CO.Path 'définit le chemin d'accès CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CE = Workbooks("Classeur2.xlsx") 'définit le classeur d'effacement CE (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'efface l'erreur
Workbooks.Open (CH & "/Classeur2.xlsx") 'ouvre le classeur "classeur2.xlsx"
Set CE = ActiveWorkbook 'définit le classeur d'effacement CE
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OE = CE.Sheets("Feuil1") 'définit l'onglet d'effacement OE
Set R = OO.Columns(9).Find("D", , xlValues, xlWhole) 'de'finit la recherche R (Recherche "D" dans la colonne 9 (=I) de l'onglet OO
If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
Do 'exécute
ReDim Preserve TD(I) 'redimensione le tableau de variable TD
TD(I) = R.Offset(0, -3) 'ajoute la variable indéxée TD
I = I + 1 'incrémente I
Set R = OO.Columns(9).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
Else 'sinon (si aucune occurrence trouvée)
Exit Sub 'sort de la procédure
End If
DL = OE.Cells(Application.Rows.Count, 6).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 6 (=F) de l'onglet OE
Set PL = OE.Range("A2:A" & DL) 'définit la plage PL
For I = 0 To UBound(TD) 'boucle sur tous les éléments du tableau de variables TD
OE.Range("A1").AutoFilter Field:=6, Criteria1:=TD(I) 'filtre la colonne 6 (=F) de l'onglet OE avec TD(I) comme critère
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellules visibles (non filtrées) de la plage PL
PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
OE.Range("A1").AutoFilter 'supprime le filtre automatique
Next I 'prochain élément de la boucle
CE.Save 'enregistre le classeur d'effacement
End Sub