VBA : appliquer plusieurs filtres avec des cases à cocher
Résolu
AnDao
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
AnDao Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
AnDao Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai sur excel une liste de codes postaux que je souhaite répartir par zone géographique, en appliquant un filtre complexe via une macro VBA.
En cochant la case "Beaujolais" par exemple, l'utilisateur pourra faire en sorte que seules les lignes contenant un code postal identifié comme beaujolais s'affiche. Pour cela pas de problème, ainsi que pour la remise en place de la liste complète une fois la case décochée.
Ce que je ne sais pas faire en revanche, c'est additionner les critères si deux cases sont cochées.
Admettons par exemple que notre liste soit composée de tous les codes postaux du rhône. Comment faire si l'utilisateur souhaite cocher les deux cases "beaujolais" et "grand lyon" par exemple ?
Voici le code que j'ai actuellement, pour une seule case à cocher qui filtre sur trois codes postaux à titre d'exemple :
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9, Criteria1:=Array("69001", "69002", "69003"), Operator:=xlFilterValues
If CheckBox1.Value = False Then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9
End Sub
Voilà, donc l'idée c'est de créer une checkbox2 qui prendrait en compte le filtre déjà actif pour ajouter ses propres critères (disons par exemple le reste de la ville de Lyon : Array("69004", "69005", "69006, "69007", "69008", "69009")
Merci d'avance pour votre aide !
Cordialement
J'ai sur excel une liste de codes postaux que je souhaite répartir par zone géographique, en appliquant un filtre complexe via une macro VBA.
En cochant la case "Beaujolais" par exemple, l'utilisateur pourra faire en sorte que seules les lignes contenant un code postal identifié comme beaujolais s'affiche. Pour cela pas de problème, ainsi que pour la remise en place de la liste complète une fois la case décochée.
Ce que je ne sais pas faire en revanche, c'est additionner les critères si deux cases sont cochées.
Admettons par exemple que notre liste soit composée de tous les codes postaux du rhône. Comment faire si l'utilisateur souhaite cocher les deux cases "beaujolais" et "grand lyon" par exemple ?
Voici le code que j'ai actuellement, pour une seule case à cocher qui filtre sur trois codes postaux à titre d'exemple :
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9, Criteria1:=Array("69001", "69002", "69003"), Operator:=xlFilterValues
If CheckBox1.Value = False Then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9
End Sub
Voilà, donc l'idée c'est de créer une checkbox2 qui prendrait en compte le filtre déjà actif pour ajouter ses propres critères (disons par exemple le reste de la ville de Lyon : Array("69004", "69005", "69006, "69007", "69008", "69009")
Merci d'avance pour votre aide !
Cordialement
A voir également:
- VBA : appliquer plusieurs filtres avec des cases à cocher
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
2 réponses
Je crois qu'il serait opportun d'ajouter ton fichier, s'il ne contient pas d'informations confidentielles, pour que l'on puisse se faire une meilleur idée.
Tu peux le mettre en ligne via cjoint
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
Tu peux le mettre en ligne via cjoint
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
Bonjour,
Merci de ta réponse. Cependant, mon fichier n'existe pas encore, c'est une extraction de ma base de données que je ne ferai qu'après avoir validé deux trois précisions avec mes collègues.
Mais dans un premier temps on peut envisager travailler sur une liste exhaustive des communes du Rhône avec codes postaux, que nous allons répartir par zones géographiques.
Je peux cependant répondre à toutes questions si ma demande n'est pas assez claire :)
Merci de ta réponse. Cependant, mon fichier n'existe pas encore, c'est une extraction de ma base de données que je ne ferai qu'après avoir validé deux trois précisions avec mes collègues.
Mais dans un premier temps on peut envisager travailler sur une liste exhaustive des communes du Rhône avec codes postaux, que nous allons répartir par zones géographiques.
Je peux cependant répondre à toutes questions si ma demande n'est pas assez claire :)
Quelque chose comme
Dim critere as string
Dim filtre as boolean
Private Sub CheckBox1_Click()
Critere = ""
Filtre = false
If CheckBox1.Value = True Then
Critere = critere & """69001"", ""69002"", ""69003"""
Filtre = true
end if
If CheckBox2.Value = True Then
Critere = critere & """69004"", ""69005"", ""69006"""
Filtre = true
end if
if filtre = true then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9, Criteria1:=Array(critere), Operator:=xlFilterValues
else
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9
end if
End Sub
Mettre idem dans le click du checkbox 2
Peut-être quelques petites erreur ci et la, mais ca donne une ligne directrice générale.
Dim critere as string
Dim filtre as boolean
Private Sub CheckBox1_Click()
Critere = ""
Filtre = false
If CheckBox1.Value = True Then
Critere = critere & """69001"", ""69002"", ""69003"""
Filtre = true
end if
If CheckBox2.Value = True Then
Critere = critere & """69004"", ""69005"", ""69006"""
Filtre = true
end if
if filtre = true then
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9, Criteria1:=Array(critere), Operator:=xlFilterValues
else
ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9
end if
End Sub
Mettre idem dans le click du checkbox 2
Peut-être quelques petites erreur ci et la, mais ca donne une ligne directrice générale.
Merci ! Juste quelques questions pour comprendre ce code...
- Quelle est la valeur du & ? Elle ajoute des valeurs à celles déjà existantes dans la variable ?
- Pourquoi y-a-t-il deux paires de guillemets autour des codes postaux que tu fais rentrer dans le critère ?
Si je comprends ça je pense pouvoir me dépatouiller.
Super aide en tout cas.
- Quelle est la valeur du & ? Elle ajoute des valeurs à celles déjà existantes dans la variable ?
- Pourquoi y-a-t-il deux paires de guillemets autour des codes postaux que tu fais rentrer dans le critère ?
Si je comprends ça je pense pouvoir me dépatouiller.
Super aide en tout cas.
Oh, c'est un peu moins simple que j'avais prévu, les vecteurs (arrays), ne se concatène pas comme une vulgaire chaine texte :)
Il y a des fonction qui permet de jumeler des vecteurs, mais pour un vecteur à une seule dimension, le code suivant devrait fonctionner :
Les variable A et B sont initialisé avec "n'importe quoi". C'est qu'il faut les réinitialisé, et si on les initialise vide, alors une case sans code postal pourrait s'afficher. Donc on peut mettre n'importe quoi en autant que ca ne corresponde pas à une valeur de code postal possible.
Il y a des fonction qui permet de jumeler des vecteurs, mais pour un vecteur à une seule dimension, le code suivant devrait fonctionner :
Dim Filtre As Boolean Dim A As string Dim B As string Dim Critere() As String Private Sub CheckBox1_Click() A = "n'importe quoi " B = "n'importe quoi" Filtre = False If CheckBox1.Value = True Then A = "69001,69002,69003" Filtre = True End If If CheckBox2.Value = True Then B = "69004,69005,69006" Filtre = True End If If Filtre = True Then Critere = Split(A & "," & B, ",") ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9, Criteria1:=Critere, Operator:=xlFilterValues Else ActiveSheet.Range("$A$1:$L$100").AutoFilter Field:=9 End If End Sub
Les variable A et B sont initialisé avec "n'importe quoi". C'est qu'il faut les réinitialisé, et si on les initialise vide, alors une case sans code postal pourrait s'afficher. Donc on peut mettre n'importe quoi en autant que ca ne corresponde pas à une valeur de code postal possible.
Je suis content, je comprends tout :p
Un seul petit souci dans ce code : CheckBox1 et CheckBox2 modifient la même variable booléenne, Filtre. En se contentant d'appliquer ce code à mes deux checkboxes, l'intégralité du code s'exécute à la première case cochée, et Filtre reste True tant qu'elle l'est.
Cocher la seconde case ne produit alors plus d'effet.
Je vais donc essayer de créer une troisième case qui appliquera le filtre en fonction des deux premières... j'ai bien dit je vais essayer lol
A suivre...
Un seul petit souci dans ce code : CheckBox1 et CheckBox2 modifient la même variable booléenne, Filtre. En se contentant d'appliquer ce code à mes deux checkboxes, l'intégralité du code s'exécute à la première case cochée, et Filtre reste True tant qu'elle l'est.
Cocher la seconde case ne produit alors plus d'effet.
Je vais donc essayer de créer une troisième case qui appliquera le filtre en fonction des deux premières... j'ai bien dit je vais essayer lol
A suivre...