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

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

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

Dernière édition:
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:
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.
 
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

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

Dernière édition:
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 😛 et de prendre autant de temps pour comprendre nos demandes.

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

@+
 

Pièces jointes

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....
 
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
 
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 😕😕😕

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 😕😕😕

à+
Philippe
 
- 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

Discussions similaires

Réponses
8
Affichages
493
Réponses
3
Affichages
341
Réponses
12
Affichages
974
Réponses
6
Affichages
336
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
447
Réponses
4
Affichages
881
Retour