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,
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
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"
1620376718024.png
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
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"
Regarde la pièce jointe 1104856
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 :rolleyes:
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
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
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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou