Si vous voulez vérifier si tout de la cellule A ou de la cellule F est dupliquée dans sa propre colonne, il vous suffit de Or
les deux conditios :
If (Application.CountIf(Range("A" & i & ":A" & lw), Range("A" & i).Text) > 1) Or _
(Application.CountIf(Range("F" & i & ":F" & lw), Range("F" & i).Text) > 1) Then
D'autre part, si vous voulez que le duplicata soit en comparant simultanément les colonnes A et F à d'autres lignes, alors vous devrez CountIfs
If Application.CountIfs(Range("A" & i & ":A" & lw), Range("A" & i).Text, _
Range("F" & i & ":F" & lw), Range("F" & i).Text) > 1 Then
Enfin, le Selection.Autofilter
et les plages non qualifiées dans le code (qui est correct à part cela) peuvent causer des problèmes. Il vaut mieux utiliser des plages qualifiées et des noms de feuilles explicites.
EDIT
Vous pouvez vous faciliter la tâche en utilisant des colonnes entières pour la correspondance :
'Case 1:
If (Application.CountIf(Range("A:A"), Range("A" & i).Text) > 1) Or _
(Application.CountIf(Range("F:F"), Range("F" & i).Text) > 1) Then
'Case 2:
If Application.CountIfs(Range("A:A"), Range("A" & i).Text, _
Range("F:F"), Range("F" & i).Text) > 1 Then
En utilisant le cas 1, et avec une certaine amélioration de votre code pour que nous utilisions des plages qualifiées, votre code devient comme ceci, (veuillez lire attentivement les commentaires) :
Option Explicit
Sub FindCpy()
Dim lw As Long, i As Long
With ActiveSheet ' <------ use an explicit sheet if you can i.e. With Sheets("srcSheet")
lw = .Range("A" & .Rows.count).End(xlUp).row
For i = 2 To lw ' <----------- start at row 2, row 1 must be a header to use autofilter
If (Application.CountIf(.Range("A:A"), .Range("A" & i).text) > 1) Or _
(Application.CountIf(.Range("F:F"), .Range("F" & i).text) > 1) Then
.Range("B" & i).value = 1
End If
Next i
With .Cells.Resize(lw)
.AutoFilter Field:=2, Criteria1:=1
.Offset(1).Copy
Sheets("Dup").Range("A65536").End(xlUp).Offset(1).PasteSpecial xlPasteValues
.AutoFilter
End With
End With
Application.CutCopyMode = False
End Sub