1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| Sub SupprDoublons()
Dim LastLig As Long, i As Long, k As Long, T As Long
Dim N As Byte, j As Byte, m As Byte
Dim TabB, TabS, TabN()
Dim Str As String
T = Timer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
TabS = Array("RST", "EXP-DIF", "AAR") 'LES COLONNES DE FEUILLES DOUBLONS DOIVENT ETRE ORGANISEES COMME CECI en B RST en C EXP-DIF et en D AAR
N = UBound(TabS)
With ThisWorkbook.Worksheets("Feuille-DOUBLONS")
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
TabB = .Range(.Cells(1, 1), .Cells(LastLig, N + 2))
For j = 2 To N + 2
For i = 2 To LastLig
If TabB(i, j) > 0 Then
k = k + 1
ReDim Preserve TabN(1 To 2, 1 To k)
TabN(1, k) = TabB(i, 1)
TabN(2, k) = TabB(1, j)
If j < N + 2 Then
For m = j + 1 To N + 2
TabB(i, m) = 0
Next m
End If
End If
Next i
Next j
End With
'On boucle sur les feuilles RST,EXP et AAR et on recrée un tableau critère du filtre
For j = 0 To N
For i = 1 To k
If TabN(2, i) = TabS(j) Then Str = Str & "|" & TabN(1, i)
Next i
Str = Mid(Str, 2)
If Len(Str) > 0 Then
With Sheets(TabS(j))
.AutoFilterMode = False
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
.Range("A1:A" & LastLig).AutoFilter Field:=1, Criteria1:=Split(Str, "|"), Operator:=xlFilterValues
If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilterMode = False
End With
End If
Str = vbNullString
Next j
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "Traitement terminé en " & Timer - T & " secondes"
End Sub |