VBA : appliquer plusieurs filtres avec des cases à cocher [Résolu/Fermé]

Signaler
Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
-
Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
-
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

2 réponses

Messages postés
394
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
22
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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
2
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 :)
Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
2
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...
Messages postés
394
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
22
Au début du code, on initialise Filtre à False

Private Sub CheckBox1_Click()
A = "n'importe quoi "
B = "n'importe quoi"

Filtre = False


Et notre Critère se fait "écrasé" à chaque fois.
Donc si l'on met ce code à tout les checkbox, à chaque fois, il devrait se produire quelque chose.

S'assurer que les noms soit identique. Si tu ajoutes et enlèves des checkbox, il peut avoir le nom checkbox3 ou autre. Donc s'assurer de modifier le nom des contrôles pour rencontrer le nom que tu utilises.

Si ça ne fonctionne toujours pas, assure toi et faire une trace.
Tu cliques dans la marge gauche de ton code pour mettre un point rouge. Idéalement à
Filtre = False

et tu fait F8 pour executer le code ligne par ligne.
Cela te permet de voir s'il entre dans les IF quand les cases sont cochées.

La trace pas à pas, c'est l'outil ultime de débuggage.
Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
2
Effectivement, en réalité ça fonctionne parfaitement, le problème que j'avais soulevé n'en était pas un. Je n'aurais jamais pensé à faire appel à la fonction split pour déterminer le critère, merci beaucoup !

Ma première idée était de déclarer une variable =Array() qui servirait de critère, et dans laquelle chaque checkbox aurait stocké ou retiré le contenu de sa variable locale ; mais j'avoue que je ne sais pas en VBA passer ou retirer du contenu dans un array déjà existant.

En tout cas mon problème est résolu.
Messages postés
394
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
22
Oh, j'avais manqué une de tes questions
- Pourquoi y-a-t-il deux paires de guillemets autour des codes postaux que tu fais rentrer dans le critère ?

Même si c'est maintenant hors sujet.
Les guillemets sert à délimité le texte d'une variable.
Text = "Hello"
text contient : Hello

Mais si l'on veut passer un guillmet lui-même, il faut le doubler.
Text = "Hello ""TOUT"" le monde"
text contient: Hello "TOUT" le monde

Donc 3x guillement de suite, le premier sert à délimité le debut de la chaine de texte, le deuxième indique que le troisième est interprété comme du texte et non pas un délimiteur.
Text = """Hello """
text contient : "Hello"

On pourrait aussi utiliser Chr(34) pour passer un guillemet.
text = chr(34) & "Hello" & chr(34)
text contient : "Hello"
Messages postés
71
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
17 mars 2015
2
Merci beaucoup pour cette précision ! Le fichier excel que j'ai créé grâce à cette macro fonctionne parfaitement, et j'ai les éléments de compréhension pour le modifier ou le complexifier un peu au besoin :)