Effacer lignes quand apparait une valeur dans une autre colonnne
Résolu
teprac
Messages postés
2
Statut
Membre
-
Teprac -
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
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
-
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 -
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 -
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 SubAvec ton exemple modifié : https://www.cjoint.com/c/FEzpN1yNDFl -