Ajout d'un choix dans un filtre [Résolu]

Signaler
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
-
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
-
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

7 réponses

Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
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]
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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 !
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
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.
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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.
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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 !!!
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
je te demande si la macro fonctionne sans erreur.
as-tu lu les explications concernant la coloration syntaxique?
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
>
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021

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
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785 >
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

très bien.
as-tu essayé en utilisant le contenu d'une cellule?
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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 !
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
tu n'as pas montré comment tu avais modifié la macro pour les dates, ni ce que tu as mis dans les cellules correspondantes.
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
>
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785 >
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

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.
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
>
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021

Bonjour,
je reviens vers toi, j'ai bien avancé avec tes conseils et j'ai réussi à automatiser mes macros en utilisant un contenu de cellule pour chaque macro ou je souhaite modifier un choix.
J'ai donc 5 macros avec des filtres pour afficher des résultats en fonction de 1 ou plusieurs critères qui peuvent changer évidemment :
- 1ère macro ramenant les résultats en fonction des dates du .. au ... et d'une catégorie
- 2ème macro ramenant les résultats en fonction des dates du .. au .., d'une catégorie et d'une sous-catégorie
- 3ème macro ramenant les résultats en fonction des dates du .. au .., et d'un tiers
- 4ème macro permettant d'insérer des échéances mensuelles à la 1ère cellule vide de la colonne A
- 5ème macro permettant de reclasser toutes les lignes en ordre de date croissante
Donc cette procédure suppose que l'utilisateur a bien alimenté les critères correspondant à chaque macro, et j'ai ajouté un message d'erreur pour l'inciter à le faire.
Donc à force de travail et de recherche on trouve bcp de chose sur internet, mais pour un débutant ça prend du temps de comprendre la syntaxe ...
Mais j'ai bien conscience que c'est un peu du bricolage, mais ça a le mérite de fonctionner !!
Ce que j'aimerais bien, c'est que la demande de choix des critères soit inclus dans la macro avec une boite de dialogue comportant un, ou plusieurs critères à alimenter et dépendant chacun d'une liste déroulante qui sont dans la feuille "liste".
J'ai commencé à creuser le problème, et je pense qu'il faut passer par une "user form", et une boite de dialogue combobox, mais là j'aurais bien aimé de l'aide, j'ai du mal à tout comprendre.
Est-ce faisable avec ton aide ???
J'espère être assez clair.
Je te joins mon fichier : www.grosfichiers.com/jgQbbvMPhjq
Les feuilles sont protégées mais sans mot de passe pour le moment.
Pour info ma version d'excel est celle de 2007... j'imagine que depuis il y a eu bcp de mises à jour ...
Merci encore pour ton aide
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785 >
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021

j'utilise très très peu les userform, je suggère que tu crées une nouvelle discussion à ce sujet.
je pense que d'autres t'aideront mieux pour la partie "présentation" et interface via userform.
je pense qu'une ancienne version de Excel est tout-à-fait adaptée pour ceux que tu fais, et que, dans ce domaine, rien n'a changé.
Messages postés
282
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2021
>
Messages postés
13964
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021

Ok, merci quand même pour ton aide, je clôture la discussion