VBA - Pb Suppression lignes sur plage filtrée

oracle7

XLDnaute Nouveau
Bonjour à tous,

Voici mon problème :

Après avoir filtré une plage selon un critère je veux supprimer les lignes résultantes répondant à un second critère. J'ai donc ce type de code :
Code:
pr_PlageLiée.AutoFilter Field:=1, Criteria1:=sCritere1
For Each rligne In pr_PlageLiée.SpecialCells(xlCellTypeVisible).Rows
    If rligne.Cells(1, 1).Offset(0, 9).Value = sCritere2 Then
        rligne.EntireRow.Delete
    End If
Next rligne
Malheureusement cela ne marche pas bien dans le sens où si 2 lignes consécutives (dans la plage résultante du filtre) répondent au second critère alors une seule est supprimée.

Pouvez-vous SVP m'aider à trouver ce qui ne va pas dans ce code.

Merci d'avance.
Cordialement
oracle7 :):):)
 

job75

XLDnaute Barbatruc
Re : VBA - Pb Suppression lignes sur plage filtrée

Bonsoir oracle7,

Quant on supprime des lignes dans une boucle sans faire attention, c'est le pataquès :rolleyes:

Une première méthode c'est de commencer par la dernière ligne et de remonter.

Une autre méthode est de faire l'union des lignes à supprimer et de tout supprimer après la boucle :

Code:
Dim plage As Range
'------
pr_PlageLiée.AutoFilter Field:=1, Criteria1:=sCritere1
For Each rligne In pr_PlageLiée.SpecialCells(xlCellTypeVisible).Rows
    If rligne.Cells(1, 1).Offset(0, 9).Value = sCritere2 Then _
        Set plage = [COLOR="Red"]Union[/COLOR](rligne, IIf(plage Is Nothing, rligne, plage))
Next rligne
If Not plage Is Nothing Then plage.EntireRow.Delete

A+
 

oracle7

XLDnaute Nouveau
Re : VBA - Pb Suppression lignes sur plage filtrée

Bonsoir job75,

1 - D'abord MERCI de ta réponse qui me propose une solution bien élégante à mon Pb.

2 - Pour ma part, entre temps j'en ai trouvé une autre qui marche aussi sauf que j'ai un doute lorsque le filtre ne ramène aucune ligne et là je sais pas gérer. Tu as peut être une idée ?

Toujours est-il voici ma solution "partielle" (et très simple au final mais peut être trop !) :
Code:
pr_PlageLiée.AutoFilter Field:=1, Criteria1:=sCritere1
pr_PlageLiée.AutoFilter Field:=10, Criteria1:=sCritere2
pr_PlageLiée.SpecialCells(xlCellTypeVisible).EntireRow.Delete

Cordialement
oracle7 :):):)
 

job75

XLDnaute Barbatruc
Re : VBA - Pb Suppression lignes sur plage filtrée

Re,

Oui c'est plus simple, il fallait savoir que le filtre allait de la colonne A à la colonne J :)

Deux méthodes au cas où le filtre ne renverrait aucune ligne :

Code:
pr_PlageLiée.AutoFilter Field:=1, Criteria1:=sCritere1
pr_PlageLiée.AutoFilter Field:=10, Criteria1:=sCritere2
[COLOR="Red"]On Error Resume Next[/COLOR]
pr_PlageLiée.SpecialCells(xlCellTypeVisible).EntireRow.Delete

Code:
Dim plage As Range
'-------
pr_PlageLiée.AutoFilter Field:=1, Criteria1:=sCritere1
pr_PlageLiée.AutoFilter Field:=10, Criteria1:=sCritere2
Set plage = pr_PlageLiée.SpecialCells(xlCellTypeVisible)
If Not plage Is Nothing Then plage.EntireRow.Delete

A+
 

Discussions similaires

Réponses
2
Affichages
142

Statistiques des forums

Discussions
312 490
Messages
2 088 884
Membres
103 982
dernier inscrit
krakencolas