Pb de mise en place d'un filtre automatique

Y compris Power BI, Power Query et toute autre question en lien avec Excel
U
Uma31
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 23 avril 2014
Version d'Excel : 2007

Message par Uma31 » 24 octobre 2017, 10:18

Bonjour à tous,

Je dois faire un filtre sur un classeur de plusieurs onglets sur un tableau de 11 colonnes et d'un nombre de lignes variable

Le filtre est déjà existant sur la première ligne et peut être activé ou non, la colonne à filtrer est la G, les critères à retenir sont Open ou Rejected ou Closed (celui rejeté est Deleted). Comme tous les onglets n'ont pas de filtre, je fais un test préalable.

J'ai le code suivant :

For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.AutoFilterMode Then
Range("A1:K1").AutoFilter Field:=7, Criteria1:=Array("Open", "Rejected", "Closed"), Operator:=xlFilterValues
End If
Next

J'ai mis la version avec la sélection de la première ligne entière, mais j'ai essayé avec des Range différents (A1, G1, la totalité du tableau, les colonnes A à K entières, ...)

J'ai 2 problèmes :
- La macro ne marche pas systématiquement (" La méthode AutoFilter de la classe Range a échoué " dès le premier onglet sur lequel le filtre est existant)
- quand elle marche, certains onglets sont filtrés, d'autres non, alors qu'un déroulement pas à pas me montre bien que tous les onglets sont balayés.

Et tout ça semble aléatoire...

Si quelqu'un a une solution, je suis preneur. Ca fait 2 heures que je triture Internet dans tous les sens et je ne trouve rien.

Merci d'avance.

Manu
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'937
Appréciations reçues : 102
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 24 octobre 2017, 11:19

Bonjour,
Sui pas persuadé que vous pouvez utiliser Worksheet comme nom de variable. En règle générale il vaut mieux éviter d'utiliser des mots (réservés ou non) comme nom de variable...
De plus vous ne qualifiez pas le Range...
Comme il n'y a pas de fichier joint je ne peux pas tester mais essayez :
Sub test()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.AutoFilterMode Then
Ws.Range("A1:K1").AutoFilter Field:=7, Criteria1:=Array("Open", "Rejected", "Closed"), Operator:=xlFilterValues
End If
Next
End Sub
A+
Ici c'est un forum Excel/VBA pas Photoshop :
Quand vous amenez votre voiture au garagiste vous lui donnez pas juste la photo ?
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'335
Appréciations reçues : 532
Inscrit le : 27 août 2012
Version d'Excel : 365 32 bits

Message par Jean-Eric » 24 octobre 2017, 12:09

Bonjour,
Bonjour Galopin01,
Ne faudrait-il pas utiliser ?
If ws.FilterMode then ws.ShowAllData
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
U
Uma31
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 23 avril 2014
Version d'Excel : 2007

Message par Uma31 » 24 octobre 2017, 14:28

Ca marche merci.

Manu
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message