Ajout d'un choix dans un filtre

Résolu/Fermé
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023 - Modifié le 11 janv. 2021 à 19:06
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023 - 18 janv. 2021 à 18:09
Bonjour,
Dans un filtre automatisé, est-il possible de remplacer la valeur des critères par un choix d'une liste déroulante ou par la valeur d'une cellule préalablement remplie pour chaque critère.
J'ai cherché en vain des exemples, mais sans doute mal cherché !
J'espère être clair, merci pour votre indulgence pour un débutant
Selection.AutoFilter
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=01/01/2021", Operator:=xlAnd, _
         Criteria2:="<=08/01/2021"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:="Charge"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:="Electricité"
    Range("I7002").Select

Merci pour votre aide

Configuration: Windows / Chrome 87.0.4280.88
A voir également:

7 réponses

yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
Modifié le 11 janv. 2021 à 14:36
bonjour, le code que tu montres fonctionne-t'il?
si oui, veux-tu remplacer, par exemple, "Electricité" par le contenu d'une cellule?
si oui, tu peux faire, par exemple:
Criteria1:= ActiveSheet.[z123]
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
11 janv. 2021 à 18:41
Merci pour ton aide,
Je suis débutant, je pourrais effectivement rentrer les critères dans 4 cellules différentes avant de lancer ma macro qui fonctionne bien .
Dans ta proposition si je comprend bien je dois remplacer :
Criteria1:="Electricité" par Criteria1:= ActiveSheet.[z123]
Désolé mais ActiveSheet.[z123] correspond à quelle cellule ?
En fait je souhaite pouvoir à chaque fois que je lance ma macro pouvoir changer les critères, soit en alimentant avant la macro les 4 cellules correspondantes aux 4 critères, ou mieux en incorporant 4 boîtes de dialogue avec liste déroulante permettant de sélectionner chaque critères...
J'espère être clair !
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
11 janv. 2021 à 18:52
tu n'as pas répondu à ma première question.
ActiveSheet.[z123]
, c'est la cellule en colonne z et en ligne 123 de la feuille "active".
il est préférable d'éviter les select et activate.
et donc, par exemple, d'écrire
Sheets("Compta").[z123]


tu pourras ensuite passer aux boites de dialogue.
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
Modifié le 11 janv. 2021 à 19:07
Ci-joint ma macro intégrale :

Sub Tri_date_categ_souscateg()
'
' Tri_date_categ_souscateg Macro
    
    Sheets("Compta").Select
    ActiveSheet.Unprotect
    Columns("H:L").Select
    Selection.EntireColumn.Hidden = False
    Range("A3").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=01/01/2021", Operator:=xlAnd, _
         Criteria2:="<=08/01/2021"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:="Charge"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:="Electricité"
    Range("I7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("K7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("A7003").Select
    choix = MsgBox("Confirmer la suppression ?", 36, "Confirmation")
        'Si l'utilisateur a cliqué sur le bouton Oui
    If choix = vbYes Then
        'MsgBox "Vous avez cliqué sur Oui !", 64
    End If
    Selection.AutoFilter
    Range("I:I,K:K").Select
    Range("K1").Activate
    Selection.EntireColumn.Hidden = True
    Sheets("Compta").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A3").Select

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
12 janv. 2021 à 09:17
Re Bonjour,
Je suis bien un débutant, donc je ne suis pas sûr de comprendre toutes tes remarques.
La macro que j'ai posté, ce n'est bien sûr pas moi qui l'ai écrite, je l'ai faite à l'aide de l'enregistreur et j'ai ajouté une MsgBox que j'ai trouvé dans d'autres exemples.
J'ai créé mon tableau avec 11 colonnes dont 4 se référent à une liste de choix.
Je souhaite donc si c'est possible lorsque je lance ma macro que chacun de mes 4 critères :

- 2 critères dates du ... au ... sur ma 1ère colonne
- 1 critères pour les catégories (charges ...)
- 1 critère pour les sous-catégories ( électricité ...)

soit alimenté à partir d'une liste déroulante, correspondant à mes listes de choix, dans une boîte de dialogue.
Est-ce que j'ai répondu à ta question ?
PS : j'ai cherché pour la coloration syntaxique, mais non trouvé, j'ai vraiment bcp de choses à apprendre !!!
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
12 janv. 2021 à 11:35
je te demande si la macro fonctionne sans erreur.
as-tu lu les explications concernant la coloration syntaxique?
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023 > yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
12 janv. 2021 à 12:21
Oui ma macro fonctionne parfaitement telle que je l'ai enregistrer avec les critères figés...
J'ai regardé la coloration syntaxique, et après avoir sélectionné Basic avec la flèche, j'ai copier coller mon code, est-ce bien cela §

Sub Tri_date_categ_souscateg()
'
' Tri_date_categ_souscateg Macro
    
    Sheets("Compta").Select
    ActiveSheet.Unprotect
    Columns("H:L").Select
    Selection.EntireColumn.Hidden = False
    Range("A3").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=01/01/2021", Operator:=xlAnd, _
         Criteria2:="<=08/01/2021"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:=Range("O6")
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:=Range("O7")
    Range("I7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("K7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("A7003").Select
    choix = MsgBox("Confirmer la suppression ?", 36, "Confirmation")
        'Si l'utilisateur a cliqué sur le bouton Oui
    If choix = vbYes Then
        'MsgBox "Vous avez cliqué sur Oui !", 64
    End If
    Selection.AutoFilter
    Range("I:I,K:K").Select
    Range("K1").Activate
    Selection.EntireColumn.Hidden = True
    Sheets("Compta").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A3").Select

End Sub
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
12 janv. 2021 à 12:23
très bien.
as-tu essayé en utilisant le contenu d'une cellule?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
12 janv. 2021 à 13:50
Je viens de relancer la macro en modifiant les critères de dates et je constate que le résultat n'est pas celui escompté. Les >= et <= ne semblent pas pris en compte !
Par contre j'ai modifié les 2 autres critères en utilisant la valeur de 2 cellules (O6 et O7) comme sur la dernière version de ma macro, ça fonctionne
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
12 janv. 2021 à 14:07
Je viens de lancer le filtre identique à ma macro, les résultats sont corrects, mais si je passe par ma macro enregistrée avec les mêmes critères j'ai un résultat erroné pour les critères de dates !
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
12 janv. 2021 à 14:56
tu n'as pas montré comment tu avais modifié la macro pour les dates, ni ce que tu as mis dans les cellules correspondantes.
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
12 janv. 2021 à 16:01
Je n'ai pas modifié pour les dates, je ne sais pas faire, j'ai modifié les 2 autres critères pour qu'il se réfère à une cellule.
Si j'exécute un filtre dans le tableau sur 2 dates du ... au ... avec l'enregistreur de macro, j'ai un résultat correct, mais si je lance la macro enregistrée donc avec les mêmes critères de date, je n'ai pas un bon résultat ?
Ci-joint mon fichier : grosfi.ch/PEGeiYmKvGP
Voila ma macro enregistrée :

Sub Tri_date_categ_souscateg()
'
' Tri_date_categ_souscateg Macro
    
    Sheets("Compta").Select
    ActiveSheet.Unprotect
    Columns("H:L").Select
    Selection.EntireColumn.Hidden = False
    Range("A3").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=01/01/2021", Operator:=xlAnd, _
         Criteria2:="<=08/01/2021"
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:="Charge"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:=Range("O6")
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:="Electricité"
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:=Range("O7")
    Range("I7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("K7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("A7003").Select
    choix = MsgBox("Confirmer la suppression ?", 36, "Confirmation")
        'Si l'utilisateur a cliqué sur le bouton Oui
    If choix = vbYes Then
        'MsgBox "Vous avez cliqué sur Oui !", 64
    End If
    Selection.AutoFilter
    Range("I:I,K:K").Select
    Range("K1").Activate
    Selection.EntireColumn.Hidden = True
    Sheets("Compta").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A3").Select

End Sub
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
12 janv. 2021 à 19:01
je pense que le soucis, c'est que la macro travaille avec le format de date en anglais, et, donc, 08/01/2021, c'est le premier aout.
je vais chercher une solution.
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
12 janv. 2021 à 19:18
je pense que ceci fonctionne:
ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=" + CStr(CLng(Range("O4"))), Operator:=xlAnd, _
         Criteria2:="<=" + CStr(CLng(Range("O5")))
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023 > yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
12 janv. 2021 à 19:21
Sinon j'ai trouvé dans mes recherches qq chose pour les dates et j'ai intégré ce que je comprend et qui m'intéresse, la macro se déroule normalement, mais tjs le même problème pour les dates, je pense aussi que c'est dû au format de date.
Et justement dans le code récupéré il me semble qu'il y a une correction de format et une combox, mais je ne comprend pas la syntaxe, j'ai essayé de l'intégrer dans ma macro mais j'ai des erreurs que je ne sais pas corriger ...
Je joins la nouvelle macro
Merci pour ton aide

Sub Tri_date_categ_souscateg()
'
' Tri_date_categ_souscateg Macro
    
    Sheets("Compta").Select
    ActiveSheet.Unprotect
    Columns("H:L").Select
    Selection.EntireColumn.Hidden = False
    Range("A3").Select
    Selection.AutoFilter
    
    'ActiveSheet.Range("$A$1").AutoFilter Field:=2, Criteria1:= _
    ">=" & Format(CDate(Me.ComboBox1), "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<=" & Format(CDate(Me.ComboBox2), "mm/dd/yyyy")
    
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=" & Range("O4"), Operator:=xlAnd, _
         Criteria2:="<=" & Range("O5")
    
    
    'ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=01/01/2021", Operator:=xlAnd, _
         Criteria2:="<=08/01/2021"
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:="Charge"
        
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:=Range("O6")
        
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:="Electricité"
        
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:=Range("O7")
    Range("I7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("K7002").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("A7003").Select
    choix = MsgBox("Confirmer la suppression ?", 36, "Confirmation")
        'Si l'utilisateur a cliqué sur le bouton Oui
    If choix = vbYes Then
        'MsgBox "Vous avez cliqué sur Oui !", 64
    End If
    Selection.AutoFilter
    Range("I:I,K:K").Select
    Range("K1").Activate
    Selection.EntireColumn.Hidden = True
    Sheets("Compta").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A3").Select

End Sub
0
Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023 > Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
13 janv. 2021 à 19:17
Super c'est ok pour les dates, le résultat est correct. (Le format anglais ça vient de moi ?)
Pour le critère "charge", ça fonctionne aussi, j'ai ajouté une liste déroulante dans la cellule "O6" pour le choix avec le menu Données/Validation des données, celle la même qui sert à l'alimentation du tableau.
Par contre pour le critère Electricité (cellule "O7"), j'ai un problème, le choix est induit par celui de la cellule "O6".
Dans mon tableau j'ai utilisé la fonction INDIRECTE dans la validation des données, je ne vois pas comment préciser cette condition dans ma macro !
C'est peut-être là qu'il faut utiliser une boîte de dialogue !

Sub Tri_date_categ_souscateg()
'
' Tri_date_categ_souscateg Macro
    
    Sheets("Compta").Select
    ActiveSheet.Unprotect
    Columns("H:L").Select
    Selection.EntireColumn.Hidden = False
    Range("A3").Select
    Selection.AutoFilter
    
    'ActiveSheet.Range("$A$1").AutoFilter Field:=2, Criteria1:= _
    ">=" & Format(CDate(Me.ComboBox1), "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<=" & Format(CDate(Me.ComboBox2), "mm/dd/yyyy")
    
    ActiveSheet.Range("$A$3:$M$7000").AutoFilter Field:=1, _
         Criteria1:=">=" + CStr(CLng(Range("P4"))), Operator:=xlAnd, _
         Criteria2:="<=" + CStr(CLng(Range("P5")))
       
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:="Charge"
        
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=5, _
        Criteria1:=Range("P6")
        
    'ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:="Electricité"
        
    ActiveSheet.Range("$A$2:$M$7000").AutoFilter Field:=6, _
        Criteria1:=Range("P7")
    Range("I7003").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("K7003").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-6996]C:R[-1]C)"
    Range("A7003").Select
    choix = MsgBox("Confirmer la suppression ?", 36, "Confirmation")
        'Si l'utilisateur a cliqué sur le bouton Oui
    If choix = vbYes Then
        'MsgBox "Vous avez cliqué sur Oui !", 64
    End If
    Range("I7003").Select
    Selection.ClearContents
    Range("K7003").Select
    Selection.ClearContents
    Selection.AutoFilter
    Range("I:I,K:K").Select
    Range("K1").Activate
    Selection.EntireColumn.Hidden = True
    Sheets("Compta").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A3").Select

End Sub
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > Ramon1 Messages postés 330 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 10 août 2023
13 janv. 2021 à 20:30
j'avais le même problème avec le format anglais.
je pense que c'est plutôt un soucis avec l'interprétation des dates par "autofilter" en VBA. en utilisant
clng
, c'est le VBA qui interprète la date, et court-circuite ainsi "autofilter". je pense plutôt à un bug de microsoft.

en ce qui concerne "électricité": si je vois bien, tu ne nous montres pas ce que tu as essayé.
je ne comprends pas tes explications, ni pour "charge", ni pour "électricité.
peut-être préférable de partager ton fichier, et d'expliquer.
0