Autres Sélection d'onglets

chilo27

XLDnaute Occasionnel
Bonsoir le forum

J'ai de nouveau besoin de votre aide
J'ai plusieurs feuilles sur lesquelles je souhaite supprimer les mêmes sélections
en faisant un filtrage à partir de la colonne H
Exemple en faisant le filtrage, je souhaite supprimer cette sélection dans toutes les feuilles du classeur

Sachant que d'autres feuilles viendront compléter celles qui existent déjà

En vous remerciant pour votre aide
 

Pièces jointes

  • SELECTION ONGLET.zip
    70 KB · Affichages: 17
Solution
Re
Reste ceci :
*De plus filtrer des en têtes qui peuvent eux mêmes être supprimer

Je te propose ceci :
Dans cet exemple on filtre la col H avec comme critère =0 et on applique un 2eme filtre sur la col A avec comme critère = vide
Ce qui correspond si j'ai bien compris ce que tu veux faire avec ton code....
Fait Alt + F11 et F8 pour voir pas à pas ce que la macro fait....

@Phil69970

Phil69970

XLDnaute Barbatruc
Bonjour @chilo27, le forum

Voici un exemple pour faire la même chose sur toutes les feuilles :
VB:
Sub TestFeuille()

Dim Ws As Worksheet

For Each Ws In Worksheets 'Boucle sur chaque feuille
    'A adapter si tu veux exclure une feuille (ici on exclut la feuille10)
    'Si tu veux faire ton code sur TOUTES LES FEUILLES alors supprime le If ... then et le end if
    If Ws.Name <> "Feuil10" Then
    
        'Ton code qui sera executé sur toutes les feuilles sauf la feuille10
    
    End If
Next
End Sub

@Phil69970
 

Phil69970

XLDnaute Barbatruc
@chilo27

C'est ta macro qui ne fonctionne pas car :
VB:
 ActiveSheet.Range
fait toujours référence à la feuille active....

En clair que veux tu faire sur toutes les feuilles :
Mettre le filtre 0 sur la colonne H et après supprimer les lignes qui correspondent à ce filtre ?
Et après qu veux tu faire ?

@Phil69970
 

chilo27

XLDnaute Occasionnel
RE
c'est exactement cela et après supprimer dans toutes les feuilles du classeur cette sélection
Toutes les feuilles sont formatées de la même manière
c'est pour ne pas répéter l'opération une par une sur toutes les feuilles
Merci à toi Phil69970
 

chilo27

XLDnaute Occasionnel
Re, Phil69970
Voici la
Dim Ws As Worksheet
ActiveSheet.Range
For Each Ws In Worksheets 'Boucle sur chaque feuille
'A adapter si tu veux exclure une feuille (ici on exclut la feuille10)
'Si tu veux faire ton code sur TOUTES LES FEUILLES alors supprime le If ... then et le end if
'If Ws.Name <> "Feuil10" Then

'Ton code qui sera exécuté sur toutes les feuilles sauf la feuille10

'SUPPRESSION SELECTION
ActiveSheet.Range("$A$1:$J$55445").AutoFilter Field:=8, Criteria1:="0" filtrage sur la colone G
Range("A5784:J5784").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveSheet.Range("$A$1:$J$55445").AutoFilter Field:=8

'SUPPRIME LES LIGNES VIDES
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
' End If
Next
 

Phil69970

XLDnaute Barbatruc
Re

Non le filtrage se fait sur la colonne H et non pas G car Field=8 est la 8eme colonne.
Et le critere de filtre est 0 (zéro) donc si il y a un filtre sur col H qui correspond à 0 alors action...
Field:=8, Criteria1:="0" filtrage sur la colone G
Par contre le reste de ton code je ne comprends pas ce que tu veux faire :

'SUPPRIME LES LIGNES VIDES
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Car Columns("A:A") c'est la colonne A

*De plus filtrer des en têtes qui peuvent eux mêmes être supprimer c'est pas top
Normalement la 1ere ligne correspond aux en têtes exemple : Total colonne X ou bien Divers mais pas des données à filtrer.
OK
1615741830244.png

Non OK
1615741883549.png


@Phil69970
 
Dernière édition:

chilo27

XLDnaute Occasionnel
Re
Effectivement la sélection se fait en colonne H

Lors de la suppression des données il y a des lignes vides
alors pour les supprimer il y ce code
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Encore merci Phil69970
 

Phil69970

XLDnaute Barbatruc
Re
Reste ceci :
*De plus filtrer des en têtes qui peuvent eux mêmes être supprimer

Je te propose ceci :
Dans cet exemple on filtre la col H avec comme critère =0 et on applique un 2eme filtre sur la col A avec comme critère = vide
Ce qui correspond si j'ai bien compris ce que tu veux faire avec ton code....
Fait Alt + F11 et F8 pour voir pas à pas ce que la macro fait....

@Phil69970
 

Pièces jointes

  • Critere sur onglet V1.xlsm
    122.2 KB · Affichages: 8

chilo27

XLDnaute Occasionnel
Bonjour le forum, Phil69970

J'ai essayé cela fonctionne dans l'ensemble assez bien

1)Toutefois, quand je fais un filtre sur le 0 cela fonctionne
sur des fichiers de plus 500 000 lignes ou moins
2) Quand je fais la même opération un filtre sur le 1 cela ne fonctionne pas
3)
Dim WS As Worksheet
'On Error Resume Next
Application.ScreenUpdating = False
Dim derlig&
Dim VarColFiltre1%, VarCrit1
Dim VarColFiltre2%, VarCrit2

VarColFiltre1 = Worksheets("Feuil10").Range("I6")
VarCrit1 = Worksheets("Feuil10").Range("I19")

If Worksheets("Feuil10").Range("M6") <> "" Then
VarColFiltre2 = Worksheets("Feuil10").Range("M6")
VarCrit2 = Worksheets("Feuil10").Range("M9")
End If

For Each WS In Worksheets 'Boucle sur chaque feuille
'A adapter si tu veux exclure une feuille (ici on exclut la feuille10)
'Si tu veux faire ton code sur TOUTES LES FEUILLES alors supprime le If ... then et le end if
If WS.Name <> "Feuil10" And "Création" And "modèle" Then '
derlig = WS.Range("A" & Rows.Count).End(xlUp).Row
'Ton code qui sera executé sur toutes les feuilles sauf la feuille10
'Ws.Range("$A$2:$J$" & Derlig).AutoFilter Field:=8, Criteria1:="1"
WS.Range("$A$2:$J$" & derlig).AutoFilter Field:=VarColFiltre1, Criteria1:=VarCrit1

WS.Range("$A$2:$J$" & derlig).AutoFilter Field:=VarColFiltre2, Criteria1:=VarCrit2


Derlig1 = WS.Range("A" & Rows.Count).End(xlUp).Row
On Error Resume Next
WS.Range("$A$2:$J$" & derlig).SpecialCells(xlCellTypeVisible).EntireRow.Delete

WS.Range("$A$1:$J$1").AutoFilter
WS.Range("$A$1:$J$1").AutoFilter
Derlig1 = WS.Range("A" & Rows.Count).End(xlUp).Row
End If
Next
Worksheets("Feuil10").Range("M6") = ""
Worksheets("Feuil10").Range("M19") = ""

3) le filtre se fait aussi sur les feuille création , modèle etc les lignes sont remplies cependant

merci encore
 

Phil69970

XLDnaute Barbatruc
@chilo27, le forum

1)Es tu sur d'avoir des valeurs à filtrer ?
Crée un fichier bidon avec 20 lignes et fait des tests pour voir si cela marche...
2) Quand je fais la même opération un filtre sur le 1 cela ne fonctionne pas

2]Comment as tu résolu ceci :
*De plus filtrer des en têtes qui peuvent eux mêmes être supprimer c'est pas top
car filtrer des lignes avec pour en tête le filtre que tu vas supprimer 🤔...

3)Ce code ne fonctionnera pas
If WS.Name <> "Feuil10" And "Création" And "modèle"
Mais cela fonctionnera mieux ;)
VB:
    If Ws.Name <> "Feuil10" And Ws.Name <> "Création" And Ws.Name <> "modèle" Then

@Phil69970
 

Discussions similaires

Réponses
5
Affichages
357
  • Résolu(e)
Microsoft 365 Code 128
Réponses
2
Affichages
512

Statistiques des forums

Discussions
315 136
Messages
2 116 633
Membres
112 819
dernier inscrit
Trivet