Sub SupprimerLignes(xrgColonneRecherche As Range, LaValeur, premLigne As Long)
Const EnTeteColAux = "aux-col à supprimer-aux" ' titre de la colonne auxiliaire
Dim derlig As Long, dercol As Long, auxcol As Long, t, i
With xrgColonneRecherche.Parent
' la colonne de recherche
' suppression d'une éventuelle précédente colonne auxiliaire non supprimée
i = Application.IfError(Application.Match(EnTeteColAux, .Rows(1), 0), 0)
If i > 0 Then .Columns(i).Delete
' dernière ligne et colonne utilisées sur la feuille et numéro de la colonne auxiliaire
derlig = .UsedRange.Row - 1 + .UsedRange.Rows.Count
dercol = .UsedRange.Column - 1 + .UsedRange.Columns.Count
auxcol = dercol + 1
' array des valeurs de la colonne avec les valeurs à supprimer
t = .Columns(xrgColonneRecherche.Column).Resize(derlig)
' boucle sur t
' jusqu'à (premligne -1), on affecte à t(i,1) le numéro de ligne
For i = 1 To premLigne - 1: t(i, 1) = i: Next
' puis jusqu'à la fin de t ==> si t(i,1) =Valeur alors t(i,1)= "#N/A" sinon le numéro de ligne
For i = premLigne To UBound(t)
If IsError(t(i, 1)) Then
t(i, 1) = i
Else
t(i, 1) = IIf(t(i, 1) = LaValeur, "#N/A", i)
End If
Next i
' on affecte à t(i,1) le bon titre (titre de la colonne auxiliaire)
t(1, 1) = EnTeteColAux
' écriture de t dans la colonne auxiliaire
.Cells(1, auxcol).Resize(UBound(t)) = t
' tri selon la colonne auxiliaire
.Range("a1").Resize(derlig, auxcol).Sort key1:=.Cells(1, auxcol), order1:=xlAscending, Header:=xlYes
On Error Resume Next
' suppression des lignes contenant une erreur dans la colonne auxiliaire
.Cells(1, auxcol).Resize(derlig).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
On Error GoTo 0
' suppression de la colonne auxiliaire
i = Application.IfError(Application.Match(EnTeteColAux, .Rows(1), 0), 0)
If i > 0 Then .Columns(i).Delete
End With
End Sub