Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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!
 
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

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.
 
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

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
287
Réponses
1
Affichages
89
  • Question Question
Microsoft 365 Traitement
Réponses
7
Affichages
131
Retour