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 Index - Equiv Critères en Colonne et Ligne avec <= sur un critère


Sujet :

Excel

  1. #21
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je viens de découvrir le problème posé et l'évolution du travail sous les conseils de Pierre Fauconnier.
    Vu les propriétés de la fonction EQUIV, on ne peut que souscrire aux remarques faites et il aurait mieux valu écrire le tableau avec les poids dans l'ordre décroissant.
    Sans parler d'impossibilité de lire la borne supérieure des intervalles de poids dans le tableau tel qu'il est présenté, vouloir garder cette présentation entraîne une complexification des formules comme on peut le voir dans la proposition ci-dessous de formule à écrire en H15.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX($B$2:$K$9;EQUIV(C15;$A$2:$A$9;0);SIERREUR(EQUIV(D15;$B$1:$K$1);0)+ESTNA(EQUIV(D15;$B$1:$K$1;0)));"trop lourd")
    Nom : envoi postal.JPG
Affichages : 701
Taille : 93,0 Ko
    Cordialement
    Claude

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Salut Claude,

    Perso, pour simplifier un peu le boulot en cas de matrice à double entrée (cas initialement envisagé), on pourrait remplir les cases laissées vides avec les mêmes valeurs que la cellule de gauche. Ainsi, on remplirait les cellules vides de la colonne des 35gr avec les mêmes valeurs que celles de la colonne des 20gr. On aurait alors un simple INDEX/EUIV Lignes/Equiv Colonnes.
    "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. #23
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par munity Voir le message
    merci pour ta proposition Pierre mais il y a un problème
    tu as ajouté un palier et cela ne va pas (ce qui fait que le poids entre 501 et 3000 grammes n'existe pas)
    en fait il faut lire le tableau comme suit
    0-20 = 0.8
    21-100 = 1.6
    101-250 = 3.2
    251-500 = 4.8
    501-3000 = 6.4

    Et avec un sommeprod?
    Qui me retournerait la valeur cible ?
    Il te suffit de changer les données en A3:A6 en mettant TES planchers (21, 101, 251 et 501) . Et bien sûr, avec la dernière cellule en A6, tu auras bien ton pallier 501-3000 (en fait, tu auras ton pallier pour 501 et plus, et ce sera à toi à ne pas saisir un poids supérieur à 3000).

    Teste la solution que j'ai proposée avec tes propres planchers en utilisant des valeurs charnières: 20 puis 21, 100 puis 101 et tu verras que cela fonctionne très bien.
    "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...
    ---------------

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Merci pour vos deux soluces
    Je pensais vous avoir epater avec la mienne et le systeme en bdd
    Je suis decu
    Je teste
    Desole pierre d avoir mal interpret ta soluce
    Mais dans l ideal c est de garder les valeurs telle que presente dans le tableau de la poste en respectant l ordre croissant
    Pour ne pas pertuber les modifications de tarifs eventuels

  5. #25
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    L'utilisation est la même. Que tu utilises EQUIV en verticale ou en horizontale ne change rien. Par contre, tu simplifieras vraiment ta formule en remplissant les trous de ta grille. Et dans la mesure où tu utilises des grammes "entiers", tu peux sans problème construire ta grille dans l'ordre croissant des poids.

    Nom : 20181121_01.png
Affichages : 458
Taille : 18,0 Ko
    "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...
    ---------------

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Merci Pierre
    mais je reviens sur la solution de Papouclo
    =SIERREUR(INDEX($B$2:$K$9;EQUIV(C15;$A$2:$A$9;0);SIERREUR(EQUIV(D15;$B$1:$K$1);0)+ESTNA(EQUIV(D15;$B$1:$K$1;0)));"trop lourd")
    bon j'ai bien compris que
    SIERREUR équivaut à si(esterreur(....
    par contre je ne saisis pas trop SIERREUR(.....)+ESTNA(.....)
    Comment le calcul se fait
    pourrais tu m'en dire plus sur le fonctionnement et comment le BON résultat peut s'afficher

    merci d'avance

    david

  7. #27
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Avant de répondre à ta question sur la formule proposée, je voudrais dire que le plus simple pour toi serait d'utiliser un tableau ressemblant au dernier tableau proposé par Pierre avec les bornes inférieures (planchers) des intervalles.

    Si on veut lire le poids p d'un envoi dans ton tableau, il y a deux possibilités :
    - 1er cas: p apparait dans ta liste croissante de poids (20...3000) de la plage B$1$:K$1$ et le calcul EQUIV(p;B$1$:K$1$;0) renvoie le rang de la colonne du tableau dans laquelle il faudra lire le prix.
    - 2ème cas: p n'apparait pas dans cette liste et le même calcul renvoie la valeur d'erreur #N/A.

    d'où l'idée d'employer le 1 comme troisième paramètre de la fonction EQUIV.
    - 1er cas: le calcul EQUIV(p;B$1$:K$1$;1) renvoie toujours le rang de la colonne du tableau dans laquelle il faudra lire le prix.
    - 2ème cas: le calcul EQUIV(p;B$1$:K$1$;1) ne renvoie plus la valeur d'erreur #N/A pour ce poids p mais il renvoie le rang du plancher de l'intervalle contenant p au lieu du rang du plafond de cet intervalle et il faut ajouter 1 pour passer à la colonne de ce plafond.

    Mais il ne faut ajouter 1 au résultat donné que dans le 2ème cas et pas dans le 1er , d'où un calcul de la forme :
    EQUIV(p;B$1$:K$1$;1) + terme conditionnel ,
    ce terme conditionnel prenant la valeur 0 dans le 1er cas et la valeur 1 dans le 2ème cas.
    La fonction ESTNA nous permet d'écrire ce terme conditionnel puisque ESTNA(calcul) donne la valeur logique FAUX donc la valeur numérique associée 0 lorsque le calcul écrit entre parenthèses renvoie une valeur numérique (ce que fait EQUIV(p;B$1$:K$1$;0) dans le 1er cas) et la valeur logique VRAI donc la valeur numérique associée 1 lorsque le calcul écrit entre parenthèses renvoie la valeur d'erreur #N/A (ce que fait EQUIV(p;B$1$:K$1$;0) dans le 2ème cas).

    D'où un calcul de la forme :
    = EQUIV(p;B$1$:K$1$;1) + ESTNA(EQUIV(p;B$1$:K$1$;0))

    Deuxième problème :
    Comme ta liste de poids ne commence pas à 0 (ou 1) mais au premier seuil 20, pour tous les poids de lettre p inférieurs à 20g même EQUIV(p;B$1$:K$1$;1) renvoie le signal d'erreur #N/A et la formule complète renvoie le même signal d'erreur.
    d'où le remplacement de EQUIV(p;B$1$:K$1$;1) par SIERREUR(EQUIV(p;B$1$:K$1$;1);0).
    Pour une lettre pesant 15 g par exemple, on aura :
    = SIERREUR(EQUIV(15;B$1$:K$1$;1);0) + ESTNA(EQUIV(15;B$1$:K$1$;0))
    qui donne : = SIERREUR(#N/A ; 0) + ESTNA(#N/A)
    soit = 0 + 1
    = 1
    ce qui renvoie lire le prix dans la première colonne du tableau donc la colonne des 20g.

    Enfin, pour un poids dépassant 3000g, la formule précédente renverra 10 + 1 soit 11 qui est un numéro de colonne hors du tableau qui ne contient que 10 colonnes d'où la valeur d'erreur #REF avec la formule
    = INDEX (ligne; 11)
    ce qui peut se corriger avec un SIERREUR (INDEX(ligne;colonne);"trop lourd").
    D'où la formule finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX($B$2:$K$9;EQUIV(C15;$A$2:$A$9;0);SIERREUR(EQUIV(D15;$B$1:$K$1);0)+ESTNA(EQUIV(D15;$B$1:$K$1;0)));"trop lourd")
    En suivant le conseil de Pierre et en remplissant les cellules vides (remplies en italique ci-dessous) qui sont un véritable ennui dans un tableau, on pourrait avoir toutes les réponses voulues.
    Nom : envoi postal 2.JPG
Affichages : 478
Taille : 96,7 Ko

    Il suffit au cas d'écrire les contenus des anciennes cellules vides avec la couleur du fond de cellule pour obtenir la présentation de départ du tableau.
    Dernière remarque : on peut supprimer le champ 1500g.
    Cordialement
    Claude

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Merci de tes explications
    Je peux dire que j ai pris une bonne lecon
    Sans vouloir vexe Pierre je vais garder ta formule et ton systeme
    Si ce tableau ne dependait que de moi pas de probleme mais il est utilise par plusieurs personnes et j ai peur d une mauvaise utilisation ou interpretation pour la mise a jour des poids et prix
    En meme temps les tarifs sont a modifier une fois par an mais je prefere ne prendre aucun risque
    Merci a tous les deux en tout
    Cette astuce sera forte utile pour d autres cas je pense
    Bonne soiree
    David

Discussions similaires

  1. Fonction Index Equiv 2 conditions en ligne
    Par MaxM59 dans le forum Excel
    Réponses: 9
    Dernier message: 17/04/2016, 13h47
  2. [XL-2010] Probleme de repetition de ligne avec une fonction INDEX+EQUIV
    Par ZHNEE dans le forum Excel
    Réponses: 2
    Dernier message: 29/07/2014, 13h27
  3. Fonctions Index+Equiv avec classeur fermé
    Par templeoflove777 dans le forum Excel
    Réponses: 5
    Dernier message: 12/03/2012, 12h39
  4. Problème de fonctions index + equiv imbriqués
    Par fcsjeux dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 06/01/2012, 16h19
  5. [XL-2003] Fonction Index Equiv
    Par jm6570 dans le forum Excel
    Réponses: 3
    Dernier message: 16/02/2011, 10h44

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