Aide pour comprendre une formule

Bonjour,
Je vous ai sollicité pour obtenir dans un onglet une extraction d'une base.
Vous m'aviez renvoyé cette solution, qui correspond tout à fait à mes attentes. Malheureusement, je ne comprends pas l'intégralité de la formule et n'arrive pas l'adapter à d'autres demandes.
est ce que quelqu'un pourrait m'aider à la comprendre svp ?

SI(LIGNES($1:1)<=NB.SI(TS_data;$A$1);INDEX(MesData;PETITE.VALEUR(SI(TS_data=$A$1;LIGNE(INDIRECT("1:"&LIGNES(TS_data))));LIGNES($1:1));1);"")

vous remerciant par avance pour votre aide

CH

6 réponses

  1. bonjour,

    voici le lien pour avoir le fichier sur excel

    https://www.cjoint.com/c/LAyjguxddru

    Merci encore pour votre aide

    CH
    0
    1. Bonjour,

      Un fichier EXCEL (test ou non), complété par des explications exhaustives et des exemples remplis à la main, mis sur https://www.cjoint.com/ , ainsi que ta version d'Excel, permettrait aux intervenants de répondre plus précisément à ta question.
      Crdmt
      0
      1. bonjour,

        Merci pour tes réponses et d'essayer de me dépanner.
        même avec les $ ca ne marche pas.
        voici l'image de mon fichier. je n'arrive pas à le joindre en excel.



        je souhaiterai un onglet qui récupère les données des lignes qui ont "oui" dans consultation palais.

        Le tableau "base de données" peut comporter 300 lignes. l'onglet "consultation palais" une cinquantaine.
        et il me faut réussir à le faire en automatique, pas par un filtre, car je suis la "conceptrice" mais les utilisateurs ne connaissent pas bien excel et surtout pas les filtres.

        il faut donc que j'arrive à leur extraire automatiquement l'onglet avec les données dont ils ont besoin.

        merci beaucoup pour ton aide

        bonne journée

        BFCH
        0
        1. ca me mets #ref!

          et non, les explications m'aide à comprendre la formule et justement je ne comprends pas pourquoi ca ne fonctionne pas.

          en tous les cas merci d'avoir pris le temps d'y répondre

          bonne soirée
          0
          1. mets ton fichier sur le forum, on regardera ensemble

            il me semble qu'il manque des $ dans le indirect
            LIGNE(INDIRECT("$1:$"&LIGNES(Tableau3[Consultation_palais]))))
            Sinon, tes lignes bougent quand tu descends ta formule

            Crdlmt
            0
        2. merci beaucoup pour ces explications.
          Mais suis désolée, d'insister, je voulais créer une nouvelle liste des mes data mais cette fois qui répondent aux conditions consultations palais oui.
          la liste que j'obtiens : 1er nom puis #Nombre!
          je ne vois pas ce qui ne colle pas
          SI(LIGNES($1:1)<=NB.SI(Tableau3[Consultation_palais];$A$1);INDEX(MesData;PETITE.VALEUR(SI(Tableau3[Consultation_palais]=$A$1;LIGNE(INDIRECT("1:"&LIGNES(Tableau3[Consultation_palais]))));LIGNES($1:1));1);"")

          si vous avez la possibilité de m'aider à nouveau je vous en remercie.

          bonne journée

          BFCH
          0
          1. Ce n'est pas moi qui t'ai fait cette formule, je te l'ai simplement expliquée (Mal apparemment !)
            C'est quoi le ;1) a la fin ?
            essaye
            SI(LIGNES($1:1)<=NB.SI(Tableau3[Consultation_palais];$A$1);INDEX(MesData;PETITE.VALEUR(SI(Tableau3[Consultation_palais]=$A$1;LIGNE(INDIRECT("1:"&LIGNES(Tableau3[Consultation_palais]))));LIGNES($1:1)));"")

            Crdlmt
            0
        3. Bonjour à tous,
          SI(LIGNES($1:1)<=NB.SI(TS_data;$A$1);INDEX(MesData;PETITE.VALEUR(SI(TS_data=$A$1;LIGNE(INDIRECT("1:"&LIGNES(TS_data))));LIGNES($1:1));1);"")

          SI(LIGNES($1:1)<=NB.SI(TS_data;$A$1) ==>""
          la formule fonctionne pour les lignes auxquelles elle s'applique, sinon, elle renvoie ""
          peut etre remplacé par sierreur(formule;"").
          on va ranger dans une autre liste les celules qui repondent a la condition, ici TS_data=$A$1
          Pour les ranger il faut un ordre
          Cet ordre, c'est LIGNES($1:1)
          on aura petite.valeur(plage;1, puis 2 (lignes($1;2), etc au fur et a mesure qu' on descend la formule quand il n'y en aura plus, on aura une erreur et le sierreur donnera le ""

          LIGNE(INDIRECT("1:"&LIGNES(TS_data)))
          Pour compter les valeur de la lise a traiter, il faut savoir combien il y a de lignes
          si par exemple TS_data a 10 lignes
          LIGNE(INDIRECT("1:"&LIGNES(TS_data))) ==>LIGNE(INDIRECT("1:"&10))==>ligne($1:$10)
          si TS_data) correspond a la plage a5:a15 , ou peut mettre ligne(a5:a15 )-4
          pourquoi -4 ?
          parce que l'index d'une plage commence a 1 ce qui fait 5-4;6-4;etc...
          SI(TS_data=$A$1;LIGNE(INDIRECT("1:"&LIGNES(TS_data))))
          ça va donner une matrice de 0 ou de 1 appliquée a celle des lignes
          on obtient une matrice genre (faux;2;3;faux;faux;faux)
          PETITE.VALEUR(SI(TS_data=$A$1;LIGNE(INDIRECT("1:"&LIGNES(TS_data))));LIGNES($1:1))

          la premiere valeur c'est 3, apres 4 etc.

          dansc la formule se réduit a
          INDEX(MesData;2) puis au fur et a mesure qu'on descend
          INDEX(MesData;3)
          etc
          on a ainsi crée une liste des mes data qui repondent aux conditions TS_data=$A$1

          Crdlmt
          0
          1. en excel 365, ça correspond a la fonction filtre()
            0