Re : [XL 2010] Trouver la valeur supérieur dans la matrice et renvoyer le résultat
Bonsoir,
ca s'applique ou le CTRL+MAJ+ENTREE ?
Quand tu saisies la formule, a la place de valider par simple Entree on doit valider par Ctrl+Maj+Entree.
si tu valides par simple Entree, la formule renvoie la valeur d'erreur : #VALEUR, mais tu ne la voie pas, car on a gere les erreurs par la fonction SIERREUR(), cette derniere qui renvoie "" VIDE on cas d'erreur.
alors si tu as deja valide par simple Entree, tu peux mettre le curseur dans la cellule contenant la formule et tapes la touche F2, et revalides par Ctrl+Maj+Entree ==> maintiens les 2 touches Ctrl et Maj enfonces et tapes la touche Entree.
comment modifier la plage de donnée
J'ai pas bien compris, la question a plusieurs dimensions, on prend la largeur et la hauteur de ces dimensions :
le champ Critere : =HE!$B$3:$N$3
c'est simple et n'a pas besoin d'explication.
le champ Zone : =DECALER(HE!$A$4;;;NBVAL(HE!$A:$A)-1)
la fonction =DECALER(réf;lignes;colonnes;[hauteur];[largeur]) :
réf ==> A4
lignes ==> Omis
colonnes ==> Omis
ils sont omis parcequ'on veut que l'origine reste A4,
[hauteur] ==> NBVAL(HE!$A:$A)-1
c'est le nombre de valeurs dans la colonne A -1, le -1 c'est pour la valeurr contenue dans la cellule A2 ==> "designation".
[largeur] ==> Omis, parceque notre cham va avoir une seule colonne donc pas besoin de largeur.
le champ Plage : =DECALER(Zone;;EQUIV(VRAI;EXACT(Feuil1!$B$3;Critere);0))
réf ==> le champ Zone
lignes ==> Omis,
colonnes ==> EQUIV(VRAI;EXACT(Feuil1!$B$3;Critere);0)
j'ai utilise EQUIV(VRAI;EXACT(Feuil1!$B$3;Critere);0), formule matricielle parceque tu as par exemple les criteres "Iz" et "iz" en majuscule et miniscule, si ce n'est pas le cas on peut faire simple EQUIV(Feuil1!$B$3;Critere;0).
ces 2 dernieres fonrmules vont renvoyer un nombre entier et c'est l'equivalent de Feuil1!$B$3 dans le champ Critere, est ca va etre le nombre de colonnes de decalge du champ Zone.
comment tout cela fonctionne
Formule : =SIERREUR(INDEX(Zone;EQUIV(MIN(SI(Plage>=D3;Plage));Plage;0));"")
j'ai deja parle de la fonction SIERREUR(), mais pas de prob on repete :
=SIERRERU(valeur;valeur-si-erreur)
valeur ==> INDEX(Zone;EQUIV(MIN(SI(Plage>=D3;Plage));Plage;0))
valeur-si-erreur ==> "", "" veut dire vide, donc en cas d'erreur elle renvoie vide, on peut mettre ce qu'on veut par exemple "Attention il y une erreur", et comme ca on aura la phrase : Attention il y une erreur, en cas d'erreur.
on passe a ==> INDEX(Zone;EQUIV(MIN(SI(Plage>=D3;Plage));Plage;0))
la fonction INDEX(matrice;numero de ligne;numero de colonne)
matrice ==> Zone, champ de resultats
numero de ligne ==> EQUIV(MIN(SI(Plage>=D3;Plage));Plage;0)
numero de colonne ==> Omis pareceque notre champ de resultats se compose d'une seule colonne, donc on n'a pas besoin.
on passe au numero de ligne,
EQUIV(MIN(SI(Plage>=D3;Plage));Plage;0), cette formule renvoie un nombre comme j'ai deja dis.
MIN(SI(Plage>=D3;Plage)) ==> va chercher dans le champ Plage le valeur directement superieur ou egale a la valeur en D3, si elle trouve la valeur de D3 dans le champ Plage, elle va renvoyer cette valeur, sinon elle va renvoyer la plus petite valeur directement superieur a la valeur en D3, et apres il va nous revoyer le rang de cette derniere valeur dans le champ Plage.
et voila j'espere bien etre clair sur mes explication, c'etait plus difficile que de faire la formule.
Amicalement