Supprimer doublons selon plusieurs critères [Résolu]

Signaler
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

J'ai un code pour supprimer les doublons mais dans une seule colonne.
Je voudrai faire pareil mais pour supprimer les doublons selon 3 colonnes :
S'il trouve 2 lignes avec les mêmes valeurs sur les cellules de ses 3 colonnes, il  supprimer

Le code que j'ai est le suivant et marche parfaitement pour une colonne :

'--Suppression des doublons sur le premier onglet


    Range("A1").Select '-- Là, si je met ("A:A,F:F,H:H") ; ça merde
    ActiveCell.CurrentRegion.Sort Key1:=Range("A1"), Order1:=xlAscending, '-- Là, si je met ("A:A,F:F,H:H") ; ça merde aussi
Header:=xlYes
donnee1 = ActiveCell
    ActiveCell.Offset(1, 0).Select
   
    While ActiveCell <> ""
    If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
    Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
    End If
    Wend

Si quelqu'un pouvait me sauver
Merci par avance

Bière qui roule bière qui mousse

5 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu dois commencer par trier ta grille, je pense que tu as compris...
Cells.Sort ....

Tu as la possibilité de trier sur 2 colonnes (Key1 et Key2) avec des tris selon les besoins (Order1 et Order2 ... Ascendant ou Descendant)

Si tu as besoin de trier sur plus de colonnes, utilise la concaténation des cellules nécessaires que tu mets dans une colonne inutilisée (=A1 & F1 & H1).

Une fois le tri effectué, il faut que tu démarres par la fin et que tu remontes pour effacer efficacement les lignes

DerniereLigne = Cells(Rows.Count, "A").End(xlUp).row
For i = DerniereLigne to 2 Step - 1 
    If Range("A" & i) = Range("A" & i - 1) And _
       Range("F" & i) = Range("F" & i - 1) And _
       Range("H" & i) = Range("H" & i - 1) Then
          Rows(i - 1).Delete
    End if
Next

MPi²
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Donc, pour mettre un plus au clair ...
Si tu utilises la concaténation en colonne Z et le tri sur cette colonne
DerniereLigne = Cells(Rows.Count, "A").End(xlUp).row
For i = DerniereLigne to 2 Step - 1 
    If Range("Z" & i) = Range("Z" & i - 1) Then
          Rows(i - 1).Delete
    End if
Next

Si tu utilises un tri à 2 colonnes, maximum qu'Excel permet ...
DerniereLigne = Cells(Rows.Count, "A").End(xlUp).row
For i = DerniereLigne to 2 Step - 1 
    If Range("A" & i) = Range("A" & i - 1) And _
       Range("F" & i) = Range("F" & i - 1)  Then
          Rows(i - 1).Delete
    End if
Next

Je pense que c'est mieux expliqué ainsi...

½ MPi
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour MPI,,

Je suis mal réveillé, sans doute...

pourquoi ces passages par des And et non pas la comparaison des concaténations du contenu des cellules concernées, d'une ligne à l'autre ?
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011

Je suis désolé MPi... je suis un boulet... Hier, je n'arrivais plus à rêfléchir.
Merci pour le code, il marche au poil.

Bière qui roule bière qui mousse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut JMF,
c'était pour le cas où il n'utilisait pas la concaténation... Un peu tard pour te dire "Bon réveil", j'imagine
Et je n'étais pas tout à fait réveillé non plus quand j'ai répondu ce matin ...
Je me relis et c'est un peu pêle-mêle tout ça ...

MPi²