Calcul matrice

Jerome91270

XLDnaute Nouveau
Bonjour à tous,

Etant débutant, j'ai besoin de votre aide car je suis complètement bloqué.

J'ai une feuille de calcul dans laquelle j'ai une Matrice M 3x3 de type colonne.

Le but est de calculer une puissance n de cette Matrice en faisant varier les coefficients.

Jusque là pas de problème:
Je rentre manuellement mes coefficients dans la Matrice M, je rentre la variable n et excel me calcul M^n (grâce à un code VBA que j'ai trouvé sur google). ça fonctionne.

Le hic, c'est que j'ai un tableau de données (Tableau 1) qui me donne les coefficients sur une même ligne. Exemple: ligne 1 du Tableau 1, je vais avoir les 3 coefficients de la colonne 1, suivi des 3 coefficients de la colonne 2 et suivi des 3 coefficients de la colonne 3. Le tout donc sur une même ligne.

Les résultats doivent être reportés (dans le Tableau 2) également sur une même ligne: les coefficients de la colonne 1, suivi de colonne 2, suivi de colonne 3.

Etant donné que je vais avoir un très grand nombre de matrice à calculer, il est impossible de rentrer à la main les coefficients du Tableau 1 pour chaque matrice et de reporter ensuite toujours manuellement les résultats dans le Tableau 2.

Comment faire pour faire rentrer les coefficients du Tableau 1 automatiquement dans la Matrice M et d'avoir le résultats dans le Tableau 2? A chaque ligne du Tableau 1 correspond une nouvelle matrice à calculer, et chaque ligne du Tableau 2 est le résultats correspondant.

J'espère ne pas trop être flou...

En tout cas, merci d'avance pour votre aide très précieuse!!

En pj, le fichier correspondant.

Jérôme
 

Pièces jointes

  • calcul matrice.xls
    44.5 KB · Affichages: 35

Hieu

XLDnaute Impliqué
Salut,

Avec l'exemple :
VB:
Sub mlk()
For i = 1 To 3

Range("b15:d17").Offset(0, k).Copy
Range("b6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Range("I6:K8").Copy
Range("m15").Offset(0, k).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
k = k + 3
Next i
Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • calcul matrice_v0.xls
    49.5 KB · Affichages: 24

Jerome91270

XLDnaute Nouveau
Merci beaucoup pour ta réponse! Mais désolé, ça ne fonctionne pas comme je le voudrais...

je vais essayer d'être plus concret:

Dans le Tableau 1:
- il faut que les cellules B15, C15, D15, se retrouvent respectivement en B6, B7, B8 (colonne 1 de la matrice M)
- il faut que les cellules E15, F15, G15, se retrouvent respectivement en C6, C7, C8. (colonne 2 de la matrice M)
- il faut que les cellules H15, I15, J15, se retrouvent respectivement en D6, D7, D8 (colonne 3 de la matriceM)

Et pour les résultats:
Dans le tableau 2:
- il faut que les cellules I6, I7, I8 se retrouvent respectivement en M15, N15, 015
- il faut que les cellules J6, J7, J8 se retrouvent respectivement en P15, Q15, R15
- il faut que les cellules K6, K7, K8, se retrouvent respectivement en S15, T15, U15

Et ainsi de suite pour chaque ligne du Tableau

Merci!
 

Hieu

XLDnaute Impliqué
Deuxieme test :
VB:
Sub mlk()
For i = 1 To 3
Range("a1") = i

    Range("i6:i8").Copy
    Range("m14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("j6:j8").Copy
    Range("p14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("k6:k8").Copy
    Range("s14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

Next i
Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • calcul matrice_v1.xls
    50 KB · Affichages: 34

Jerome91270

XLDnaute Nouveau
Merci c'est beaucoup mieux!!
Par contre ça ne marche pas si on met une ligne supplémentaire dans le Tableau 1... Je vais avoir des centaines de lignes dans le Tableau 1. Dès que je mets une ligne de coefficients supplémentaires et que je lance la macro, elle travaille seulement sur les 3 premières lignes du Tableau 1, ignorant la 4eme ligne.

Pour info, ça ne marche pas non plus si je n'ai q'une seule ou deux lignes dans le Tableau 1.
 

Hieu

XLDnaute Impliqué
salut,

Une petite modif ; dans la cellule "b11", le nombre de lignes à traiter
VB:
Sub mlk()
Range("m15:u1000").ClearContents
nb_lig = Range("b11")
For i = 1 To nb_lig
    Range("a1") = i

    Range("i6:i8").Copy
    Range("m14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("j6:j8").Copy
    Range("p14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("k6:k8").Copy
    Range("s14").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

Next i
Application.CutCopyMode = False
End Sub
 

Pièces jointes

  • calcul matrice_v2.xls
    50 KB · Affichages: 22

job75

XLDnaute Barbatruc
Bonsoir Jerome91270, Hieu,

Avec cette fonction VBA :
Code:
Function Resu(P As Range, puissance, col%)
Dim t, matrice
t = P 'matrice, plus rapide
ReDim matrice(1 To 3, 1 To 3)
For i = 1 To 9
  matrice(1 + (i - 1) Mod 3, 1 + Int((i - 1) / 3)) = t(1, i)
Next
Resu = Application.Transpose(Application.Index(puissancemat(matrice, puissance), , col))
End Function
Formule à valider matriciellement sur toute la plage M15:O15 =Resu($B15:$J15;$G$3;M$14)

Copier cette plage et la coller à droite sur P15:R15 et S15:U15.

Enfin tirer la plage M15:U15 vers le bas autant que de besoin.

Fichier joint.

Bonne nuit.
 

Pièces jointes

  • calcul matrice(1).xls
    75.5 KB · Affichages: 23

job75

XLDnaute Barbatruc
Bonjour Jerome91270, Hieu, le forum,

On peut simplifier en transposant la matrice dès le début :
Code:
Function Resu(P As Range, puissance, col%)
Dim t, matrice, i%
t = P 'matrice, plus rapide
ReDim matrice(2, 2) '3 x 3 en base 0
For i = 1 To 9
  matrice(Int((i - 1) / 3), (i - 1) Mod 3) = t(1, i) 'transposée
Next
Resu = Application.Index(puissancemat(matrice, puissance), col)
End Function
Fichier (2)

Bonne journée.
 

Pièces jointes

  • calcul matrice(2).xls
    73.5 KB · Affichages: 34

Discussions similaires

Statistiques des forums

Discussions
312 570
Messages
2 089 768
Membres
104 271
dernier inscrit
acuponctus