Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 VBA : filtre selon un mot défini

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je souhaite créer un filtre en colonne A en VBA pour supprimer toutes les lignes contenant le mot "page" ("page 1" ,"page fin" etc)
Mon code est :
VB:
Sub filtre()
Dim Lg%, Plg As Range
Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Set Plg = Range("a1:a" & Lg)
Plg.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A: having('%Page%'), Unique:=False

Plg.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

Mais il y a quelque chose qui ne va pas, car je crois que la condition A: having('%Page%') n'est pas correcte.
Auriez-vous des idées comment on écrit ce genre de condition, s'il vous plaît ?

Merci
 

Jacky67

XLDnaute Barbatruc
Bonjour,

Je souhaite créer un filtre en colonne A en VBA pour supprimer toutes les lignes contenant le mot "page" ("page 1" ,"page fin" etc)

Auriez-vous des idées comment on écrit ce genre de condition, s'il vous plaît ?

Merci
Bonjour,
Peut-être comme ceci
En adaptant le codename de la feuille
VB:
Sub filtre()
    Dim plage
    With Feuil1
        If .FilterMode Then .ShowAllData
        On Error Resume Next    ' si filtre vide
        Set plage = Range("a1:a" & Cells.Find("*", , , , xlByRows, xlPrevious).Row)
        plage.AutoFilter Field:=1, Criteria1:="=page*"
        plage.Offset(1).Resize(plage.Rows.Count - 1).EntireRow.SpecialCells(xlCellTypeVisible).Delete
        plage.AutoFilter
    End With
End Sub
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour Jacky,
Merci beaucoup !
Qu'est-ce que c'est "le codename" de la feuille s'il te plaît ?


 

Jacky67

XLDnaute Barbatruc
Bonjour Jacky,
Merci beaucoup !
Qu'est-ce que c'est "le codename" de la feuille s'il te plaît ?


Re...
C'est en quelque sorte le nom VBA de la feuille, cela permet de déplacer ou de renommer la feuille sans avoir à modifier le code
Exemple: ici la feuille 1 est nommée "Ma feuille", le codename sera celui à sa gauche soit "Feuil1"
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci Jacky !
Je n'ai qu'une seule feuille.
Est-ce que c'est possible de garder dans mon filtre que des valeurs numérique ? En fait, dans A, j'ai des valeurs 234, 456, etc. Je voulais écrire comme Criteria1:="=numeric" peut-être.
 

Jacky67

XLDnaute Barbatruc
Merci Jacky !
Je n'ai qu'une seule feuille.
Est-ce que c'est possible de garder dans mon filtre que des valeurs numérique ? En fait, dans A, j'ai des valeurs 234, 456, etc. Je voulais écrire comme Criteria1:="=numeric" peut-être.

Re..
Alors ceci, sans filtre
VB:
Sub enleveNum()
    Dim Derlg&, i&
    Derlg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    For i = Derlg To 1 Step -1
        If IsNumeric(Cells(i, 1)) Then Rows(i).Delete
    Next
End Sub
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Re...
For i = Derlg To 4 Step -1 ==> 4ème ligne inclue
Des fois, il suffit de tester sur un classeur brouillon
Merci Bruno,
Je suis débutante, je viens de créer un code pour supprimer toutes les lignes non numérique en gardant le chapeau. Les lignes numériques commencent toujours avec "1". Le code marche, je me demande si on peut l'améliorer :

VB:
Sub Mon_filtre_Ligne()
    Dim Derlg&, i&
    Dim numero As Integer
    numero = 1 'Numéro de départ
    Do While Cells(numero, 1) <> 1
        numero = numero + 1 'Le numéro est augmenté de 1 à chaque boucle
    Loop
    Derlg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    For i = Derlg To numero Step -1
        If Not IsNumeric(Cells(i, 1)) Then Rows(i).Delete
    Next
End Sub
 

Jacky67

XLDnaute Barbatruc
Re..
Bruno.... Bruuuuuuunooo ohé
Je ne vois pas ou cela doit mener
Mettre un classeur en ligne avec les explications
Mais aussi
Tant que cela fonctionne, on ne touche pas
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…