Pb VBA: ComboBox activant 2filtres chacun sur 2colonnes ??
Résolu
Dianex87
Messages postés
79
Date d'inscription
Statut
Membre
Dernière intervention
-
Dianex87 Messages postés 79 Date d'inscription Statut Membre Dernière intervention -
Dianex87 Messages postés 79 Date d'inscription Statut Membre Dernière intervention -
Bonjour, bonjour !
Je rencontre le souci suivant dans l'écriture d'une macro:
ma feuille HOME contient uniquement 2 boutons : "Consult" et "Edit", et c'est le 1er qui me cause des pbs.
En cliquant sur "Consult", une Combobox me demandant 1 ou 2 choix (compagnie et/ou fournisseur) s'ouvre. L'utilisateur peut sélectionner une compagnie aérienne (suggérées dans une liste) ET un fournisseur (suggérés également), ou alors seulement l'un ou l'autre.
Voici le code de cette partie qui marche bien (si ce n'est que j'aimerais que la comboBox "refuse" les requetes qui ne sont pas suggérés dans mes listes, mais c'est secondaire pour l'instant):
Une fois le choix fait, le user valide avec le bouton "OK" de la ComboBox. Normalement sur la feuille "TOPICS", je dois avoir le résultat de ce filtre simultané et non pas l'un après l'autre. Les compagnies, correspondant à la colonne D; et les suppliers, à la colonne B. Et là je cale, j'ignore comment le formaliser. J'ai pensé à qlq chose du genre:
Je ne connaissais pas du tout l'AutoFilter ni l'AdvancedFilter; aussi j'ai travaillé sur des fichiers simples pour en comprendre le fonctionnement mais ce n'est pas mieux... Je n'arrive pas à faire en sorte que le second filtre par exemple ne se fasse pas sur le résultat du 1er filter, et ainsi perdre des données . Exemple type ci-dessous dont le résultat ne donne RIEN, le filtre se fait mais je n'ai plus que mes en-têtes...:
J'avais aussi pensé un opérateur de liaison style "Operator:=xlAnd' mais de ce que j'ai trouvé ça s'utilise quand on a 2 critères de filtre sur le meme champ, ce qui n'est pas mon cas.
Par avance, merci bcp de votre aide.
Dianex
Je rencontre le souci suivant dans l'écriture d'une macro:
ma feuille HOME contient uniquement 2 boutons : "Consult" et "Edit", et c'est le 1er qui me cause des pbs.
En cliquant sur "Consult", une Combobox me demandant 1 ou 2 choix (compagnie et/ou fournisseur) s'ouvre. L'utilisateur peut sélectionner une compagnie aérienne (suggérées dans une liste) ET un fournisseur (suggérés également), ou alors seulement l'un ou l'autre.
Voici le code de cette partie qui marche bien (si ce n'est que j'aimerais que la comboBox "refuse" les requetes qui ne sont pas suggérés dans mes listes, mais c'est secondaire pour l'instant):
Private Sub UserForm_Initialize()
' Fill the ComboBox
ComboBoxSupplier.List = Array("ALL Suppliers", "B/E Aerospace", "JAMCO America", "Recaro", "Stelia", "Thompson", "ZSF", "ZSUS")
ComboBoxAirline.List = Array("ALL A/L", "AAL", "AAR", "AZU", "CAL", "CPA", "CSC", "DAL", "DLH", "ETD", "ETH", "FIN", "FWI", "HVN", "MAS", "MAU", "QTR", "SIA", "TAM", "THA")
End Sub
Une fois le choix fait, le user valide avec le bouton "OK" de la ComboBox. Normalement sur la feuille "TOPICS", je dois avoir le résultat de ce filtre simultané et non pas l'un après l'autre. Les compagnies, correspondant à la colonne D; et les suppliers, à la colonne B. Et là je cale, j'ignore comment le formaliser. J'ai pensé à qlq chose du genre:
Sans trop savoir écrire ma Macro1...
Sub ConsultOK ()
Unload Me
If ComboboxSupplier.Value = "THA"
Then call Macro1...
End If
Je ne connaissais pas du tout l'AutoFilter ni l'AdvancedFilter; aussi j'ai travaillé sur des fichiers simples pour en comprendre le fonctionnement mais ce n'est pas mieux... Je n'arrive pas à faire en sorte que le second filtre par exemple ne se fasse pas sur le résultat du 1er filter, et ainsi perdre des données . Exemple type ci-dessous dont le résultat ne donne RIEN, le filtre se fait mais je n'ai plus que mes en-têtes...:
Sub filtre()
With Sheet1
.AutoFilterMode = False
With .Range("A1:B1")
.AutoFilter
.AutoFilter Field:=1, Criteria1:="léa"
.AutoFilter Field:=2, Criteria1:="eva"
End With
End With
End Sub
J'avais aussi pensé un opérateur de liaison style "Operator:=xlAnd' mais de ce que j'ai trouvé ça s'utilise quand on a 2 critères de filtre sur le meme champ, ce qui n'est pas mon cas.
Par avance, merci bcp de votre aide.
Dianex
A voir également:
- Pb VBA: ComboBox activant 2filtres chacun sur 2colonnes ??
- 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
1 réponse
Bonsoir Diane, bonsoir le forum,
Un petit exemple en pièce jointe (que tu aurais dû fournir toi-même d'ailleurs)...
https://www.cjoint.com/c/GDAskMOQCtR
Un petit exemple en pièce jointe (que tu aurais dû fournir toi-même d'ailleurs)...
https://www.cjoint.com/c/GDAskMOQCtR
Le site cjoint.com qu'on m'a effectivement déjà suggéré par le passé est bloqué à mon boulot... J'essaie d'expliquer au mieux mais je me doute que ce n'est pas toujours evident à comprendre.
Si tu as le temps de m'expliquer 2/3 choses de la macro, je suis preneuse:
1- tout d'abord je m'étonne que tu aies nommé 2 fois la meme macro Private Sub CommandButton1_Click() dans le code de la feuille HOME et celui du USERFORM. Je pensais cela impossible car macro en doublon ?
2- l'expression CURRENTREGION correspond-elle à toutes les cellules remplies contigues de A1 ici en l'occurrence ? Donc finalement cela englobe toutes les cellules remplies de la feuille TOPICS ? Et ce serait la meme chose que si tu avais mis T.Range("B1").CurrentRegion par exemple, ou meme C5 ? Et si des lignes/colonnes contigues sont ajoutées en cours de projet, elle seront intégrées à la CurrentRegion?
3- Enfin, j'ai rajouté ALL Suppliers et ALL A/L dans mes listes de valeurs. Un user peut par exemple vouloir sélectionner tel fournisseur avec toutes les A/L. Ci-dessous la modif de code que j'ai essayée, mais qui ne remonte aucune donnée filtrée:
Une idée de ce qui ne va pas, stp ?
Merci bcp,
Diane
Première question :
Par défaut un nouveau bouton s'appelle CommandButton1, 2 3, etc. Mais un CommandButton dans un onglet a son code complètement isolé d'un CommandButton dans une UserForm. Donc il n'y a rien d'anormal à retrouver le même nom puisque VBA ne fera jamais la confusion... Les boutons dans un onglet ont leur code dans le composant VBA de l'onglet (Feuil1(Feuil1) par exemple) et ceux d'une Userform ont leur code dans le composant VBA de l'UserForm (UserForm1 par exemple).
Seconde question :
CurrentRegion correspond bien aux cellules adjacentes. Il est d'usage d'utiliser la ligne contenant les étiquettes ou en-têtes, donc la ligne 1 et la première colonne, donc la colonne A. Mais comme tu le dis, B1, aurait aussi bien fait l'affaire. Cependant. il vaut mieux éviter des cellules au milieu du tableau car si elles sont entourées de cellules vides, CurrentRegion renvoie une plage erronée. En cas de doute, teste avec un Range("Ta_Cellule").CurrentRegion.Select et vérifie que cela englobe bien tout le tableau...
Oui les lignes ajoutées seront intégrées à condition qu'il n'y ait pas une ligne complète de cellules vides séparant les données (idem pour les colonnes)
Troisième question :
J'avais supprimé les options ALL car le code commence par supprimer tous les filtres dès que l'on clique sur le bouton OK avec la ligne :
If T.FilterMode = True Then T.Range("A1").CurrentRegion.AutoFilter. Donc par défaut, c'est toujours ALL si aucune autre valeur n'est sélectionnée... Utiliser les options ALL était finalement plus compliqué à gérer...
Quant à 3- j'ai mieux saisi cette condition.
Mille mercis, encore, je marque comme résolu !
L'étoile * qui fermait mes chaines de caractère était visiblement de trop.
J'attends néanmoins tes commentaires pour les interrogations soulevées à mon precedent post, et of course si t'as des remarques sur ce code...
Merci encore!!
Diane