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 !