[Résolu]Supprimer des lignes avec conditions après un filtre automatique.

Nurbo

XLDnaute Nouveau
Salut,


Après avoir cherché sur le forum j'ai réussi à faire le code ci-dessous, mais je bloque toujours, je m'explique.


Tous les jours je traite un fichiers avec entre 4000 et 15000 lignes. Il change tous les jours.
Dans la colonne 13 j'ai des données exemple: aa1, bb1, cc1, dd1, ee1

Mais tous les jours il n'y a pas neccessairement TOUTES les données, il arrive que je n'ai pas la donnée bb1 par exemple.

Ce que je veux faire c'est supprimer des lignes filtrées selon des conditions (commence par aa1, bb1, etc) sans supprimer la 1ère ligne qui contient mes champs.

Le code ci-dessous correspond parfaitement à ce que je veux faire SAUF si un critère n'existe pas, et à ce moment là toutes mes lignes sont supprimées.

Il faudrait, s'il vous plait, rajouter une condition qui indique de ne rien faire si un critère n'est pas présent dans la colonne en question, et passer au critère suivant. Est-ce possible ?

Code:
Selection.AutoFilter Field:=13, Criteria1:="=aa1*", Operator:=xlAnd
    Range("A1").Select
    Range("A2", [A65536].End(3)).SpecialCells(xlCellTypeVisible).EntireRow.Delete

    Selection.AutoFilter Field:=13, Criteria1:="=bb1*", Operator:=xlAnd
    Range("A1").Select
    Range("A2", [A65536].End(3)).SpecialCells(xlCellTypeVisible).EntireRow.Delete

    Selection.AutoFilter Field:=13, Criteria1:="=cc1*", Operator:=xlAnd
    Range("A1").Select
    Range("A2", [A65536].End(3)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    
    Selection.AutoFilter Field:=13, Criteria1:="=dd1*", Operator:=xlAnd
    Range("A1").Select
    Range("A2", [A65536].End(3)).SpecialCells(xlCellTypeVisible).EntireRow.Delete


Je vous remercie par avance.
 

Pièces jointes

  • filtre_auto.xls
    20.5 KB · Affichages: 76
  • filtre_auto.xls
    20.5 KB · Affichages: 82
  • filtre_auto.xls
    20.5 KB · Affichages: 83
Dernière édition:

TempusFugit

XLDnaute Impliqué
Re : Supprimer des lignes avec conditions après un filtre automatique.

Bonjour


Tu peux si j'ai bien compris il est possible d'appliquer qu'un seul critère à ton filtre automatique
Code:
Sub Macro2()
Range("A1", [A65536].End(xlUp)).AutoFilter Field:=1, Criteria1:="=*1*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
End Sub

Ici le critère est: se termine par 1*

J'ai testé avec les valeurs exemples que tu donnes (aa1,bb1,cc1,dd1,ee1) et cela fonctionne.
 
Dernière édition:

Nurbo

XLDnaute Nouveau
Re : Supprimer des lignes avec conditions après un filtre automatique.

Merci à vous pour votre réactivité, cependant j'ai oublié de préciser que les critères commencent par aa1*, bb1*.

Car derrière il y a toute une série de chiffre que je ne peux pas rentrer manuellement comme indiqué.

Les deux méthodes que vous me donnez fonctionnent sauf que:

Pour TempusFugit : bug lorsque le terme n'existe pas, sinon ça marche en copiant/collant et en changeant le début de critère: aa1*, bb1*, cc1* (critère commence par)


Pour phlaurent55 : marche aussi mais avec des valeurs fixe, j'ai essayé en rajoutant une * après le critère aa1 mais il m'efface toutes les lignes. Par contre il faut effacer ces lignes filtrées et ne garder que le reste.
 

Nurbo

XLDnaute Nouveau
Re : Supprimer des lignes avec conditions après un filtre automatique.

oula, je n'ai jamais dit que ta réponse buggait, j'ai mis :
bug lorsque le terme n'existe pas

Si tu regarde mon fichier exemple, il n'y a pas de valeur cc1. Mais c'est possible que le lendemain elle y soit cette valeur.

Toujours dans l'optique que la valeur commence par aa1*****, bb1*****, cc1******.
Ta réponse me va nickel, pas de calcul long, c'est instantanné (testé avec un fichier de 4000 lignes)

Juste que ça plante si la macro ne trouve pas une valeur. En gros si tu as une code qui permet de dire "si pas de valeur qui commence par cc1***" passe à la suite, c'est ultime !!! et comme souvent me ferais gagner un temps fou...

Voilà comment j'ai moifié ton code, juste à "sauter" le filtre de critère de la colonne 13 lorsque celui-ci n'existe pas.

Code:
Sub Macro2()
Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=aa*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=bb*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

End Sub

Tout de même un grand merci à toi, ça me donne une piste.
 

Pièces jointes

  • filtre_auto_v2.xls
    23.5 KB · Affichages: 66

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Supprimer des lignes avec conditions après un filtre automatique.

Re,

je pense qu'à ce stade la question posée manque encore de précision
il est utile de connaitre exactement la (les) condition(s) nécessaire(s) à la suppression des lignes

est-ce:
toutes les lignes qui commencent par aa1, bb1, cc1, dd1, jusqu'à ---> zz1

ou alors:
toutes les lignes où le chiffre 1 est présent en 3ème position (voir fichier joint)
ou autre règle ?
merci de préciser davantage


à+
Philippe
 

Pièces jointes

  • 111.xls
    44 KB · Affichages: 76
  • 111.xls
    44 KB · Affichages: 85
  • 111.xls
    44 KB · Affichages: 83
Dernière édition:

Nurbo

XLDnaute Nouveau
Re : Supprimer des lignes avec conditions après un filtre automatique.

Je savais qu'il fallait être précis dans la demande, mais je me rend compte que lorsque l'on ne connait pas le fichier réel et le but c'est super dur.

Je vous joint donc le fichier avec les valeurs réelles.

Tout est expliqué sur le fichier xls avec 2 boutons.
Le 1er avec la macro 1 qui fonctionne car tous les critères que la macro doit filtrer se trouvent effectivement dedans.

Le 2ème avec la macro 2 ou il y a volontairement un critère qui n'est pas présent dans le fichier. Dans ce cas là la macro plante.

Il faudrait "juste" dire à la macro de passer à l'étape suivante si il n'y a pas de critères commençant par C2D (comme dans l'exemple)


En tout cas je vous remercie d'aider les boulets que nous sommes :p et de prendre autant de temps pour comprendre nos demandes.

Et je vous assure que je cherche aussi sur le net...

@+
 

Pièces jointes

  • 07-04.xls
    44.5 KB · Affichages: 92

Nurbo

XLDnaute Nouveau
Re : Supprimer des lignes avec conditions après un filtre automatique.

aaaaaaaaaaaaaahhhhhhhhhhh !!!!


Un super grand merci !!!!

Ca marche !!!

Code:
Sub Macro1()

On Error Resume Next

Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=C2E3*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=C2G*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=C2C*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1", [A65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=C2D*", Operator:=xlAnd
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Selection.AutoFilter Field:=13
End Sub

Maintenant si le critères de filtres "commence par" n'existe pas, ça passe au suivant et donc fait bien ce que je voulais.

Encore merci... vous imaginez même pas le temps que vous allez me faire gagner....
 

TempusFugit

XLDnaute Impliqué
Re : [Résolu]Supprimer des lignes avec conditions après un filtre automatique.

Bonjour

Pourquoi ne pas utiliser un seul filtre ?

Code:
Sub Macrotest()
On Error Resume Next
With Feuil1
Range(.[A1], .[M65536].End(xlUp)).AutoFilter Field:=13, Criteria1:="=C2**", Operator:=xlAnd
End With
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase").Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
Selection.AutoFilter Field:=13
End Sub
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : [Résolu]Supprimer des lignes avec conditions après un filtre automatique.

Re,
Bonjour

Pourquoi ne pas utiliser un seul filtre
et pourquoi ne pas poser clairement la question :confused::confused::confused:

au départ il s'agissait de filtrer sur aa1, bb1, cc1, .................
maintenant c'est avec C2E3, C2G*, C2D*, C2C*, ...............

c'est quoi la suite :confused::confused::confused:

à+
Philippe
 

Discussions similaires

Réponses
6
Affichages
167
Réponses
4
Affichages
632

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet