web-dev-qa-db-fra.com

Comment supprimer les lignes en double en fonction de certaines colonnes

J'ai une feuille Excel contenant des lignes en double

Je souhaite supprimer une ligne si ses colonnes sont identiques (ignorer B lors du calcul des doublons mais le supprimer en supprimant une ligne)

Pour le moment, il ignore B pendant la comparaison et la suppression.

11
user33949

Dans Excel 2013

  1. Sélectionner toutes les données
  2. Sélectionnez l'onglet Données -> Supprimer les doublons
  3. Cochez la case "Mes colonnes ont des en-têtes" si vos données ont des en-têtes de colonnes.
  4. Décochez toutes les colonnes que vous ne voudriez PAS utiliser en comparaison
  5. Appuyer sur OK

Terminé

18
user33949

Si je vous ai bien compris, avec les lignes 1 et 2, vous voulez supprimer une ligne 2 si et seulement si A1 = A2, C1 = C2, D1 = D2, E1 = E2 et F1 = F2.

C'est ce que je suis venu avec. Il pourrait probablement être plus court mais ça fait l'affaire:

Sub DeleteDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
    current = ActiveCell.Address
    ActiveCell.Offset(1, 0).Activate
    Do While ActiveCell.Value <> ""
        If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And (ActiveSheet.Range(current).Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value) And (ActiveSheet.Range(current).Offset(0, 3).Value = ActiveCell.Offset(0, 3).Value) And (ActiveSheet.Range(current).Offset(0, 4).Value = ActiveCell.Offset(0, 4).Value) And (ActiveSheet.Range(current).Offset(0, 5).Value = ActiveCell.Offset(0, 5).Value)) Then
            ActiveSheet.Rows(ActiveCell.Row).Delete
        Else
        ActiveCell.Offset(1, 0).Activate
        End If
    Loop
    ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub

Cela permet de parcourir toutes les lignes restantes en utilisant ActiveCell comme pointeur sur la ligne en cours d'évaluation et en stockant la cellule de la ligne "d'origine" dans le courant variable. Une fois la boucle terminée, la cellule située sous le courant est activée et la boucle d'évaluation interne redémarre.

Si je me suis trompé quelque part, n'hésitez pas à me le dire :)

1
kenkh

Ajoutez cette formule dans chaque ligne, par exemple; dans la colonne G:

=IF(AND(A2=C2,A2=D2,A2=E2,A2=F2),"DELETE ME","")

Cela donnera un résultat comme:

A   B   C   D   D   F   G
-   -   -   -   -   -   -
x   o   x   x   x   x   DELETE ME
x   x   x   x   x   o   
x   x   x   x   x   x   DELETE ME
x   o   o   x   x   x   

Créez ensuite un filtre sur la colonne G pour les lignes indiquant "DELETE ME", puis supprimez-les.

1
Garrulinae

@ Garrulinae

J'ai utilisé votre idée comme source d'inspiration. J'ai eu beaucoup de lignes et ce que je voulais était de supprimer les lignes contenant les valeurs en double d'une colonne. Si j'utilise Supprimer les doublons sur cette colonne, seules les données de cette colonne seront supprimées, pas la ligne entière. Je voulais supprimer toutes les deuxième et troisième rangées de la table entière. Donc, ce que j’ai fait, j’ai créé une nouvelle colonne et laissé la valeur de la première ligne vide, ainsi que l’efface me supprimer dans les deuxième et troisième rangées. Et puis j'ai copié les valeurs des trois premières lignes de cette colonne particulière seulement (pas toute la ligne) et collé sur toute la colonne de la table. Maintenant, je devais "me supprimer" à chaque deuxième et troisième rangées de la colonne entière. Ensuite, je dois juste trier les valeurs de cette colonne et supprimer toutes les lignes contenant me supprimer. Vous pouvez utiliser la même solution si vous souhaitez supprimer tous les 2e, 3e et 4e ou 2e, 3e, 4e et 5e ...

J'espère que ça aide quelqu'un ....

0
Sunil