Ajout d'un choix dans un filtre
Résolu/Fermé
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
-
Modifié le 11 janv. 2021 à 19:06
Ramon1 Messages postés 333 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 16 juillet 2024 - 18 janv. 2021 à 18:09
Ramon1 Messages postés 333 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 16 juillet 2024 - 18 janv. 2021 à 18:09
A voir également:
- Ajout d'un choix dans un filtre
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Liste déroulante de choix excel - Guide
- Ajouter un profil netflix payant - Accueil - Guide streaming
- Ajouter un compte gmail - Guide
- Filtre teams - Accueil - Visio
7 réponses
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
Ambassadeur
1 554
Modifié le 11 janv. 2021 à 14:36
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:
si oui, veux-tu remplacer, par exemple, "Electricité" par le contenu d'une cellule?
si oui, tu peux faire, par exemple:
Criteria1:= ActiveSheet.[z123]
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
11 janv. 2021 à 18:41
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 !
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 !
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
11 janv. 2021 à 18:52
11 janv. 2021 à 18:52
tu n'as pas répondu à ma première question.
il est préférable d'éviter les select et activate.
et donc, par exemple, d'écrire
tu pourras ensuite passer aux boites de dialogue.
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.
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
Modifié le 11 janv. 2021 à 19:07
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. |
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
12 janv. 2021 à 09:17
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 !!!
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 !!!
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
12 janv. 2021 à 11:35
12 janv. 2021 à 11:35
je te demande si la macro fonctionne sans erreur.
as-tu lu les explications concernant la coloration syntaxique?
as-tu lu les explications concernant la coloration syntaxique?
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
12 janv. 2021 à 12:21
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 §
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
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
>
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
12 janv. 2021 à 12:23
12 janv. 2021 à 12:23
très bien.
as-tu essayé en utilisant le contenu d'une cellule?
as-tu essayé en utilisant le contenu d'une cellule?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
12 janv. 2021 à 13:50
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
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
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
12 janv. 2021 à 14:07
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 !
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
12 janv. 2021 à 14:56
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.
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
12 janv. 2021 à 16:01
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 :
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
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
12 janv. 2021 à 19:01
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.
je vais chercher une solution.
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
12 janv. 2021 à 19:18
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")))
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
12 janv. 2021 à 19:21
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
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
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
>
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
13 janv. 2021 à 19:17
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 !
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
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
>
Ramon1
Messages postés
333
Date d'inscription
samedi 1 octobre 2005
Statut
Membre
Dernière intervention
16 juillet 2024
13 janv. 2021 à 20:30
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
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.
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.