IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Fonction RECHERCHE ne renvoie pas la valeur attendue [XL-2007]


Sujet :

Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut Fonction RECHERCHE ne renvoie pas la valeur attendue
    Bonsoir à tous,
    J’utilise la fonction RECHERCHE sur la plage B2:B10 où il n’y a que des nombres strictement inférieurs à 100

    La formule =RECHERCHE(100;B2:B11) renvoie la dernière valeur en B11 soit 38

    L’aide de la fonction RECHERCHE nous indique :
    Citation Envoyé par Excel
    Si la fonction RECHERCHE ne peut trouver l’argument valeur_cherchée, elle utilise la plus grande valeur de l’argument vecteur_recherche qui est inférieure ou égale à celle de l’argument valeur_cherchée
    Dans le cas présent la plus grande valeur de l’argument vecteur_recherche est 95 et non 38. Je ne comprends pas sauf à supposer qu’il y ait une erreur dans l’aide
    Quelqu’un peut-il éclairer ma lanterne ?
    Merci de vos retours
    JP

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Citation Envoyé par Excel
    Si la fonction RECHERCHE ne peut trouver l’argument valeur_cherchée, elle utilise la plus grande valeur de l’argument vecteur_recherche qui est inférieure ou égale à celle de l’argument valeur_cherchée
    Il est dit aussi:
    Citation Envoyé par Excel
    Important Les valeurs de l'argument vecteur_recherche doivent être placées en ordre croissant : ..., -2, -1, 0, 1, 2, ..., A-Z, FAUX, VRAI. Sinon, la fonction RECHERCHE peut donner une valeur incorrecte.
    et apparemment, ce serait le cas chez vous, d'où le résultat erroné.
    Cdlt

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonsoir à tous,
    J’ai essayé d’approfondir la chose.
    En faisant une recherche internet sur « dernière cellule d’une plage » j’ai plusieurs fois eu des formules du genre RECHERCHE(9^9;Bx:By) pour des valeurs numériques et RECHERCHE("zz";Bx:By) pour des valeurs texte que la plage soit triée ou non.
    Ces formules ressemblent à celle que j’ai dans mon premier post.
    Je ne comprends donc toujours pas pourquoi on obtient la valeur de la dernière cellule et non pas « …la plus grande valeur de l’argument vecteur_recherche qui est inférieure ou égale à celle de l’argument valeur_cherchée »
    Cela reste un mystère
    Si quelqu’un peut me fournir une explication je suis preneur
    Merci et bonsoir à tous
    JP

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Je ne comprends pas votre obstination à vouloir utiliser une formule qui n'est pas adaptée à votre problème malgré les recommandations d'utilisation de cette fonction (relisez l'aide), si vos données ne sont pas triées dans l'ordre ascendant cette formule renverra toujours une valeur erronée. Donc, soit vous triez vos données, soit il faut changer de formule.
    Quant aux formules que vous citez, elles ne sont destinées uniquement qu'à trouver la dernière valeur d'une liste, donc rien à voir avec ce que vous voulez.

    Pour faire ce que vous désirez, utilisez plutôt ceci (attention, formule matricielle à valider avec CTRL +SHIFT + ENTREE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAX(SI($B$2:$B$11<=100;$B$2:$B$11;""))
    Cdlt

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Salut.

    Explique clairement, capture d'écran à l'appui, ce que tu souhaites réaliser. Recherche est une fonction obsolète laissée dans les versions actuelles à des fins de compatibilité. Il ne faut donc pas l'utiliser et privilégier d'autres méthodes.

    Nom : 2019-08-30_205931.png
Affichages : 2158
Taille : 11,7 Ko

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par JPierreM Voir le message
    [...]

    Dans le cas présent la plus grande valeur de l’argument vecteur_recherche est 95 et non 38. Je ne comprends pas sauf à supposer qu’il y ait une erreur dans l’aide
    Quelqu’un peut-il éclairer ma lanterne ?
    Merci de vos retours
    JP
    Pour que tu comprennes le résultat renvoyé par RECHERCHE... Tu aurais d'ailleurs le même avec RECHERCHEV(Par1;Par2;Par3;VRAI) et EQUIV(Par1;Par2;1). Ces trois fonctions, avec les 4ième ou 3ième paramètres tels que décrits pour RECHERCHEV et EQUIV, renvoient la valeur inférieure la plus proche en considérant que la liste est triée par ordre croissant.

    RECHERCHE considère que ta plage est triée, mais il ne la trie pas pour toi dans un tableau en mémoire. Et comme il considère qu'elle est triée, la recherche est indexée, comme lorsque tu cherches un mot dans le dictionnaire, qui est trié par ordre alphabétique.

    Imagine un dictionnaire non trié... Tu devrais effectuer la recherche de ton mot de façon séquentielle, à savoir lire tous les mots du premier jusqu'à celui que tu cherches. Ce ne serait guère rapide, et si ton dictionnaire comprenait 1 000 000 mots, tu devrais en lire en moyenne 500 000 pour trouver celui qui t'intéresse... Pas très pratique... Si ce très gros dictionnaire était trié, il te suffirait de 20 mots maximum pour trouver ton mot (2^20 = 1 048 576). Pourquoi?

    Parce dans ce cas, tu coupes ton dico en deux parties égales et tu regardes dans laquelle peut se trouver ton mot. Tu "jettes" l'autre moitié. Tu n'as donc plus qu'un dico de 500 000 mots à consulter et tu recommences... Tu le coupes en deux (250 000) puis en deux (125 000) ... En 20 coups max, il te restera un seul mot en mains...

    RECHERCHE fonctionne à l'identique. Regarde les deux illustrations suivantes: les valeurs grisées sont celles qui sont "jetées" lors de la recherche. Tu vois ainsi que, sur une liste non triée, le résultat de RECHERCHE varie et semble aléatoire. Entre les deux illustrations, 25 et 101 ont été permutés, faisant varier la valeur retournée par RECHERCHE.

    Première illustration: RECHERCHE coupe les données entre 25 et 95 et compare 100 à 25. 100 étant plus grand, RECHERCHE jette la première moitié. Il coupe les 4 valeurs restantes en 2 et compare 100 à 14. 100 étant plus grand, il jette les 5ième et 6ième valeurs de la liste puis recommence avec les deux dernières, jette 30 et renvoie 38.

    Nom : 2019-09-01_082218.png
Affichages : 2102
Taille : 10,0 Ko



    En permutant 25 et 100, RECHERCHE ne jette plus les mêmes paquets de valeurs. Il coupe les 8 valeurs en 2, regarde la dernière de la première moitié, c'est-à-dire 101, et comme 100 < 101, il jette la seconde moitié et travaille sur la première... A la fin, sur la même série de données mais ordonnée différemment, RECHERCHE renverra 25.

    Nom : 2019-09-01_082315.png
Affichages : 2089
Taille : 10,1 Ko.

    Comme dit Précédemment, RECHERCHE est obsolète. Quant à RECHERCHEV et EQUIV, ils ne doivent être utilisés avec les paramètres indiqués plus haut que si l'on cherche la plage de valeurs à laquelle appartient la valeur utilisée pour la recherche ET que la liste est triée par ordre croissant. Il n'est pas possible, avec les 4ième argument à VRAI pour RECHERCHEV et 3ième argument à 1 pour EQUIV, d'être certain d'avoir trouvé la valeur exacte dans une liste! Pour autant que les plages soient triées, on pourrait utiliser un double RECHERCHEV ou un double EQUIV pour accélérer la recherche d'une valeur exacte, mais c'est un autre problème.

    Si l'on cherche non plus la plage mais la valeur exacte (4ième argument à FAUX pour RECHERCHEV et 3ième argument à 0 pour EQUIV), la liste n'a pas besoin d'être triée, mais la recherche sera "plus lente" sur de grandes plages de valeurs car séquentielle et non plus indexée. Dans ce cas, RECHERCHE ne peut pas être utilisé car pas "équipé" pour la recherche séquentielle.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonsoir Pierre,
    Un grand merci pour tes explications claires et qui me satisfont pleinement car je dois dire que j'étais vraiment resté sur ma faim.
    JP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une fonction : Renvoi pas les valeurs
    Par diego45 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/07/2014, 19h04
  2. Select Case ne renvoie pas la valeur attendue
    Par H.ile dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/01/2009, 14h58
  3. [MySQL] mysql_fetch_array : print_r ne renvoie pas le resultat attendu.
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2006, 18h52
  4. [POO] Variable ne contenant pas la valeur attendue
    Par norby042 dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 10h06
  5. Réponses: 3
    Dernier message: 08/11/2006, 23h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo