Effacer lignes quand apparait une valeur dans une autre colonnne

Résolu
teprac Messages postés 2 Statut Membre -  
 Teprac -
Bonjour,

J'ai un long fichier avec bcp de lignes
Dans la colonne A j'ai des identifiants
Dans la colonne B j'ai des valeurs de 1 à 9
Je voudrais effacer toutes les lignes ayant le même identifiant lorsque dans la colonne B apparait la valeur 9

AVANT

Nom Valeur
Jacques 1
Jacques 2
Jacques 3
Jacques 5
Lionel 1
Lionel 9
Patrick 2
Patrick 5
Paul 1
Paul 5
Paul 9
Pierre 8

APRES

Nom Valeur
Jacques 1
Jacques 2
Jacques 3
Jacques 5
Patrick 2
Patrick 5
Pierre 8

Merci de votre aide

4 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Avec cette macro tu devrais faire ton effacement :
    Public Sub Sup_lignes()
    Dim lg1 As Long, lg2 As Long
    For lg1 = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If Cells(lg1, 2).Value = 9 Then
            For lg2 = lg1 - 1 To 2 Step -1
                If Cells(lg1, 1).Value = Cells(lg2, 1).Value Then
                    Rows(lg2).Delete
                    lg1 = lg1 - 1
                End If
            Next lg2
            Rows(lg1).Delete
        End If
    Next lg1
    End Sub


    Avec ton exemple : http://www.cjoint.com/c/FEziFmj4c1l
    0
  2. teprac Messages postés 2 Statut Membre
     
    Bonjour

    Merçi pour la réponse
    Toutefois la suppression n'est pas parfaite car elle dépend de la position du 9
    si le 9 est au centre on gardera des lignes alors qu'elles doivent être effaées.

    Merci
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    la suppression n'est pas parfaite
    C'est vrai effectivement, je m'était basé sur ton exemple qui n'était pas exhaustif lui non plus. Voici le code modifié :
    Public Sub Sup_lignes()
    Dim lg1 As Long, lg2 As Long
    For lg1 = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If Cells(lg1, 2).Value = 9 Then
            For lg2 = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
                If Cells(lg1, 1).Value = Cells(lg2, 1).Value Then
                    If Cells(lg2, 2).Value <> 9 Then
                        Rows(lg2).Delete
                        lg1 = IIf(lg2 < lg1, lg1 - 1, lg1)
                    End If
                End If
            Next lg2
            Rows(lg1).Delete
        End If
    Next lg1
    End Sub
    
    Avec ton exemple modifié : https://www.cjoint.com/c/FEzpN1yNDFl
    0
  4. Teprac
     
    Merci cette fois c'est OK

    Super vous m'avez aidé plus vite que le service informatique.
    0