VBA Formule Matricielle/Array

Fermé
Poly101 - 13 févr. 2010 à 02:55
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 15 févr. 2010 à 18:51
Bonjour,

Je cherche de l'aide pour l'écriture d'une formule matricielle dans VBA, plus precisement avec la fonction Produitmat.

Alors mon code qui fonctionne pas est comme suit

Dim TailleSim long
Dim T long

TailleSim = 100
T = 60

i = 1
Do Until i = 13

Sheets.Add.Move After:=Sheets(Sheets.Count)

For C = 5 To T Step 5
For B = 1 To T - 5 Step 5

Sheets(Sheets.Count).Range(Cells(2, 2), Cells(TailleSim, 5)).Select
Selection = Application.WorksheetFunction.MMult(Sheets("NormRand").Range(Cells(1, B), Cells(TailleSim, C)), Application.WorksheetFunction.Transpose(Sheets("Cholesky").Range("B14", "F18")))

Sheets(Sheets.Count).Name = "Alea Month" & i

Next B
Next C
i = i + 1
Loop

Donc comme vous le voyez je cree plusieurs feuilles, et a chaque fois dans chaque feuille nouvelle je veux créer une matrice produit de deux autres matrices dont l'une est dynamique et qui change a chaque fois que change de feuille, elle provient egalement d'une feuille de mon classeur qui s appel NormRad et correspond a ses colones. Donc a chaque fois:

1) je cree une feuille
2) je selectionne la ou je veux ma matrice dans celle-ci
3) je calcule ma matrice en selection des colonnes de NormRand
4) le cycle recommence jusqu a crée 12 feuilles avec 12 matrices.

Mon probleme c'est de dire a Excel en VBA, pour chaque nouvelle feuille lorsque tu calcule la matrice tu avances dans les colonnes de NormRand de 5 colonnes entre le debut et la fin de la matrice de NormRand précédement selectionné

Sur le net j'ai trouvé de l'info par rapport a une Array formula qui dans mon cas donnerait:

Selection.FormulaArray = "=MMult(NormRand!A1:E100,Transpose(Cholesky!B14:F18))" et sa fonctionne, mais mes colonnes de NormRand selectionné sont fixes ce qui m'arrange pas.

Vous remarquerez que la reference a la feuille et l'ecriture meme de l'equation n'est pas comme a lhabitude soit Application.WorksheetFunction, et la reference a la feuille du classeur et au range n'est pas la meme, donc pouvez vous s'il vous plait me dire comment referez aux cellules avec Array.formula pour que ce soit dynamique comme dans ma precedente boucle ou alors de modifier ma boucle initiale pour qu elle fonctionne.


LES SUGGESTIONS SONT LES BIENVENUES quelqu'elles SOiENT!

Merci!!!
A voir également:

2 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
13 févr. 2010 à 07:15
Bonjour,

Pour la 2nde formulation tu peux concatener des chaines et intercaler des variables.
Par exemple:
"=MMult(NormRand!A1:E100,Transpose(Cholesky!B14:F18))"
deviendrait:
c=5
i=100
"=MMult(NormRand!A1:" & chr(c+64) & i & ",Transpose(Cholesky!B14:F18))"

Je te laisse tester...
eric
0
Bonjour,

j'ai essayé comme tu m'as suggeré mais ca fonctionne pas, il passe a travers la boucle mais dans la meme feuille alors que moi je veux qu'il passe dans la boucle pour une feuille puis saute de feuille, change de colonnes pour les ranges et effectue a nouveau le calcul, voila le code reecrit au cas ou il y aurait une erreure que je n'ai pas vue, je dois avouer que je suis pas famillier avec la fonction CHR:

Do Until i = 13
For C = 0 To T
For B = 0 To T - 5
( TailleSim est un long = 100 generalement)


Sheets(Sheets.Count).Range(Cells(2, 2), Cells(TailleSim + 1, 6)).Select
Selection.FormulaArray = "=MMult(NormRand!" & Chr(65 + B) & 1 & " : " & Chr(69 + C) & TailleSim & ",Transpose(Cholesky!B14:F18))"
Sheets(Sheets.Count).Name = "Alea Month" & i

Next B
Next C
i = i + 1
Loop
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
15 févr. 2010 à 18:51
Bonjour,

Je ne m'étais penché que sur cette partie là :
Selection.FormulaArray = "=MMult(NormRand!A1:E100,Transpose(Cholesky!B14:F18))" et sa fonctionne, mais mes colonnes de NormRand selectionné sont fixes ce qui m'arrange pas.

il passe a travers la boucle mais dans la meme feuille
Oui, tu as enlevé le Sheets.Add...., donc tu restes toujours sur la dernière feuille

je suis pas familier avec la fonction CHR
Chr() retourne le caractère dont on lui fournit le code ascii, 65>=A, 66=>B, ... pour fabriquer ta référence variable.
Vu que ta référence commençais toujours par A1: tu pouvais le laisser sous forme de chaine, pas la peine de rajouter des formules là où ce n'est pas nécessaire.

Et moi c'est avec MMult() que je ne suis pas familier...
Le mieux c'est de déposer un exemple de ton fichier sur cijoint.fr et de coller ici le lien fourni.
Si en plus de ta macro tu pouvais mettre sur une feuille un exemple fonctionnel de cette fonction (en formule donc) ça aiderait pour connaitre ses paramètres et tester ce qu'elle retourne.
A moins que remettre le Sheets.Add ait été suffisant....

eric
0