Elimination de doublons sur pls colonnes

G

Greg

Guest
Bonjour le forum,

Je sais que bcp d'articles ont été écrit à ce sujet mais aprés pls recherches sur tt les fils concernant ces fameux "doublons" je jette l'éponge et vous êtes ma dernière solution.... Donc comment peut on faire pour trier une liste sur pls colonnes en éliminant directement les lignes en double?

Merci pour votre aide...
 

Pièces jointes

  • eliminerdoublons.zip
    1.6 KB · Affichages: 29
  • eliminerdoublons.zip
    1.6 KB · Affichages: 29
  • eliminerdoublons.zip
    1.6 KB · Affichages: 28
O

omicron

Guest
Bonsoir Greg,

Tu trouveras en pièce jointe un exemple de résolution du problème posé.

=====================================================
Private Sub CommandButton1_Click()

'Paramétrage
Set RngTab = Range("A1:C17") '<<< A régler: Plage de cellules contenant les clés à comparer

'Ajout d'une colonne servant à mémoriser les numéros de lignes avant le tri
Columns("A:A").Insert Shift:=xlToRight 'Insertion colonne
Set RngTab = RngTab.Offset(0, -1).Resize(, RngTab.Columns.Count + 1) 'Actualisation adresse Plage

For Each Row In RngTab.Rows 'Numérotation des lignes
Row.Cells(1) = Row.Row
Next Row

'Tri de la plage sur les trois clés
RngTab.Sort _
Key1:=Range("B1"), Order1:=xlAscending, _
Key2:=Range("C1"), Order2:=xlAscending, _
Key3:=Range("D1"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal


'Repérage et suppression des doublons
i = 1
For j = 1 To RngTab.Rows.Count - 1
If RngTab.Rows(i).Cells(1, 2) = RngTab.Rows(i + 1).Cells(1, 2) And _
RngTab.Rows(i).Cells(1, 3) = RngTab.Rows(i + 1).Cells(1, 3) And _
RngTab.Rows(i).Cells(1, 4) = RngTab.Rows(i + 1).Cells(1, 4) Then
RngTab.Rows(i + 1).Delete
Else
i = i + 1
End If
Next j

'Restauration de l'ordre des lignes tel qu'il était avant le tri
RngTab.Sort _
Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Suppression de la colonne utilisée pour mémoriser l'ordre des lignes
Columns("A:A").Delete Shift:=xlToLeft

End Sub
=====================================================

N'oublie pas d'adapter le paramètre "Plage de celluless ...."

Bon courage pour la suite.

Omicron
 

Pièces jointes

  • eliminerdoublons.zip
    13.9 KB · Affichages: 38
  • eliminerdoublons.zip
    13.9 KB · Affichages: 39
  • eliminerdoublons.zip
    13.9 KB · Affichages: 39
V

VB@D

Guest
Bonsoir,

OMICRON ma devancé et son programme a l air plus efficasse
Moi, le mien trie les colonnes A puis B puis C et supprimme ensuite les doublons.

La liste na donc plus le meme ordre.

Je poste quand meme mon résultat... meme si ce n'est pas parfait ;-)

@ bientôt

VB@D
 

Pièces jointes

  • doublons.zip
    11.9 KB · Affichages: 36
  • doublons.zip
    11.9 KB · Affichages: 37
  • doublons.zip
    11.9 KB · Affichages: 35
C

CBernardT

Guest
Bonsoir Greg et Omicron

Une autre approche de résolution du problème posé, il est supposé que les trois colonnes sont des critères de comparaisons ?

Cordialement

CBernardT
 

Pièces jointes

  • eliminerdoublonsV1.zip
    14 KB · Affichages: 32
G

Greg

Guest
Bonjour CBernardT et le forum,

j'ai adapté votre prog au mien et il se pose un probleme que je n'arrive pas à résoudre : comment appliquer la macro sur plusieurs feuilles en meme temps?

Je m'explique dans l'exemple proposé on s'occupe uniquement de la premiere feuille "Base" (With Sheets("Base")), moi dans mon programme j'ai 26 feuilles : "A", "B", "C",etc...

Merci pour votre aide

Greg
 
C

CBernardT

Guest
Bonjour Greg

S'il y a plusieurs feuilles à traiter, il suffit de rajouter une boucle qui permette de les appeler l’une après l’autre.
A noter que la modification est réalisée en comptant toutes les feuilles, le démarrage du traitement anti-doublon débute sur la première feuille désignée comme début des feuilles à traiter.
Dans la macro, on voit la ligne :

For Ws = 2 To Sheets.Count

Cela veut dire démarrer à la feuille 2 jusqu’à la dernière. Donc, si on veut démarrer le traitement sur la 3ème, on changera le 2 en 3.

Sub EliminerDoublons()
Dim L As Integer
Dim i As Integer, j As Integer, Ws As Byte

Application.ScreenUpdating = False
For Ws = 2 To Sheets.Count
With Sheets(Ws)
L = .Cells(65000, 1).End(xlUp).Row
For i = 2 To L - 1
If .Cells(i, 1) <> "" Then
For j = i + 1 To L
If .Cells(j, 1) <> "" Then
If .Cells(j, 1) & .Cells(j, 1).Offset(0, 1) & .Cells(j, 1).Offset(0, 2) _
= .Cells(i, 1) & .Cells(i, 1).Offset(0, 1) & .Cells(i, 1).Offset(0, 2) Then
.Cells(j, 1).EntireRow.Delete
End If
End If
Next j
End If
Next i
End With
Next Ws
Application.ScreenUpdating = True
End Sub


Cordialement

CBernardT
 
M

michel

Guest
bonsoir Greg , Omicron , VB@D , CBernardT , Nicolas

Nicolas , si tu utilises Excel97 et que tu lances la macro depuis un CommandButton , tu peux essayer cette adaptation :


Private Sub CommandButton1_Click()
Range("A1").Select'ajout pour Excel97
EliminerDoublons
End Sub


bonne soirée
MichelXld
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet