Supprimer une ligne si valeur d'une colonne en double

Bonjour !

Je suis nouveau. Je ne savais pas trop comment expliquer mon problème en titre.

Alors le voici :

J'ai une colonne ID (ici colonne B) et une colonne M prenant pour valeur 0 ou 1.

Je cherche un code VBA me permettant de, si un même ID est présent 2 fois dans ma colonne B, supprimer la ligne de celui qui a 1 dans la colonne M.

Information complémentaire :

Dans mon fichier :

  • Si un ID est en double, il y en a obligatoirement un qui a 1 et l'autre 0 pour la colonne M.
  • Un ID ne peux pas être présent + de 2 fois.

Pensez vous que cela est possible ?

Merci de votre aide !

Bonjour

peut-on déduire de ton énoncé qu'il faut supprimer toutes les lignes qui ont un 1 en colonne M ?

si tel est le cas, voici une proposition

Sub aargh()
    With Sheets("feuil1") 'nom de la feuille
        dl = .Cells(Rows.Count, 2).End(xlUp).Row 'nombre de lignes
        For i = dl To 1 Step -1
            If .Cells(i, "M") = 1 Then Rows(i).Delete shift:=xlUp '1 en colonne M on supprime la ligne
        Next i
    End With
End Sub

Bonsoir h2so4,

Je suis très sceptique au sujet de ta solution : elle permet effectivement de supprimer toutes les lignes qui ont un 1 en colonne M, comme tu l'as toi-même décrit ; cependant, quid de la vérification à faire si l'ID est un doublon ou non ? on dirait bien qu'c'est une option qui est passée à la trappe ! sauf si j'me suis trompé, j'te laisse revoir ta copie...

dhany

Bonsoir merci de vos réponses et h2so4 pour ton code

Mais en effet dhany le dit, c’est qu’il manque la condition que l’ID est en double et c’est la tout mon problème...

Bonjour,

Une piste à étudier.

Tu tries tes données suivant B et M (tous les 2 ascendants).

Tu sélectionnes l'ensemble des données et tu supprimes les doublons (Ruban, Données, Supprimer les doublons).

Le 1er. sera conservé (soit les zéros).

Cdlt.

Bonsoir merci de vos réponses et h2so4 pour ton code

Mais en effet dhany le dit, c’est qu’il manque la condition que l’ID est en double et c’est la tout mon problème...

je pense avoir posé une question, j'ai proposé une solution pour le cas où la réponse est oui. Je n'ai pas vu de réponse à ma question.

s'il peut y avoir des IDs uniques avec une valeur 1 voici le code adapté, le code supprime toutes les lignes qui ont 1 en colonne M pour les IDs qui sont en double, mais ne supprime pas les IDs uniques qui auraient une valeur 1 en colonne M.

Sub aargh()
    With Sheets("feuil1")    'nom de la feuille
        dl = .Cells(Rows.Count, 2).End(xlUp).Row    'nombre de lignes
        For i = dl To 1 Step -1
            If .Cells(i, "M") = 1 Then
                Set re = .Cells(1, 2).Resize(dl).Find(.Cells(i, 2).Value, lookat:=xlWhole)
                If Not re Is Nothing Then
                    If .Cells(re.Row, "M") = 0 Then
                        Rows(i).Delete shift:=xlUp    '1 en colonne M on supprime la ligne
                    Else
                        Set re = .Cells(1, 2).Resize(dl).FindNext(re)
                        If Not re Is Nothing Then
                            If .Cells(re.Row, "M") = 0 Then
                                Rows(i).Delete shift:=xlUp    '1 en colonne M on supprime la ligne
                            End If
                        End If
                    End If
                End If
            End If
        Next i
    End With
End Sub

Bonsoir h2so4,

Je suis très sceptique au sujet de ta solution : elle permet effectivement de supprimer toutes les lignes qui ont un 1 en colonne M, comme tu l'as toi-même décrit ; cependant, quid de la vérification à faire si l'ID est un doublon ou non ? on dirait bien qu'c'est une option qui est passée à la trappe ! sauf si j'me suis trompé, j'te laisse revoir ta copie...

dhany

bonsoir Dhany,

je t'invite à relire les prémices de ma réponse. Moi j'ai compris de l'énoncé que s'il y a des IDs uniques, ils ont un 0 en colonne M et que si il y a des IDs en double,pour ces IDS on trouvera une ligne avec la valeur 0 et une autre avec la valeur 1 en colonne M. j'en déduis que l'on peut supprimer toutes les lignes qui ont un 1 en colonne M. ce que fait le code que j'ai proposé.

Bonjour,

Une nouvelle proposition à étudier.

Cdlt.

8lesoldatnoir.xlsm (21.72 Ko)
Option Explicit
'ALT F8 puis exécuter la procédure
Public Sub RemoveDuplicatesInTable()
Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects(1)
    With lo
        .Sort.SortFields.Add .ListColumns(2).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.SortFields.Add .ListColumns(13).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.Apply
        .Sort.SortFields.Clear
        .Range.RemoveDuplicates Columns:=2, Header:=xlYes
        .Sort.SortFields.Add .ListColumns(1).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.Apply
        .Sort.SortFields.Clear
    End With
End Sub
Rechercher des sujets similaires à "supprimer ligne valeur colonne double"