Monsieur Excel
Pour tout savoir faire sur Excel !

16 juin 2012

Un test pour les génies d'Excel !

Après l’article « Etes-vous dans le top 1% d'Excel »  du 9 mai 2012, voici encore un test pour les petits génies en Excel !

Le problème que je vous pose aujourd’hui était un challenge publié dans le site MrExcel (mon cousin en quelque sorte, mais un peu plus âgé – si c’est possible !). Voici l’adresse du site :

Vous disposez en B2:C4 d’une liste de services dans votre entreprise avec, pour chacun d’entre eux, votre contact.

En A7:A8, vous avez une liste de projets en cours. Pour chacun d’entre eux, vous devez afficher en colonne B le contact correspondant, celui-ci étant identifié par la présence dans le nom du projet du département auquel il appartient.

Trouvez la formule la plus courte possible en B7 pour obtenir le bon résultat.

Essayez vraiment avant de lire la suite de cet article…

Pour vous écœurer un peu, je vous informe que la formule proposée plus bas tient en 48 caractères d’imprimerie et ne requiert même pas de validation matricielle !

Cette solution a été proposée par Barry Houdini qui, comme par hasard, porte un nom de magicien…

Voici la formule de B7 : =recherche(2^10;cherche($B$2:$B$4;A7);$C$2:$C$4)

Cette formule ne tient pas compte de la syntaxe officielle de la fonction cherche(), dans laquelle le premier argument est normalement un simple texte à rechercher, donc tout sauf un vecteur...

Quand on évalue cherche($B$2:$B$4;A7), on obtient {#VALEUR!;6;#VALEUR!}. Ce qui explique pourquoi le bon résultat est finalement obtenu…

Avec 2^10 comme premier argument de la fonction recherche(), on se donne la possibilité d’utiliser une table dans laquelle on recherche avec des cellules comportant 1.023 caractères au maximum. Si ces cellules devaient être plus longues, il suffirait d’utiliser une puissance de 2 supérieure à 10…

Cette brillante solution prouve – une fois de plus – qu’une parfaite connaissance des algorithmes sous-jacents aux fonctions permet de découvrir des utilisations inédites de ces fonctions. C’est le cas, dans cet exemple, à la fois pour la fonction cherche() – avec son premier argument vectoriel – et pour la fonction recherche() qui – dans sa syntaxe à deux vecteurs – suppose en général que le premier vecteur soit classé en valeurs croissantes.

3 Commentaire(s):

  • Voilà:
    "Avec 2^10 comme premier argument de la fonction recherche(), on se donne la possibilité d’utiliser une table dans laquelle on recherche avec des cellules comportant 1023 caractères au maximum. Si ces cellules devaient être plus longues, il suffirait d’utiliser une puissance de 2 supérieure à 10…"

    By Blogger Philippe, sur 8:44 PM  

  • J'étais distrait...

    C'est corrigé ! Merci !

    By Blogger Hervé Thiriez, sur 10:42 AM  

  • j'ai trouvé une formule plus courte :
    =RECHERCHE(2;CHERCHE("*"&$B$7:$B$9;A13);$C$7:$C$9)

    l'évaluation de la matrice CHERCHE(...) me donne toujours la valeur 1.

    By Anonymous Stefyu Thechosenone, sur 11:52 PM  

Enregistrer un commentaire

<< Accueil