Recherche valeur avec ecart type

Bonjour,

Je souhaite rechercher une valeur d'une base de donnée en fonction d'un écart type. Par exemple, j'ai plusieurs caractéristiques sur un test, en fonction de ma donnée d'entrée, ca trouve un ou des tests et les ressort parmis plusieurs. Pour faire le tri, le but est de majorer la valeur de 3% entrée par l'utilisateur : si je met 10, ca cherche dans la base de données entre 10 et 10.3 et m'indique les tests correspondants.

Mieux expliqué avec ce fichier : http://cjoint.com/?3CFoORFWWzL

Merci d'avance !

17 réponses

Résumé de la discussion

Rechercher une valeur dans une base de données selon un écart type et majorer cette valeur de 3% pour identifier les tests correspondants est la problématique, illustrée par l'exemple 10 → entre 10 et 10,3. Plusieurs approches ont été évoquées, notamment des formules comme RechercheV ou INDEX pour récupérer les valeurs autour de l'entrée, ou l'utilisation de VBA et d'ActiveX pour ajouter des critères. D'autres échanges évoquent des difficultés comme la gestion des valeurs identiques et l'affichage des résultats lorsque plusieurs enregistrements partagent la même mesure, avec des propositions pratiques telles que des listes déroulantes.

Bobot (l’IA à votre service)
  1. Bonjour

    Un début de réponse via vba
    https://www.cjoint.com/?3CFrGrWqbQr

    Cdlmnt
    0
    1. Merci pour votre réponse.
      N'existe t il pas une solution avec des formules type rechercheV ou Index ?
      En enlevant l'écart type et en cherchant les 3 valeurs au dessus du résultat recherché ?
      0
    2. @juliettePersonne ne peut m'aider?
      0
  2. Merci via55 !

    Je viens de réfléchir, si on indique les 3 résultats qui suivent la valeur que l'on indique (on supprime l'hypothèse avec l'écart type 3%).
    C'est plus simple non ?
    0
    1. Re,

      Je rentre seulement et je découvre ton message.
      Plus simple peut être mais il faut alors que le tableau soit trié car si tu mets simplement comme condition SI >25 dans la colonne dénombrement les 3 premières valeurs rencontrées seront celles retenues et cela peut être 28, 30 et 34 si des valeurs entre 25 et 28 existent mais sont après
      0
      1. Merci de votre réponse.

        Avez vous un exemple à me donner svp?
        0
      2. @julietteBonjour juliette

        Je viens de trouver la solution sans colonne supplémentaire ni liste triée, en combinant INDEX EQUIV avec PETITE.VALEUR
        https://www.cjoint.com/?0DclYOEEEtV
        Dans les formules le PETITE.VALEUR($B$17:$B$27;NB.SI($B$17:$B$27;"<"&$B$3)+1 renvoie la 1ere petite valeur supérieure ou égale à B3, PETITE.VALEUR($B$17:$B$27;NB.SI($B$17:$B$27;"<"&$B$3)+1 la 2eme, etc

        Cdlmnt
        Via
        0
    2. Salut via55

      ça fait un moment que je n'étais pas revenu sur le sujet.
      Une remarque pour ta formule, si deux prénoms ont la même mesure, par exemple Manu et Michel tous les deux à 25.3, le deuxième n'est pas renvoyé, enfin du moins je crois

      Cdlmnt
      0
      1. Salut ccm81

        Tu as raison, la 2eme est bien prise en compte mais la fonction INDEX renvoie le 1er nom qui est donc indiqué 2 fois; je ne vois pas pour l'instant comment contourner le problème sauf à en revenir à ma 1ere solution avec colonne de comptage ajoutée, mais je continue à chercher..

        Cdlmnt
        0
    3. Alors qu'avec une petite macro sans colonne supplémentaire ...
      https://www.cjoint.com/?3DcwH72u5D5

      Cordialement
      0
      1. Merci !
        Oui j'ai vu l'erreur pour l'affichage du meme nom pour des valeurs identiques...
        Avez vous trouvé comment résoudre ce soucis ?
        0
    4. La macro ci-dessus résout ce souci, mais si tu es toujours allergique aux macros .... il ne reste plus qu'à attendre la réponse (certainement positive) de via55
      Cdlmnt
      0
      1. Merci de ta réponse ccm81, je vais attendre la réponse de via55, car je n'arrive pas à adapter ta macro à ma feuille excel.
        0
    5. Bon, via55 doit encore être à la sieste et comme je m'en voudrai de le réveiller, je te propose ceci sans macro (dommage)
      https://www.cjoint.com/?3Ddrk7KogeL
      RQ. Pour les formules "résultats", tu peux remplacer LIGNE()-5 par 1, puis 2, puis 3
      =INDEX($A$17:$A$27;EQUIV(LIGNE()-5;$E$17:$E$27;0))
      =INDEX($A$17:$A$27;EQUIV(2;$E$17:$E$27;0))

      Cdlmnt
      0
      1. Bonsoir juliette
        Bonsoir ccm ;)

        Eh non je n'étais pas à la sieste mais au boulot!

        Pas moyen de trouver par formule sans rajouter de formules supplémentaires la manière de prendre en compte les doublons (on devrait pourvoir avec une matricielle mais je bute sur sa mise en oeuvre)

        En l'état actuel les propositions de ccm (avec ou sans macro) sont les plus pertinentes

        Cdlmnt
        Via
        0
        1. Contributeur
          Bonjour à tous,

          Je n'étais pas loin pour une formule unique mais index() ne supporte pas la validation matricielle ici.

          Colonne supp, en D6 :
          =MOD(GRANDE.VALEUR(($B$17:$B$27>=$B$3)*($B$17:$B$27<$B$3*1.03)*($B$17:$B$27+LIGNE($B$17:$B$27)/10000);LIGNE()-5)*100;1)*100
          formule matricielle à valider avec shift+ctrl+entrée
          5 : nombre de lignes au-dessus de la 1ère formule

          En B6 : =INDEX(A:A;D6)
          En C6 : =INDEX(C:C;D6)

          Résultat affiché de la plus grande mesure en décroissant.
          https://www.cjoint.com/c/EDdsIz3ySYE

          eric
          0
          1. Salut Eric

            Chapeau pour ta formule, tordue à souhait ;-)
            Mais elle n'est plus d'actualité, la demande a peut être changé (post #5) pour les trois premières valeurs >= $B$3. Et c'est encore bien casse tête, du moins pour moi. Je n'ai trouvé qu'avec deux colonnes supp ou une macro

            Bon weekend

            Cordialement
            0
            1. Bonjour à tous

              Gestion des triplons avec une seule colonne supplémentaire pour déterminer le rang :
              https://www.cjoint.com/?0DenJBjRvGu
              Eric va peut être nous trouver une autre formule magique !

              Bon week-end pascal

              Bien cdlmnt
              Via
              0
              1. Contributeur
                Bonjour à tous,

                Je l'avais vu ce post #5, mais zappé :-)
                Je l'ai pris pour une tentative de simplifier le problème, pas comme un impératif.
                Sinon ma proposition du #17 n'est pas gênée par les triplets normalement.

                Et finalement sans colonne supplémentaire, decaler() n'est pas gêné par la validation matricielle contrairement à index() :-)
                En B6:
                =DECALER($A$1;ARRONDI(MOD(GRANDE.VALEUR(($B$17:$B$27>=$B$3)*($B$17:$B$27<$B$3*1.03)*($B$17:$B$27)*10+LIGNE($B$17:$B$27)/1000;LIGNE()-5);1)*1000;0)-1;)

                En B7 : idem mais
                =DECALER($C$1;...)

                Avec donc les mesures comprises dans la fourchette à partir de la plus élevée (et pas de soucis avec les doublons, triplets, etc).
                https://www.cjoint.com/c/EDepDbfb7WH

                eric
                0
                1. Re Eric

                  Bravo pour ta formule elle gère les exæquos mais ne prend pas en compte Michel qui avec 25,2 es t plus près pourtant de 25 que Manu avec 25,3.
                  Comment adapter ta formule pour ressortir les noms correspondant aux 3 plus petites valeurs, dans ton exemple ce serait Michel, puis Manu puis Jêrome ?

                  Bien cdlmnt
                  Via
                  0
                2. Contributeur
                  Ah oui, comme précisé fournit le résultat à partir de la plus grande mesure acceptée, en décroissant.
                  Dans l'ordre croissant à partir de la plus petite mesure il y a la tienne. Une colonne supp ce n'est pas la mer à boire ;-)
                  En une formule unique je crains qu'elle ne soit un peu longuette et difficile à maintenir. Mais bon, c'était plus pour le sport. S'il y en a plus de 3 on ne sait pas les préférences du demandeur (les plus petites ? Les plus grandes ? Indifférent ?).
                  eric
                  0
              2. Je vois que ca bosse dur ici !

                On va y arrivé !
                0
                1. Hello juliette

                  Pour gérer les doublons et surtout les éventuels triplets dans l'ordre croissant il n'y a pour l'instant que ma proposition message n°20, pour ma part, je ne peux rien de plus

                  Bien crdlmnt
                  Via
                  0
              3. Merci via55, c'est impec avec la colonne pour le tri croissant.

                Dernière question, si je rajoute un critère c'est à dire on garde ce que l'on a jusqu'à maintenant on ajoute le critère : "inférieur à 30ans" c'est faisable ?

                Voilà (anciennes formules sur le fichier) : http://cjoint.com/?3Dimf2opMpe
                0
                1. Bonjour juliette

                  Pas de souci, si tu veux par contre comme tu l'indiques dans le fichier un classement du plus jeune au plus vieux il faut rajouter une colonne :
                  https://www.cjoint.com/?0DinSwSNto6

                  Cdlmnt
                  Via
                  0
                  1. Yes pas mal mais si je met l'age de 16ans à Manu, j'ai deux fois le 2e rang. Petit bug, figer la plage non ?
                    0
                  2. @julietteOui, désolé,oubli de ma part, bien sûr il faut figer la plage :
                    =SI(D22="";"";RANG(D22;$D$22:$D$33;1))
                    0
                2. Yes je l'avais fait, merci!
                  J'ai réussis à rajouter un critère mais je souhaite que ce dernier soit lié à une case à cocher (case verte dans le fichier).

                  Fichier : http://cjoint.com/?3Djr1PrX2Hi

                  Difficile ?
                  0
                  1. Bonsoir Juliette

                    Difficile non, mais ce sont des boutons d'option liés tous à la même cellule B9 qu'il faut employer, si le 1er bouton est coché il renvoie 1 en B9, le 2eme , 2 etc
                    https://www.cjoint.com/?0DjvyFETFXF

                    Cdlmnt
                    Via
                    0
                  2. Parfait, merci.

                    Pour info , si je souhaite avoir 2 niveaux d'options. C'est à dire que j'ai déjà choisi un choix (2par exemple) et souhaite ensuite faire un choix : 2B (parmi 2A - 2B - 2C). Car quand je rajoute des cases options, il sélectionne 1 seule option.

                    Je choisis 2 puis après je choisis 2B.
                    0
                  3. @julietteBonjour juliette

                    Tu tiens à faire plusieurs choix successifs ? Il vaudrait mieux peut-être alors passer pas des listes déroulantes de choix plus simple de manipulation. Néanmoins avec 2 séries de boutons Controle ActiveX c'est possible :
                    https://www.cjoint.com/?0DkpRBV7eoJ

                    Cdlmnt
                    Via
                    0