Liste filtrée

Bonjour,

Sur le classeur précédent, je souhaiterais sur la Feuille 1, en E8, générer une liste basée sur les données présentes sur la Feuille 2.

Je m'explique : lorsque sur la Feuille 1, on choisit un nom en E5, il faudrait que la liste en E8 contienne exclusivement les activités correspondant aux noms (sur la Feuille 2).

Pourriez-vous m'expliquer comment s'y prendre svp ? S'il s'agit de formules matricielles à mettre en place (si on pouvait éviter.. ), j'aimerais avoir quelques détails sur la façon de les taper svp, car je ne les maîtrise pas (ceci est un classeur exemple, au final j'appliquerai votre méthode sur un autre classeur).

De plus, est-il possible de ne rien rajouter sur la Feuille 1 (j'entends par là d'éventuelless infos intermédiaires pour parvenir au résultat) ?

Merci d'avance.

P.S.: j'ai déjà posé mon problème sur un autre forum, mais je n'ai pas bien saisi l'explication qui m'a été fournie, je me tourne donc vers vous.

31classeur1.xlsx (13.59 Ko)

Bonjour,

J'ai peur de ne pas bien saisir votre demande.

Les activités sont elles possibles pour chaque individu ? Si oui... une simple liste "activité" suffira.

Si seulement certaines activités sont possibles pour un individu... quelle est la règle d'affectation ? Et quelles sont ces activités ?

Cordialement.

JFL

Bonjour JFL,

Je n'ai en effet sûrement pas été très clair.

Je vais reprendre mon exemple présent sur le fichier joint.

Sur la Feuille 1 en E5, si on sélectionne "Max", je souhaite que la liste en E8 comprenne les Activités "Tennis" et "Baseball" uniquement. De même, si on sélectionne "Zena", la liste devra uniquement être composée de "Foot" et de "Basket". Enfin, si c'est "Carole" qui est sélectionnée, on devra avoir "Karaté" dans la liste.

Est-ce plus clair ?

bonjour

je crois avoir deviné ceque tu desires

67m-tix.zip (10.09 Ko)

je t'ai mis qques explications

tu as de la chance car la formule principale n'est pas matricielle

cordialement

Je vous propose une approche différente de celle de tulipe_4.

Ma solution est basée sur des listes nommées d'activités.

On pourra, le cas échéant, appréhender ces listes de manière dynamique.

Maintenant.... à vous de voir celle qui convient le mieux à votre besoin.

Cordialement.

JFL

Bonsoir à tous,

Autre solution avec Filtre,

compléter ou modifier les colonnes "A:B" dans la feuille "Base"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim f1 As Worksheet, f2 As Worksheet
  If Not Application.Intersect(Target, Range("e5")) Is Nothing Then
    Application.ScreenUpdating = False
    Set f1 = Sheets("Feuil1")
    Set f2 = Sheets("base")
        If Target.Count > 1 Then Exit Sub

    f1.Range("k2") = "=Base!b2=Feuil1!e5"
    f2.Range("a1:b" & f2.[a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    f1.Range("k1:k2"), CopyToRange:=f1.Range("d8"), Unique:=False
    f1.Range("k2").ClearContents
  End If
End Sub

Amicalement

Claude

42m-tix-filtre.xlsm (26.76 Ko)

Bonsoir,

Merci à vous tous pour vos réponses !

@tulipe_4 : Feuille 2, pour les formules matricielles présentes sur la colonne jaune, comment fais-tu pour les rentrer ? J'essaie de l'appliquer à un autre classeur, et je ne parviens à rentrer que la formule, sans les accolades..

@dubois : pas mal cette solution avec une macro, j'y avais aussi pensé. Seulement, au lieu d'obtenir une activité / cellule, peut-on avoir le résultat dans une liste ?

@JFL : un détail m'ennuie avec ta solution, c'est le fait que tu aies au préalable ranger les activités par nom sur la feuille de données... Dans mon cas, j'aurai les données comme je les aies exposées, en deux colonnes, et je ne souhaite pas changer cela..

Merci d'avance !

re

la formule de la colonne est en effet uneformule matricielle; pour pour que les accolades se mettent automatiquement ;il faut la valider de maniere speciale

1) dans la barre de formule tu mets le curseur au bout de la derniere parenthese

2) tu appuies sue les touches Ctrl maj Entrée en meme temps (c'est un peu sportif)

je te rapelle que cette formule ne sert qu'a faire une liste sans doublon et; c'est tres important la 1ere celuule doit etre vide (h1) dans le modele; sinon ça ne marche pas ; de plus le critere en G1 (SOMMOEPROD( 1/NB.SI........ est important car cela permet de limiter le nombre de valeur de la liste ainsi obtenu au nombre exact de valeur unitaires

ensuite l'autre "grande" formule agit comme un filtre ;

en esperant avoir fait avancer ton ouvrage

ps j'avais aussi pensé a changer la presentation comme jfl parce que c'est plus simple

si tu n'arrives pas a extraire , je peux te fournir un truc encore plus simple mais il y aura une colonne a masquer

cordialement

Merci pour le complément d'infos tulipe_4

J'ai fini par m'en sortir au final, du moins je pense. Par contre, ça semble quand même fonctionner lorsque je mets un en-tête dans la première cellule...

Une autre question, plutôt esthétique qu'autre chose : comment faire pour obtenir une liste sans les "blancs" ? Dans l'état actuel des choses, la liste générée tient compte des cellules où le résultat des formules est "". Peut-on éviter qu'elles soient prises en compte ?

Bonne nuit !

Bonjour,

toujours avec filtre,

Private Sub Worksheet_Change(ByVal Target As Range)
Dim f1 As Worksheet, f2 As Worksheet
  If Flag Then Exit Sub
  If Not Application.Intersect(Target, Range("e5")) Is Nothing Then
    Application.ScreenUpdating = False
    Set f1 = Sheets("Feuil1")
    Set f2 = Sheets("base")
        If Target.Count > 1 Then Exit Sub
    Flag = True
        Range("e8").ClearContents
    Flag = False
    f1.Range("k2") = "=Base!b2=Feuil1!e5"
    f2.Range("a1:b" & f2.[a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    f1.Range("k1:k2"), CopyToRange:=f2.Range("e1"), Unique:=False
    f1.Range("k2").ClearContents
  End If
End Sub

Bonne journée

Claude

Bonsoir !

Merci dubois pour ta réponse, finalement je vais conserver ta solution, elle me plaît !

Par contre, j'ai plusieurs questions. Tout d'abord, je ne comprends pas comment le filtre agit via la ligne :

f2.Range("a1:b" & f2.[a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    f1.Range("k1:k2"), CopyToRange:=f2.Range("e1"), Unique:=False

Je n'ai en fait pas bien compris le rôle de k1 et k2 sur la première feuille... Peux-tu m'en dire plus stp ?

Dernière question : je souhaite ajouter une autre liste sur une autre cellule (en e10 par exemple). Je m'explique. Sur la feuille Base, j'ai rajouté des éléments sur la colonne C (catégorie). Je souhaiterais voir apparaître sur la feuille 1, en plus de la liste actuelle en e8, une autre liste en e10 regroupant les activités (avec le même filtre sur le prénom en e5 Feuille 1), mais filtrées sur la catégories "Jeunes". J'ai essayé en tentant de suivre la méthode que tu as appliquée, en vain.. Peux-tu de nouveau m'aider pour cela stp ?

Merci d'avance.

Bonjour

Je me permets de relancer ma requête, j'ai reessayé, en vain... :

Merci d'avance !

Bonjour à tous,

Il y a plusieurs façons de faire un moteur de recherche,

ceci en est une (un peu bâtarde), tout dépend de l'usage souhaité.

Je n'ai en fait pas bien compris le rôle de k1 et k2 sur la première feuille... Peux-tu m'en dire plus stp ?

Range("k2") est une formule de critère de filtre, comme c'est une formule k1 doit resté vide,

Ici, j'ai mis K1:K2 mais cela aurait pu être n'importe où (suivant disponibilité).

Tu pourrai aussi voir avec une recherche sur "Listes en cascade"

Amicalement

Claude

Bonjour dubois !

Merci de m'avoir répondu, et pour ton explication.

Je viens de regarder le fichier joint, et on est presque à ce que je souhaite ! En réalité, je souhaitais

* Conserver la liste qui trie les activités uniquement en fonction du prénom (comme le fait très bien ton fichier précédent ton dernier post)

* Ne pas proposer l'utilisateur de choisir dans une liste Jeunes ou Vétérans, j'aimerais faire la sélection directement dans le code (prenons Jeunes par exemple).

* Au final, sur la première feuille, j'aimerais qu'on ait : une liste de prénom, et deux autres listes, la première étant la liste des activités filtrées selon le prénom choisi par l'utilisateur, et la seconde une liste de ces mêmes activités (donc celles déjà filtrées par le prénom), uniquement pour la catégorie Jeunes.

N'hésite pas à me dire si je ne suis pas clair. Et désolé de t'importuner une fois encore !

Merci d'avance.

re,

Pas sûr d'avoir bien compris !

donc tu n'aurai que 2 listes,

1) nom

2) activités (pour jeunes uniquement), les vétérans étant ignorés

c'est çà ?

Claude

Non, 3 listes :

1) noms

2) activités (celles pour le nom sélectionné, mais pour jeunes uniquement)

3) activités (toutes celles pour le nom sélectionné)

re,

Vois si çà convient

Private Sub Worksheet_Change(ByVal Target As Range)
Dim f2 As Worksheet
    Set f2 = Sheets("base")
  If Flag Then Exit Sub
    Application.ScreenUpdating = False

  If Not Application.Intersect(Target, Range("e5")) Is Nothing Then
  '------- filtre activités -----------------------
        If Target.Count > 1 Then Exit Sub
    Flag = True                                                     'annihile le Private Sub
        Range("e8,e10").ClearContents
    Flag = False                                                    'réactive le Private Sub
    Range("k2") = "=Base!b2=Feuil1!e5"                              'critère filtre
    f2.Range("a1:c" & f2.[a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("k1:k2"), CopyToRange:=f2.Range("e1"), Unique:=False
  '------- filtre activités jeunes --------------------------
    Range("k2") = "=and(Base!b2=Feuil1!e5,Base!c2=""Jeunes"")"      'critère filtre
    f2.Range("a1:c" & f2.[a65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("k1:k2"), CopyToRange:=f2.Range("g1"), Unique:=False
    Range("k2").ClearContents
  End If
End Sub

Claude

C'est parfait ! Merci beaucoup.

Et, une questions "bonus", pour le côté esthétique : pour les listes obtenues, est-il possible d'obtenir une pré-sélection en tapant la première lettre (par exemple pour les prénoms, si on tape "m", la liste de positionne aux prénoms commençant par un "m") ?

Bonne nuit !

Bonjour à tous,

Sans toucher aux macros, modifier uniquement la formule dans "Données Validation" Nom en E5

formule Liste Validation "Nom"

=DECALER(Nom;EQUIV(E5&"*";Nom;0)-1;0;NB.SI(Nom;E5&"*"))

(décocher les messages d'erreur)

ne pas oublier de lancer la macro "Sub MiseAjour_ListeNoms()" si modif ou ajout dans Base.

Amicalement

Claude

Bonjour !

Une fois encore, c'est exactement ce que je souhaitais, merci beaucoup !

Rechercher des sujets similaires à "liste filtree"