Afficher une série de lignes en fonction d'un choix

Salut les Excel Maniacs !

Voici mon problème :
J'ai une liste de métiers avec des compétences liées au métier, dans un tableau.
Exemple :
Colonne 1 : Bûcheron
Ligne 1 : Couper
Ligne 2 : Scier
Ligne 3 : Mettre des chemises à carreau
Colonne 2 : Pompier
Ligne 1 : Poser pour un calendrier
Ligne 2 : Eteindre un feu
Ligne 3 : Lancer la sirène

J'aimerais, sur un autre onglet, avoir une première cellule où je choisis le métier dans une liste déroulante, et en fonction du métier choisi, les compétences liées s'affichent dans les lignes en dessous.

Est-ce que j'ai été assez clair ?
En gros, comment remplir toute une série de lignes, en fonction d'un choix dans une cellule.
On est carrément dans de la gestion de base de données mais est-ce possible en passant par des formules conditionnelles par exemple ?
(Sachant que j'ai 23 métiers, que chaque métier n'a pas le même nombre de compétences, et que ça peut aller jusqu'à 70 compétences pour un métier)

Merci !!!

Bonjour Milesd, bonjour le forum,

Pour te répondre il nous faut tester et pour tester il faut un fichier... Tu acceptes un résultat par macro (VBA) ?

Bonsoir,
ThauThème bonsoir,

ci joint une proposition :

2test-loureed.xlsx (10.56 Ko)

@ bientôt

LouReeD

Bonjour à tous,

Je n'avais pas vu les notifications de réponses. Merci !
La solution de @LouReed semble fonctionner, même si je ne comprends pas bien la construction de la formule

Bonsoir,

Création d'un tableau structuré nommé "Source" afin d'ordonner les informations de chaque emploi en colonne.
En cellule E1 une validation de données avec une liste de choix qui correspond à la plage des entêtes du tableau.
Sur les quelques lignes en dessous de E2 à E10, mise en place d'une formule avec RECHERCHEH, cette fonction va faire une recherche horizontale d'une donnée sur la première ligne d'une plage (ici la plage correspond au tableau créé) et elle va renvoyer la donnée se trouvant dans la colonne trouvée au numéro de ligne demandée : RECHERCHEH(la donnée à chercher ; plage de la matrice de recherche ; numéro de ligne de la matrice à renvoyer ; paramètre afin de régler la finesse de recherche), donc :
- la valeur à chercher en horizontal de la plage de cellule A1:B4, qui n'est autre que le tableau "Source", se trouve en E1, afin de rendre cette formule copiable vers le bas on verrouille la référence à E1 en ajoutant des "$" : E$1 (ici on verrouille seulement la ligne.
- la plage de la matrice pour la recherche est A1:B4 soit le tableau structuré nommé "Source" avec l'argument [#Tout"] afin d'indiquer qu'on prend en compte la totalité du tableau c'est à dire les données mais aussi l'entête !
- la ligne de la donnée à renvoyer pour la première formule est la 2, mais ici pour rendre la formule copiable vers le bas, j'ai remplacé le 2 par l'instruction LIGNE() qui renvoi le numéro de ligne de la feuille Excel où se trouve cette instruction. Ici l'instruction se trouve en ligne 2 de la feuille, donc on renvoie bien la donnée se trouvant en ligne 2 de la matrice (du tableau).
- 0 ou FAUX afin de signaler que nous faisons une recherche à valeur Exact, c'est à dire que dans la ligne d'entête du tableau on recherche exactement la valeur se trouvant en E$1.

Ceci donne cette formule en E2 : =RECHERCHEH(E$1;Source[#Tout];LIGNE();0)
Grâce à la valeur variable ligne et au $ avant le 1 de E$1, lorsque l'on tire la formule vers le bas en ligne 3 de la feuille en E3,
on a : =RECHERCHEH(E$1;Source[#Tout];LIGNE();0), ce qui ne change pas mais ici LIGNE() vaut 3.

Ceci affiche une erreur de type #N/A si rien n'est trouvé (par exemple ici le tableau réponse contient plus de lignes que le tableau, donc la formule en ligne 5 de la feuille provoque une erreur du fait que la formule demande de renvoyer la valeur de la 5ième ligne du tableau alors qu'il n'y en a que 4, donc "non apprécié".
Pour éviter cet affichage en attendant d'agrandir le tableau, j'ai utilisé la fonction SIERREUR qui permet d'afficher ou de faire autre chose en cas d'erreur sur le premier argument : SIERREUR(premier argument; alors faire ceci)
=SIERREUR(maformule; alors afficher un tiret) =SIERREUR(RECHERCHEH(E$1;Source[#Tout];LIGNE();0);"-")

@ bientôt

LouReeD

Alors là franchement merci !
Impressionnant ! Et l'ajout du SIERREUR pour que la ligne soit "propre" en cas d'absence d'info, c'est la cerise sur le gâteau.
Bon en revanche, ça ne marche pas totalement chez moi. Faut dire que j'ai environ 23 métiers. Je ne peux partager mon fichier d'origine mais voici un essai que j'ai fait, et ça plante juste pour le dernier métier. Bizarre...

Si vous pouvez m'aider encore un peu ;-)

11essai-me-tiers.xlsx (11.18 Ko)

Bonsoir,

vous avez oubliez l'argument "Faux" en quatrième position de RECHERCHEH !
En cas d'omission c'est une recherche approximative qui est faite et sur un tri croissant, donc en choisissant Drh, la fonction s'arrête à "C" de comptable car "C" est le plus proche de D par rapport à la valeur suivante qui est Juriste.

En général je mets FAUX = exact cela évite de devoir trier le tableau par ordre croissant, mais dans certain cas on doit trouver quoi qu'il en soit une valeur donc VRAI et approximative par ordre croissant des données.

Modification de la formule pour gérer les "0" en cas de non présence de données en ajoutant la fonction SI :
=SIERREUR(SI(RECHERCHEH($F$1;Tableau1[#Tout];LIGNE();0)=0;"-";RECHERCHEH($F$1;Tableau1[#Tout];LIGNE();0));"-")

@ bientôt

LouReeD

Alors là j'aimais déjà Lou Reed, mais là, une raison de plus de me plonger dans sa discographie

Merci encore pour la qualité et la précision de tes réponses ! Tu arrives même à expliquer exactement pourquoi ça ne marche pas !

Tout fonctionne désormais !

Merci encore

Bonjour,

Merci pour votre retour et remerciements !

Ceci dit, pour votre cas, peut être que des experts en PowerQuery vous simplifiraient ceci avec des requêtes adequates, mais là je n'y connais rien.

@ bientôt

LouReeD

Rechercher des sujets similaires à "afficher serie lignes fonction choix"