Effacer lignes quand apparait une valeur dans une autre colonnne

Résolu/Fermé
teprac Messages postés 2 Date d'inscription mercredi 25 mai 2016 Statut Membre Dernière intervention 25 mai 2016 - 25 mai 2016 à 09:34
 Teprac - 26 mai 2016 à 12:07
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

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
25 mai 2016 à 10:31
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
teprac Messages postés 2 Date d'inscription mercredi 25 mai 2016 Statut Membre Dernière intervention 25 mai 2016
25 mai 2016 à 11:01
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
25 mai 2016 à 17:41
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
Merci cette fois c'est OK

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