VBA - Pb Suppression lignes sur plage filtrée

  • Initiateur de la discussion Initiateur de la discussion oracle7
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

O

oracle7

Guest
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 🙂🙂🙂
 
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 🙄

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+
 
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 🙂🙂🙂
 
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+
 
Re : VBA - Pb Suppression lignes sur plage filtrée

Bonsoir job75,

Effectivement cela sécurise le processus.

Dans tous les cas MERCI de ton aide. Pour moi le Pb est résolu.

Cordialement
oracle7🙂🙂🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

B
Réponses
2
Affichages
2 K
bastienb
B
S
  • Question Question
Réponses
2
Affichages
2 K
sardaucar
S
T
  • Question Question
Réponses
2
Affichages
1 K
Trinitybarb
T
B
  • Question Question
Réponses
7
Affichages
2 K
V
Réponses
2
Affichages
2 K
Vinvol
V
S
Réponses
4
Affichages
1 K
sadness78
S
Retour