Sub Test()
Dim Wbk As Workbook
Set Wbk = Workbooks.Open("B.xlsx")
LignesOùRelat(Wbk.Worksheets(1).Rows(2), "E", "<>", 10).Delete
End Sub
Function ColLignesOùRelat(ByVal CelDéb As Range, ByVal ColQuoi, ByVal OPé As String, ByVal Valeur) As Range
On Error Resume Next
Set ColLignesOùRelat = Intersect(LignesOùRelat(CelDéb, ColQuoi, OPé, Valeur), CelDéb.EntireColumn)
End Function
Function LignesOùRelat(ByVal LigneDéb As Range, ByVal ColQuoi, ByVal OPé As String, ByVal Valeur) As Range
If Not IsNumeric(ColQuoi) Then ColQuoi = LigneDéb.Worksheet.Columns(ColQuoi).Column
If VarType(Valeur) = vbString Then Valeur = """" & Replace(Valeur, _
"""", """""") & """" Else Valeur = Trim$(Str$(Valeur))
On Error Resume Next
Set LignesOùRelat = LignesOùCondR1C1(LigneDéb, CondR1C1:="RC" & ColQuoi & OPé & Valeur)
End Function
Function ColLignesOùCondR1C1(ByVal CelDéb As Range, ByVal CondR1C1 As String) As Range
On Error Resume Next
Set ColLignesOùCondR1C1 = Intersect(LignesOùCondR1C1(CelDéb, CondR1C1), CelDéb.EntireColumn)
End Function
Function LignesOùCondR1C1(ByVal LigneDéb As Range, ByVal CondR1C1 As String) As Range
Dim Rng As Range
Set Rng = PlageÀPartirDe(LigneDéb.EntireRow): If Rng Is Nothing Then Exit Function
Set Rng = Rng.Columns(Rng.Columns.Count + 2)
Application.ScreenUpdating = False
On Error Resume Next
Rng.FormulaR1C1 = "=1/(" & CondR1C1 & ")"
Set LignesOùCondR1C1 = Rng.SpecialCells(xlCellTypeFormulas, 1).EntireRow
Rng.EntireColumn.Offset(, -1).Resize(, 2).Delete
End Function
Function PlageÀPartirDe(ByVal CelDéb As Range) As Range
Dim NbrLig As Long, NBrCol As Long
With CelDéb.Worksheet.UsedRange:
NbrLig = .Row + .Rows.Count - CelDéb.Row
NBrCol = .Column + .Columns.Count - CelDéb.Column
If NbrLig <= 0 Or NBrCol <= 0 Then Exit Function
End With
Set PlageÀPartirDe = CelDéb.Resize(NbrLig, NBrCol)
End Function
Function ColUti(ByVal PlageDép As Range, Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn), LMin, CMin)
End Function
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing, _
Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
On Error GoTo RienTrouvé
If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
On Error GoTo 0
NbL = LMax - PlageDép.Row + 1: If NbL < LMin Then NbL = LMin
NbC = CMax - PlageDép.Column + 1: If NbC < CMin Then NbC = CMin
If NbL < 1 Or NbC < 1 Then GoTo CEstToutVide
Set PlgUti = PlageDép.Resize(NbL, NbC)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
End Function