Liste de recherche / barre de recherche Excel
Tout est das le fichier en pièce jointe et dans la capture
Bonjour à tous,
je dispose d'un fichier excel contenant une liste de communes avec des informations associées (Onglet "BDD")
Je souhaite réalisé une sorte de fonction recherche dans le second onglet ("RECHERCHE")
En ce qui concerne cet onglet, j'ai réussi la "partie 1" mais je ne sais comment réalisé la partie 2 et 3
En clair, l'idéal serait que lorsque je tape la commune dans la partie 1, les partie 2 et 3 se mettent a jour automatiquement
Mais si pas possible, avoir la possibilité de taper manuellement ma recherche dans les parties 2 et 3 pour avoir les listes associées
Pouvez vous m'aider svp ?
D'avance je vous remercie
Bonjour,
Certain vous proposeront sûrement une solution via Power Query, qui sera meilleure que la mienne car dynamique, pour ma part je fais ça a l'ancienne avec des formules, ma solution est moins parfaite car il faut tirer les formules sur suffisamment de lignes pour tout voir apparaitre, mais ce n'est pas grave.
Voici la solution:
Non mais j'aime autant a l ancienne car c est pour du boulot et je n'ai pas accé a tout niveau logiciel, juste Excel. Je regarde votre solutions et reviens vers vous. :)
De ce que j'ai compris à partir de certaines versions d'Excel c'est déjà intégré à l'intérieur, donc pas besoin d'installer plus, mais je suis perdu sur ce sujet, JFL en parlerait sûrement mieux que moi
Petite chose à noter:
La partie marquée "ne pas toucher" sert à savoir ce que l'on cherche, en fonction de si quelque chose a été saisi manuellement dans les parties 2 et 3 ou non, j'ai trouvé ça plus simple de mettre ça à cet endroit plutôt que de complexifier encore d'avantage les longues formules que j'ai déjà créé.
ok mais cette partie n'est pas en soit utile pour le fonctionnement des partie 2 et 3 ? aucune critique de ma part, j essai de comprendre un peu le fonctionnement de votre proposition (Dsl je debute encore
Si on parle bien de la zone "ne pas toucher", elle est très utile pour les parties 2 et 3.
Vous avez demandé:
En clair, l'idéal serait que lorsque je tape la commune dans la partie 1, les partie 2 et 3 se mettent a jour automatiquement
Mais si pas possible, avoir la possibilité de taper manuellement ma recherche dans les parties 2 et 3 pour avoir les listes associées
Pour alimenter la partie 2 par exemple, on prend soit le résultat de la partie 1, soit une saisie manuelle, c'est ce à quoi sert la partie "ne pas toucher". La case A13 sert à chercher les communes associées au site de gestion. La valeur de cette case varie, si le site de gestion est renseignée manuellement en partie 2, c'est cette valeur que la case affichera, sinon, elle affichera le résultat de la recherche en partie 1.
En même temps que j'explique ça, je me dis que j'aurais pu faire ça beaucoup plus facilement, donc je m'empresse de faire ça. (enfin plus facilement, plus proprement).
Au final j'ai retourné ma veste et ai viré la zone "ne pas toucher" qui ne faisait pas propre, la nouvelle formule est à peine plus complexe que l'ancienne (ou si vous préférez, ce n'est pas ça qui va rendre la formule plus complexe qu'elle ne l'est déjà).
Le nouveau fichier:
Si vous désirez comprendre la formule, je peux tenter de l'expliquer
je te remercie, parce que je regarde un peu toutes les formules et j'ai un peu de mal a comprendre le tout
J'ai posté le fichier dans un double message
Oui la formule est complexe, j'utilise pas mal d'astuces pas simples à comprendre la première fois qu'on les croise...
Si on prend la formule pour avoir la liste des communes associées en partie 2:
=SIERREUR(INDEX(BOetCOMMUNES[[#Tout];[COMMUNES]];PETITE.VALEUR(SI(BOetCOMMUNES[[#Tout];[Site de gestion]]=SI($F$5="";$C$5;$F$5);LIGNE(BOetCOMMUNES[[#Tout];[COMMUNES]]);"");LIGNE()-LIGNE($H$4)));"")La première chose qu'on rencontre, c'est SIERREUR(), j'utilise quasiment toujours cette fonction quand je fais de la recherche, car il faut gérer le cas où l'on ne trouve rien, elle me permet d'écrire "" si c'est le cas.
A l'intérieur de cette fonction se trouve le gros de la formule, une fonction INDEX() sert à renvoyer la commune associée, son fonctionnement: on lui fourni le tableau dans lequel on veut une valeur à une position précise (ligne, colonne), ici le tableau c'est la colonne COMMUNES. Je ne précise pas le numéro de colonne qui est facultatif (dans ce cas ça prend la première colonne). Il reste donc à savoir quelle est la ligne où on doit chercher la valeur.
La ligne c'est le plus compliqué:
PETITE.VALEUR(SI(BOetCOMMUNES[[#Tout];[Site de gestion]]=SI($F$5="";$C$5;$F$5);LIGNE(BOetCOMMUNES[[#Tout];[COMMUNES]]);"");LIGNE()-LIGNE($H$4))Dans ce bloc, on retrouve pas mal de fonctions différentes, ce qu'il faut comprendre c'est que l'on traite plusieurs numéros de lignes, toutes celles qui répondent à notre critère de recherche.
Pour traiter toutes ces lignes, j'utilise PETITE.VALEUR(), qui si on lui donne une liste de valeurs, donc ici les numéros de lignes où on trouve bien notre valeur cherchée, on a plus qu'à lui dire quelle valeur on veut, la première (1), la deuxième (2), la première étant la plus petite valeur, la seconde la deuxième plus petite valeur, et ainsi de suite.
Pour savoir si on veut la 1, la 2, la 3 etc... J'utilise une petite astuce:
LIGNE()-LIGNE($H$4)le numéro de ligne de la cellule qui contient la formule, donc pour la première la 5, à laquelle je soustrait le numéro de ligne de l'en-tête, donc 4, ce qui nous donne 1, puis pour la ligne 6: 2, et ainsi de suite.
Pour avoir uniquement les numéros de lignes qui ont la valeur que l'on recherche, j'utilise ceci:
SI(BOetCOMMUNES[[#Tout];[Site de gestion]]=SI($F$5="";$C$5;$F$5);LIGNE(BOetCOMMUNES[[#Tout];[COMMUNES]]);"")La façon dont s'écrit la fonction SI est la suivante:
SI(test; valeur si vrai; valeur si faux)
Le test peut-être:
SI(Temps = pluie; je prends mon parapluie; je ne prends pas mon parapluie)
Ici je teste si le Site de gestion est bien celui que l'on cherche, il y a encore un SI() pour la valeur que l'on cherche:
SI($F$5="";$C$5;$F$5)Si l'on a pas de saisie manuelle, on prend le résultat de la partie 1, sinon on prend la saisie manuelle.
On peut donc lire:
SI(BOetCOMMUNES[[#Tout];[Site de gestion]]=SI($F$5="";$C$5;$F$5);LIGNE(BOetCOMMUNES[[#Tout];[COMMUNES]]);"")Comme ceci pour chaque ligne
Si le site de gestion correspond à ce qui est cherché, je renvoie mon numéro de ligne, sinon je renvoie "".
J'espère que mes explications auront plus un peu éclaircir ce que j'ai fait
je commence a comprendre merci pour ces explications détaillées c est cool et ça fait progresser
Aurais tu une idée pour pour affichée la couleur associé (Z.RVA) que l'on retrouve dans l'onglet BDD vers l'onglet RECHERCHE, dans la cellule D5 (PARTIE 1) et sur toutes la liste en I5 et+ (PARTIE 2) et M5 et+ (PARTIE 3)
via une mise en forme conditionnelle ou une autre astuce.... dont tu as le secret ?
Pour afficher en couleur, les mises en forme conditionnelles me semblent un bon choix, je les ai appliqué:
merci beaucoup c est top !