XL 2010 Produit de matrices définies en tant que constantes matricielles

pruvieros

XLDnaute Nouveau
Bonjour,
Je cherche à multiplier des matrices définies en tant que constantes matricielles nommées.
Cela fonctionne bien lorsque j'utilise directement le nom des matrices: {PRODUITMAT(MatriceA;MatriceB)}

Mais les choses se gâtent lorsque je place en J8 le nom de l'une des deux matrices et que je cherche à le passer en tant que paramètre:{PRODUITMAT(INDIRECT(J8);MatriceB)}

J'obtiens la valeur d'erreur #REF.

Or j'ai 15 constantes matricielles différentes (et de dimensions différentes) qui doivent intervenir dans des calculs matriciels (Calculs de tendance) sur 30000 lignes. La constante matricielle utilisée par chaque ligne est choisie par son nom au travers d'une liste déroulante.

Merci par avance pour vos lumières...

PRUVIEROS

J'ai d'abord essayé de m'en tirer par une fonction personnalisée en VBA, qui fonctionne bien, mais comme il y a 30000 lignes, j'ai des temps de calcul trop longs apparemment liés au fait qu'Excel gère moins efficacement l'optimisation des priorités de recalcul lorsqu'il y a des fonctions personnalisées.

Je m'en suis donc tiré d'une manière acrobatique, grâce à la fonction DECALER qui navigue dans une énorme plage qui regroupe mes 15 constantes matricielles. Mais ce n'est pas élégant, et trop opaque pour les futurs utilisateurs
 

Pièces jointes

  • constantes matricielles.xlsx
    11.1 KB · Affichages: 36

Iznogood1

XLDnaute Impliqué
Bonjour,

sauf erreur de ma part, Indirect ne peut par "lire" des valeurs.
=> Tu peux l'utiliser pour retourner un plage donnée, mais pas le contenu d'une matrice

Enfin, manifestement elle ne fonctionne pas avec des plages dynamiques.
Voir exemples ci-joint
 

Pièces jointes

  • Copie de constantes matricielles.xlsx
    11.9 KB · Affichages: 33
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Et vous ne pouvez vraiment pas mettre vos matrices dans des cellules ?
Cela dit je ne vois pas pourquoi cette fonction perso ralentirait les temps de calcul :
VB:
Function Éval(ByVal Nom As String)
Éval = Evaluate(Nom)
End Function
En J9:K9 validé par Ctrl+Maj+Entrée :
Code:
=PRODUITMAT(MatriceA;Éval(J8))
 

Statistiques des forums

Discussions
312 219
Messages
2 086 372
Membres
103 198
dernier inscrit
CACCIATORE