supprimer ligne non filtrées

  • Initiateur de la discussion Initiateur de la discussion julien
  • 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 !

J

julien

Guest
bonjour à tous,

j'ai un problème avec un filtre crée sous Visual B. Je souhaite garder seulement les lignes filtrées pour faire des opérations dessus et je n'y arrive pas. En effet, la mointre opération sur la feuille où se situe le filtre me prend toutes les valeurs y compris celles non filtrées. Une des solutions serait de ne seulement garder les valeurs filtrées mais comment faire ?
 
Salut Julien, salut le forum,

Cette macro à adapter à ton cas te permettra de supprimer les lignes non désirées : (Peut-être serait-il préférable de faire une copie de tes données avant...)

Public Sub test()
Dim cel As Range
Dim lig As Long
lig = 1
début:
For Each cel In Range("A" & lig & ":A" & Range("A65536").End(xlUp).Row)
If "condition inverse de ton filtre" Then
lig = cel.Row
cel.EntireRow.Delete
GoTo début
End If
Next cel
End Sub

À plus,

Robert
 
Bonjour Robert, Julien, le Forum

Si ma mémoire est bonne, j'avais enguirlandé @Christophe@ pour un code similaire au tien Robert pour cette histoire de boucle qui renvoit dans la boucle pour les Delete de Rows qui posent toujours un problème dans le cas de lignes adjacentes à supprimer d'affilé... La Boucle Each Cell y perdant sont latin...

Donc non, ce n'est absolument pas conseillé de repartir au début à chaque suppression... Si il y a beaucoup de lignes, c'est la cata assurée.

Voilà ce que je conseille (en imaginant que Julien veut filtrer toutes les données qui NE contiennent PAS la string "Toto" (attention sensible à la casse)

Sub TestPourRobert()
Dim cel As Range

For Each cel In Range("A2:A" & Range("A65536").End(xlUp).Row)
If InStr(cel, "Toto") <> 0 Then
cel.Clear
End If
Next cel
On Error Resume Next
Range("A2:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Maintenant au lieu de boucler on peut aussi filtrer directement et là c'est encore plus rapide :

Sub DeleteFilteredRow()

With ActiveSheet
.Range("A1").AutoFilter Field:=1, Criteria1:="=*toto*"
On Error Resume Next
.Range("A2:A" & .Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.ShowAllData
End With
End Sub

(Je m'en vais donner cette dernière macro à C@thy Lien supprimé)

Bonne Journée
@+Thierry
 
- 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

Retour