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 :

Recherche dans une Matrice dynamique [XL-2007]


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut Recherche dans une Matrice dynamique
    Bonjour

    je sais que ça parait assez facile à 1ière vue mais voilà ce que je dois réaliser :

    Etape Bg Bd Appréciation
    1 0 1 Mauvais
    1 1 2 Satisfaisant
    1 2 4 Bon
    1 4 7 Excellent
    2 1 2 Mauvais
    2 2 4 Satisfaisant
    2 4 7 Bon
    2 7 11 Excellent
    3 2 4 Mauvais
    3 4 7 Satisfaisant
    3 7 11 Bon
    3 11 14 Excellent
    4 4 7 Mauvais
    4 7 11 Satisfaisant
    4 11 14 Bon
    4 14 20 Excellent

    j'ai cette liste, constituée de 4 colonnes; étape, borne gauche, borne droite et appréciation. j'obtiens un résultat d'une autre feuille de calcul que j'arrange ainsi :

    Résultat 3.8
    Etape 2
    Appréciation ?


    je dois obtenir l'appréciation correspondante au résultat et à l'étape. je m'explique, puisque l'étape est 2 je dois restreindre mon champs d'application à la sous matrice suivante

    2 1 2 Mauvais
    2 2 4 Satisfaisant
    2 4 7 Bon
    2 7 11 Excellent

    puis je dois faire un test pour savoir que le résultat est compris entre 2 et 4 (borne gauche et borne droite), pour enfin avoir la bonne appréciation qui est dans ce cas "Satisfaisant".



    Merci à vous tous.

  2. #2
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Avec tes données en A1 (intitulés), tu peux utiliser
    =INDEX(D2:D17;SOMMEPROD((A2:A17=2)*(B2:B17<=3.8)*(C2:C17>=3.8)*LIGNE(A2:A17))-1)
    pour autant qu'il n'y ait qu'une ligne validant tes conditions. S'il y a plusieurs lignes, il faut envisager d'autres solutions, comme par exemple le filtre, automatique ou élaboré, le TCD, ...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonjour

    Avec tes données en A1 (intitulés), tu peux utiliser

    pour autant qu'il n'y ait qu'une ligne validant tes conditions. S'il y a plusieurs lignes, il faut envisager d'autres solutions, comme par exemple le filtre, automatique ou élaboré, le TCD, ...
    Re

    très très bien et merci encore, impeccable. mon résultat ne tient que sur une ligne. je dois abuser de ta gentillesse grand Monsieur et te demander une petite explication si possible. j'ai, en effet, regardé l'aide mais j'avoue ne pas comprendre ce que fait exactement sommeprod dans ce cas là.

  4. #4
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    INDEX(Plage, Position) permet de récupérer la valeur qui se trouve à la position renseignée dans la plage. Pour la plage D2:D17, tu cherches la valeur se trouvant en 6ième position (D2 est en première position, D3 en deuxième, etc).

    Pour trouver la position, on utilise SOMMEPROD, qui permet de renvoyer une donnée selon certains critères. A l'intérieur de SOMMEPROD, tu observes des parenthèses qui contiennent des (in)égalités, des assertions, que Excel vérifie pour renvoyer les valeurs VRAI ou FAUX.

    Ces valeurs VRAI et FAUX prennent respectivement les valeurs numériques 1 et 0 lorsqu'on les utilise dans une opération arithmétique. LIGNE() renvoie la ligne de la cellule qui utilise la fonction. On peut donc réaliser le produit des différentes valeurs trouvées (1 est neutre pour la multiplication et 0 est absorbant), de manière à récupérer 0 sauf pour la ligne qui correspond aux critères. Dans ton cas, on trouve 7, alors qu'on attend 6, et donc on retire 1.

    SOMMEPROD (pour SOMME des PRODuits) est au départ une formule permettant des sommes de produits de matrice, mais elle est ici utilisée de manière détournée, en permettant de se passer des colonnes de construction. C'est pourquoi SOMMEPROD() utilise les plages, ou plutôt les vecteurs A2:A17, B2:B17, C2:C17 et D2:D17 qui possèdent le même nombre de lignes.


    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    waw, très propre l'explication. merciiiiiiiiiiiiiiiiii , y a même un schéma ! je commence à voir plus clair. Bonne journée à toi Monsieur Excell

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut un petit pépin
    Re-bonjour

    je me suis aperçus que dans la formule suivante
    =INDEX('Paramètres et Listes'!D3:D18;SOMMEPROD(('Paramètres et Listes'!A3:A18=B46)*('Paramètres et Listes'!B3:B18<=B45)*('Paramètres et Listes'!C3:C18>=B45)*LIGNE('Paramètres et Listes'!A3:A18))-1)
    la fonction LIGNE ne rend pas la bonne ligne si ma liste commence pas en première ligne ?

    je m'explique, quand je mets ma liste au début de la feuille, j'ai cette formule :
    =INDEX('Paramètres et Listes'!D2:D17;SOMMEPROD(('Paramètres et Listes'!A2:A17=B46)*('Paramètres et Listes'!B2:B17<=B45)*('Paramètres et Listes'!C2:C17>=B45)*LIGNE('Paramètres et Listes'!A2:A17))-1)
    dans ce cas mon résultat est bon mais si je veux insérer des lignes au dessus de ma liste de sélection mais là j'ai des résultats inattendus voire même un erreur de type "#ref".

    je dois absolument ajouter des lignes au début de ma liste, alors comment forcer la fonction LIGNE à me rendre la ligne correspondante à mon choix ?

    merci par avance.

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

Discussions similaires

  1. recherche dans une matrice
    Par amal1410 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 25/03/2013, 17h17
  2. [XL-2010] Recherche dans une matrice avec doublons (formule ou VBA)
    Par Lucorah dans le forum Excel
    Réponses: 7
    Dernier message: 07/05/2012, 17h16
  3. Recherche dans une matrice
    Par clodius dans le forum Excel
    Réponses: 3
    Dernier message: 05/08/2008, 08h33
  4. [Débutant] Recherche de minimum non nul dans une matrice
    Par sebastien69 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/06/2007, 16h00
  5. Réponses: 1
    Dernier message: 24/05/2007, 14h46

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