Produit matriciel
Hello Forum,
J'ai essayé de faire deux produits matriciels dans une formule mais je bloque à deux endroits ... Mon but est d'écrire un code VBA où les cellules ne sont pas fixe ->utilisation du Count. J'y suis presque arrivé mais pas pour la matrice en feuille4 (Dimmatrice).
On pourrait également simplifier les codes en utilisant NbTitres qui est variable. Les matrices Transposéestitres, TransposéePondérations et Pondération sont de type NbTitres *1. Dimmatrice est de type NbTitres*NbTitres --> matrice carrée.
Vous l'aurez compris, certaines données sont en feuille 1 et d'autres en feuille 4
Si dessous, vous trouverez mon avancée dans le code.
Sub matrice()
NbTitres = Application.WorksheetFunction.CountA(Feuil1.Range("$A:$A")) - 1
'Problème 1: Insertion des titres en dessus de la matrice
Transposéetitres = Application.WorksheetFunction.Transpose(Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).value)
Sheets("feuil4").Cells(Cells(2, 2), Cells2, 5).Value) = Transposéetitres ' je ne dois pas avoir 5 mais NbTitres
'Problème 2: Calcul produit matriciel
TransposéePondérations = Application.WorksheetFunction.Transpose(Range("D2:D" & Range("D" & Rows.Count).End(xlUp).Row).value)
Pondération = (Range("D2:D" & Range("D" & Rows.Count).End(xlUp).Row).value)
Dimmatrice =(Sheets("feuil4").(Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row)),(Sheets("feuil4").Range(.Cells(3, NbTitres)), .Cells(3,.Cells(3,Rows.Count).End(xlUp).Row).value)) 'ne marche pas... problème se situe à ce niveau (je pense)
Sheets("Feuil1").Cells(2, 7).Value = Sqr(Application.WorksheetFunction.MMult(Application.WorksheetFunction.MMult(TransposéePondérations, Dimmatrice), Pondération)) 'calcul de la racine de 2 produit mat
End Sub Merci d'avance pour votre aide!
Salut,
On ne voit pas trop où tu veux en venir avec ton code. Il y a passablement d'erreurs et c'est difficile de comprendre l'ensemble.
Par exemple rien que pour ton instruction Sheets("feuil4").Cells(Cells(2, 2), Cells2, 5).Value) = Transposéetitres tu as fait l'erreur d'utiliser Cells(Cells(2,2),Cells(x,x)) au lieu de Range(Cells(x,x),cells(x,x)), tu as écrit Cells2,5) au lieu de cells(2,5) , tu utilises Value qui est probablement inutile, etc., etc.
Selon moi le plus simple serait donc que tu nous dises ce que tu désires réaliser – mais si possible qu’un seul problème à la fois – et que l’on voie comment on peut t’aider à corriger ton code.
Cordialement.
Ok
Laissons tomber le problème 1, cela n'est pas important
Sur le fichier en annexe, tout est mis sur la feuille 1 et le résultat souhaité se trouve à la cellule G3. Il me faut donc traduire cette formule Excel en VBA. Ma difficulté réside dans le fait que les matrices n'ont pas de valeur fixes (par contre la valeur de départ en 1;1 l'est toujours). C'est pour ça que j'ai introduits des count mais je ne sais pas si c'est juste.
Merci de votre aide !
Re-bonjour,
J’ai placé le code ci-dessous dans le fichier ci-joint ; celui-ci inscrit ta formule dans le cellule G3, mais je ne pense pas que ce soit vraiment ce que tu désires.
Sub aa()
Range("G3").FormulaArray = "=SQRT(MMULT(MMULT(TRANSPOSE(R[-1]C[-3]:R[3]C[-3]),R[-1]C[2]:R[3]C[6]),R[-1]C[-3]:R[3]C[-3]))"
End SubPar contre j’ai cherché un peu sur Internet et je n’ai pas réussi à savoir comment on pourrait traduire réellement une formule matricielle en VBA à l’instar de la traduction d’une formule traditionnelle avec des codes tels que
Variable_X = WorksheetFunction.CountIf(Range("A4:A10"), "")ou
Variable_Y = Application.Sum(Range("E3:K3"))Il y a bien des pistes avec des codes tel que celui ci-dessous, mais je n'ai pas réussi à l'appliquer à ton problème :
Variable_Z = Evaluate("SUM((A1:A25=0)*(B1:B25="z")*C1:C25)")Je te propose alors que tu indiques ce fil comme “Résolu” – peu de membres s’intéressant encore à un fil bien entamé – et que tu en recommences un nouveau sans parler de tes essais, mais uniquement en posant la question simplement, un peu comme j’explique le problème ci-dessus. Si tu préfères, je pourrais placer moi (puisque je suis également intéressé par la réponse) une question sur le Forum à ce sujet et tu pourrais en suivre le fil. Si jamais, à toi de me dire.
Sinon, désolé de n'avoir pu t'aider mieux
Cordialement.
Merci pour ta réponse,
Une solution serait de remplacer les y par le nbtitres (nb de x des matrices) directement dans la formule mais je n'y arrive pas ...
Comme tu connais surement mieux le forum, je te serai reconnaissant de poser la question. Elle sera bien plus adaptée que mon langage de novice
Mets moi simplement l'intitulé de la nouvelle discussion en réponse !
Merci encore pour ton aide
Student