Challenge ! une formule matricielle pour calculer le rang tenant compte des ex aequo

aldus_85

XLDnaute Nouveau
Bonjour,

Je cherche à trouver le rang des valeurs dans une colonne, en tenant compte des doublons, pour réaliser ceci:

ScreenShot024.png

Sauf que je souhaite avoir une formule matricielle (pour un traitement ultérieur). J'ai la formule matricielle pour la colonne "Rang brut" mais je n'arrive pas à trouver une formule matricielle équivalente à la formule de la colonne "Correction".

J'ai bien trouvé une solution à base de matrices ... mais ce n'est pas tenable pour des colonnes de centaines de lignes !

Trouverez-vous une solution simple ?? Avis aux experts !
 

Pièces jointes

  • XLD_Help.xlsx
    8.7 KB · Affichages: 80
  • XLD_Help.xlsx
    8.7 KB · Affichages: 91
  • XLD_Help.xlsx
    8.7 KB · Affichages: 92

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour aldus,

une solution sans matricielles

à+
Philippe
 

Pièces jointes

  • 111.xlsx
    9 KB · Affichages: 105
  • 111.xlsx
    9 KB · Affichages: 118
  • 111.xlsx
    9 KB · Affichages: 121

hoerwind

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour, salut Philippe,

J'obtiens le même résultat que mon ami Philippe sous son exemple, mais sans faire appel à la colonne B, par cette formule en ligne 2, à copier vers le bas :
Code:
=RANG(A2;A$2:A$13;1)+NB.SI(A$1:A1;A2)
 

aldus_85

XLDnaute Nouveau
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Merci pour ces propositions, qui marchent, mais justement, je cherche à obtenir une formule matricielle pour la loger sous un nom. Or pour pouvoir faire cela, il me faut une formule matricielle.

Or bizarrement, quand je remplace des références par le nom, selon les endroits, j'obtiens une erreur ... que je ne comprends pas ! (cf. feuille jointe)

Une idée ?
 

Pièces jointes

  • XLD_Help.xlsx
    15.5 KB · Affichages: 73
  • XLD_Help.xlsx
    15.5 KB · Affichages: 69
  • XLD_Help.xlsx
    15.5 KB · Affichages: 65

R@chid

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour @ tous,
Salut Philippe, Salut Hoerwind,
pas sur d'avoir bien compris,
essayer en C6 avec,
Code:
=NB.SI.ENS(A$6:A$16;A6;B$6:B$16;"<"&B6)+1
@ valider par Simple Entree
@ tirer vers le bas
@ micalement
 

aldus_85

XLDnaute Nouveau
Challenge pour expert ! échec dans remplacement d'une référence par un nom "calculé"

Bonsoir,

Pour clarifier ce que je cherche, j'ai joint le fichier revu, avec l'unique colonne résultat (pas de colonnes intermédiaires) et qui utilise exclusivement des noms pour référence (cela me permet de ne modifier que les noms pour pouvoir adapter une formule dans des contextes différents).

Sauf que la substitution de "intermed5" à $H$6:$H$16 alors même que intermed5 est la même matrice/vecteur c'est-à-dire a le même contenu que $H$6:$H$16. Attention, intermed5 n'est pas une référence à $H$6:$H$16 mais une zone qui contient la même formule matricielle que celle contenue par $H$6:$H$16.

A noter que çà marche en substituant intermed6 à $H$6:$H$16, avec intermed6 un nom qui fait référence à $H$6:$H$16. Sauf qu'alors je me retrouve avec une colonne intermédiaire, qui même cachée rend la réutilisation de l'outil plus compliquée, ce que je veux éviter.

Donc une question bien technique pour expert qui touche aux fondements du fonctionnement des noms "calculés" sous Excel. D'ailleurs j'aurais peut-être du formuler le problème ainsi. -> j'essaie de changer le titre !
 

Pièces jointes

  • XLD_Help.xlsx
    16.5 KB · Affichages: 79
  • XLD_Help.xlsx
    16.5 KB · Affichages: 82
  • XLD_Help.xlsx
    16.5 KB · Affichages: 76

CISCO

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour,

Ne pourrais pas tu mettre sur le forum un fichier un peu plus simple, sans trois tonnes de noms, et essayer d'expliquer davantage ton besoin... ? Sur ton dernier fichier, il y a plein de #NA. Tu parles qu'on va comprendre facilement ce que tu veux...

@ plus
 

hoerwind

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Re, salut Cisco,

Je partage l'avis de Cisco, je ne comprends pas !

Obtenir toutes les "valeurs" associées à une data donnée, tiées par ordre croissant
- Où se trouvent les valeurs ?
- A quelle data sont-elles associées ?
- Où se trouve le résultat à obtenir ?

Et ceci n'est probablement qu'un début (lol)

J'ai aussi essayé de comprendre le rapport entre la question au départ et l'explication sous le dernier message, sans toutefois y parvenir.
 

eriiic

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour à tous,

Je suis peut-être à coté de la plaque mais à voir la définition de certains de tes noms et si j'ai bien compris ta question tu t'échines à vouloir faire quelque d'impossible à mon avis : avoir une formule matricielle dans un nom.
Comment veux-tu la valider par shift+ctrl+entrée dans la boite de définition du nom ?

Pour t'en convaincre saisi 6 nombres dans A2:B4
et dans une cellule =MAX(A2:A4*B2:B4) que tu es obligé de valider en matriciel.

Met cette même formule dans un nom 'test' et =test dans une cellule tu obtiens 0
Tu peux y mettre une matrice oui, mais une formule matricielle... (????)

eric
 
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Re, salut eriiic,

Pour eric : je ne vois pas bien ce que tu essaies d'expliquer.

Vois la pièce jointe, une formule matricielle en D6.
Cette formule a aussi été nommée test
=test en D8 renvoie bien le résultat attendu.

Il est à noter qu'une formule matricielle n'a pas besoin d'être validée comme telle en la nommant ni en lui faisant appel par le nom qui lui a été attribué.
 

Pièces jointes

  • Formule MatricielleNommee.xlsx
    8.6 KB · Affichages: 72

aldus_85

XLDnaute Nouveau
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour à tous,

Désolé si je n'ai pas été très clair !

En fait j'étais partagé entre un problème très technique (le remplacement de certaines références matricielles par un nom contenant une formule matricielle) et la possibilité d'atteindre mon objectif avec d'autres moyens mais respectant quand même certaines contraintes (pas de colonnes intermédiaires, utilisation de noms, recours préférentiel à des formules matricielles, ...). Du coup j'ai fait un peu des deux mais sans être suffisamment explicites des deux côtés.

Pour Eric: j'adore les trucs impossibles ! ;) En fait, mettre une formule matricielle dans un nom, çà marche très bien, même si les accolades n'apparaissent pas et qu'on ne fait pas ctrl-shit-enter.

Pour Cisco, les #NA étaient une tentative pour expliquer là où les formules auraient dû marcher et ne marchaient pas, tentative ratée. J'ai amélioré la rédaction de l'objectif. Il s'agit de faire un tri dynamique. Mais au lieu de récupérer un tableau des valeurs triées, on récupère un index pour accéder aux valeurs. Par ailleurs, on ne récupère que les enregistrements qui appartiennent à une certaine catégorie donnée.

Bref, j'ai réussi ce que je voulais faire, avec une petite entorse à cause d'une colonne "technique" (la "suite arithmétique") que je n'ai pas su faire disparaître). cf; pièce jointe.

Les enseignements pour moi :
- soit un nom défini par une formule ; à l'utilisation dans une formule, tout se passe comme si on remplaçait chaque occurrence du nom par la formule contenue dans le nom ; il n'y a donc pas de gain sur le nombre maximum d'imbrication des fonctions ; il reste l'intérêt d'une formulation plus compacte et de pouvoir éviter une altération accidentelle des formules
- la fonction DECALER, ne fait que réécrire une référence : donc elle ne marche pas sur une matrice de constantes ; cette fonction pourrait être facilement simulée par l'utilisation d'un INDIRECT qui manipulerait une référence
- il faut distinguer les noms qui fournissent une référence des noms qui produisent une matrice. Pour les premiers, il n'y a jamais de problème. Pour les seconds, cela ne marche pas avec la fonction DECALER, et çà peut poser le problème ci-dessous.
- dans une formule, il ne peut y avoir deux "variables d'itération implicite d'un array" qui ne soient pas synchronisées. Eh oui, il faut s'accrocher ! quand on fait utilise une formule matricielle, implicitement il y a une variable d'itération "i" qui parcoure le vecteur ; eh bien on ne peut pas avoir deux de ces variables, "i" et "j" en même temps, sinon çà fait i=j et du coup certaines formules matricielles n'ont plus de sens. Si quelqu'un peut trouver une meilleure formulation, je suis preneur !

Maintenant, je ne comprends pas pourquoi certaines fonctions comme rang(), NB.SI(), NB.SI.ENS(), posent problème quand les on utilise avec un nom représentant un contenu matriciel (et non une référence) pour certains de leurs arguments. Je n'ai pas su construire un exemple de bug simple ...

Merci à tous pour vous être penchés sur ce problème qu'un moment j'ai cru ne pas pouvoir surmonter !

Bonne journée à vous !
 

Pièces jointes

  • RechercheTriDynamiqueVecteur.xlsx
    11.8 KB · Affichages: 69
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bonjour hoerwind,

Si, je crois que tu as bien compris ce que je voulais dire.
Et j'ai compris pourquoi j'avais 0...
Sur mes tests excel avait changé mes références dans la formule du nom (en mettant =MAX(Feuil1!D1048575:D1*Feuil1!E1048575:E1, mon excel est très coquin parfois), après la fermeture de la boite.
Il me l'a encore refait en testant sur ton fichier et me fait ça régulièrement...

Désolé pour la mauvaise piste, excel calcule bien d'office en matriciel dans les noms.

Au passage ça m'a fait découvrir une bizarrerie qui pourrait être dangereuse si elle se confirme : mon excel ne me retourne pas le même résultat si j'édite dans ton fichier la formule =MAX(A2:A4*B2:B4) directement dans la cellule (=36), ou (sur une cellule neuve) dans la barre d'édition (=10 ?). Et si je refais les 2 mêmes manip dans 2 autres cellules j'obtiens #VALEUR!

Mais je ne veux pas polluer plus le fil d'aldus, d'autant plus qu'il a laissé un peu de lecture juste au-dessus.

eric
 

Pièces jointes

  • MatricielleNommee 3.xlsx
    9.3 KB · Affichages: 66

hoerwind

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Salut eric,

Cela ne pollue pas, cela m’intéresse aussi !

Qu'appelles-tu "barre d'édition" ?
F1 ne reconnait pas cette bestiole !

Les #VALEUR! sous le fichier joint : dans une cellule il faut valider en matricielle.
 

eriiic

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Bon, j'ai l'impression qu'aldus a résolu son pb alors je m'autorise à polluer ;-)

Qu'appelles-tu "barre d'édition" ?

la zone où l'on peut éditer les cellules, au-dessus des lettres des colonnes. (et dans l'autre cas c'est directement dans la cellule après un double-clic).
Mais il faut récrire la formule, pas la copier-coller (on peut saisir les ref à la souris).

Les #VALEUR! sous le fichier joint : dans une cellule il faut valider en matricielle.
Sur 2003 oui mais j'ai l'impression que sur 2010 MAX() est devenue matricielle (mais résultat correct que si on édite directement dans la cellule ?). Regarde en F5, validation normale.

Enfin bref j'ai l'impression de devenir fou (ou mon excel) ;-)

eric

Edit: après nouveau test dans nouveau classeur en fait j'ai l'impression qu'excel 2010 réagit comme si on avait sélectionné plusieurs cellules et validé la formule en matriciel bien que les saisies soient faites individuellement dans chaque cellule (quelque soit la zone d'édition, barre ou cellule) et validées normalement.
Si on saisit sur la ligne 5 (2nde ligne de la matrice) il retourne le produit de la 2nde ligne de la matrice. C'était un hasard que ce soit le max.
Si on saisit sur la ligne 4 (4nde ligne de la matrice) il retourne le produit de la 1ère ligne de la matrice.

Donc, ce que j'en conclu pour l'instant, c'est qu'on peut valider max() normalement sans avoir d'erreur (sur certaines lignes, celles où est déclarée la matrice) mais il n'est pas devenu matriciel pour autant.
Est-ce voulu ? Sûrement mais bon, déroutant...

eric
 
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Challenge ! une formule matricielle pour calculer le rang tenant compte des ex a

Re,

Il me semble, mon cher eric, que ce que tu appelles "barre d'édition" est pour le simple mortel que je suis la "barre de formule".

Pour XL2010, je ne connais pas, je me suis arrêté à la version XL2007 et regrette toujours la convivialité de la précédente.
A chaque fois que je vois le "ruban", cela me laisse l'impression que celui qui l'a conçue voulait probablement impressionner une petite blonde de son entourage immédiat, et qui se prétendait être secrétaire de direction !
 

Discussions similaires

Statistiques des forums

Discussions
312 034
Messages
2 084 808
Membres
102 676
dernier inscrit
LN6