supprimer ligne non filtrées

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 ?
 
R

Robert

Guest
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
 
@

@+Thierry

Guest
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
 

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 362
Membres
103 528
dernier inscrit
maro