Sub SupprimerDoublons()
'
' Macro1 Macro
Dim TabData() As Variant
With ActiveSheet
LastLine = .UsedRange.Rows.Count 'dernière ligne non vide de la colonne A
'LastCol = .UsedRange.Columns.Count
Set ZoneATrier = .UsedRange 'toute la base de donnée avec ligne d'entete
.Sort.SortFields.Clear 'on supprime tout tri eventuel
.Sort.SortFields.Add Key:=Range("B2:B" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on trie sur la colonne B
.Sort.SortFields.Add Key:=Range("D2:D" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on trie sur la colonne D
.Sort.SortFields.Add Key:=Range("H2:H" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on trie sur la colonne H
.Sort.SortFields.Add Key:=Range("L2:L" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on trie sur la colonne L
.Sort.SortFields.Add Key:=Range("A2:A" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'on trie sur la colonne A
With .Sort 'on applique le tri
.SetRange ZoneATrier
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
TabData = .UsedRange.Value 'on met tout dans un tablo vba
For i = LBound(TabData, 1) + 1 To UBound(TabData, 1) - 1 'pour chaque ligne (hors entete)
If TabData(i + 1, 2) = TabData(i, 2) And TabData(i + 1, 3) = TabData(i, 3) And TabData(i + 1, 8) = TabData(i, 8) And TabData(i + 1, 12) = TabData(i, 12) Then 'si on a un doublon
For j = LBound(TabData, 2) To UBound(TabData, 2) 'on efface la ligne (le tri étant aussi sur la colonne A, celle qu'on efface est forcément postérieure
TabData(i + 1, j) = ""
Next j
End If
Next i
.UsedRange.Clear 'on efface la feuille
.Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData 'on colle le tableau
.Sort.SortFields.Clear 'on reapplique un tri sur la colonne B ==> les lignes vides se retrouvent en bas
.Sort.SortFields.Add Key:=Range("B2:B" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange ZoneATrier
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub