Bonjour Hajar,
Plusieurs problèmes avec le code que tu as ajouté :
- Tu fais référence à la variable oRange dans le code :
'On filtre la plage
oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"
alors que juste au dessus tu a libéré la variable oRange :
Set oRange = Nothing
-Toujours dans la même ligne de code :
'On filtre la plage
oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"
tu filtres sur la colonne fournie en paramètre "lCol" alors que la valeur que tu recherches se trouve dans une autre colonne : dans "MPCA" la colonne suivante.
-N'oublies pas que la procédure "clearSheet" est appelée 2 fois, une fois pour la feuille "MPCA", une autre pour la feuille "Prelevement" . C'est la raison pour laquelle le numéro de la colonne sur laquelle le filtre est posé est passé en paramètre (lCol) puisque dans ces 2 feuilles, le positionnement de la colonne sur laquelle filtrer n'est pas identique (17 pour l'une, 7 pour l'autre).
Ce qui amène une autre remarque : dans cette même procédure, tu as ajouté la séquence :
'chercher et supprime ".docx" et "OUI"
Dim feuil As Worksheet
For Each feuil In ThisWorkbook.Worksheets
feuil.Cells.Replace What:=".docx", Replacement:=""
feuil.Cells.Replace What:="OUI ", Replacement:=""
Next feuil
qui s'exécutera donc à 2 reprises, ce qui ne génèrera pas d'erreur mais n'est pas optimal. Il vaudrait mieux sortir cette séquence de la procédure pour ne l'exécuter qu'une fois.
Plus généralement, il me semble que, plutôt que le procédé qui consiste à copier puis supprimer des lignes, il serait plus efficace de ne copier que les lignes "utiles" sans avoir à y revenir après coup.
En tout cas, je renvois le classeur corrigé pour évider que ça "bogue".