Problème pour récuoérer les resultats de ma fonction

cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 - 6 nov. 2010 à 13:28
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 - 7 nov. 2010 à 15:40
Bonjour,

Je cherche a utiliser une fonction dans un programme pour inverser une matrice.
J'ai trouver la fonction qui va bien a l'adresse suivante:
http://www.vbfrance.com/codes/INVERSION-MATRICES_23266.aspx

Le Pb c'est que je n'arrive pas a récupérer le résultat de cette fonction.

Je doit m'y prendre comme un manche. je comprends pas.
Comment dois-je faire pour que la matrice devienne la matrice inversée???

Merci d'avance

Ma commande est la suivante:

Sub test()
Dim Matrice(6, 6) As Double
For Row = 1 To 6
For Column = 1 To 6
Matrice(Row, Column) = Cells(5 + (Row - 1), 3 + (Column - 1))
Next
Next
Call InverseMatrice(Matrice())
For Row = 1 To 6
For Column = 1 To 6
Cells(12 + (Row - 1), 3 + (Column - 1)) = Matrice(Row, Column)
Next
Next
End Sub

11 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
6 nov. 2010 à 14:18
Bonjour Vevel,
Je suppose que tu travail avec Vb6 et excel ...
Réponse rapide: (.value)

Matrice(Row, Column) = Cells(5 + (Row - 1), 3 + (Column - 1)).value

et
Cells(12 + (Row - 1), 3 + (Column - 1)).value = Matrice(Row, Column)

si c'est du vb.net n'oublie pas la virgule dans les fonctions:
Matrice(,)
Ensuite un bon débogage te sera utile ...

Deplus il me semble qu'il exite une fonction transpose existe sous excel
http://perso.fundp.ac.be/~jmlamber/xl/transpose/transpose.html
elle peut s'executer également par le code.
Cordialement CGSI3
0
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
6 nov. 2010 à 14:41
Merci pour cette rapidité de réponse

Mais malheureusement, ca ne résout rien au pb.
en fait la macro me réécrit la matrice de départ. avec ou sans le ".value" d'ailleurs.

Pourtant quand je regarde la fonction en pas a pas, les valeurs semblent bonnes...

Je sais qu'il existe cette fonction que je pourrais utiliser. Mais j'ai besoin de passer par une fonction VB.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 nov. 2010 à 14:47
Bonjour,

Et si à la place de
Call InverseMatrice(Matrice())
Tu fais :
Matrice()= InverseMatrice(Matrice())

ça donne quoi ?

0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
6 nov. 2010 à 14:50
By ref / By val ?
En fait je pense que ta fonction ne renvoi rien ou plutot
elle ne change rien a la matrice de départ. (verifie)

Pour exemple en vb.net cela donne ça:

Function Transposer_Matrice(ByRef Matrice As Single(,)) As Single(,)
'Author : CGSI3 But: Transpose une matrice en vb.net
Dim ltTab As Single(,), Max1 As Integer, Max2 As Integer
Max1 Matrice.GetUpperBound(0) : Max2 Matrice.GetUpperBound(1)
ReDim ltTab(Max2, Max1)
For cp1 As Integer = 0 To Max1
For cp2 As Integer = 0 To Max2
ltTab(cp2, cp1) = Matrice(cp1, cp2)
Next cp2
Next cp1
Return ltTab
End Function

Cordialement CGSI3
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
6 nov. 2010 à 14:54
J'avais essayer Matrice()= InverseMatrice(Matrice())

mais j'ai un message d'erreur qui me surligne la partie souligne ci-dessus et qui dit:

Erreur de compilation:
Impossible d'affecter à un tableau
0
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
6 nov. 2010 à 14:58
Nan effectivement CGSI3 ca ne change rien a la matrice de depart...

j'ai essayer d'enlever le ByRef dans la fonction, mais ca marche toujours pas
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
6 nov. 2010 à 15:06
Je suis en manque d'idée,
Voici juste le code pour la fonction transpose d'excel

Dim myData() as variant
...

Dim MyTransposedData() as variant
myTransposedData() = Application.WorksheetFunction.Transpose(myData)

Cordialement CGSI3
0
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
6 nov. 2010 à 15:19
Je viens d'essayer comme tu dis avec:
Dim myData() as variant
Dim MyTransposedData() as variant
myTransposedData() = Application.WorksheetFunction.Transpose(myData)

J'ai un message d'erreur disant "l'indice n'appartient pas a la selection" lorsqu'il commence a charger la premiere valeur de myData(1,1)

et si je change comme ceci
Dim Matrice(6, 6) As Variant
Dim myTransposedData(6, 6) As Variant

J'ai un message d'erreur disant "Impossible d'affecter a un tableau" en surlignant:
myTransposedData() = Application.WorksheetFunction.Transpose(Matrice)
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
6 nov. 2010 à 15:31
0
Utilisateur anonyme
6 nov. 2010 à 17:44
Salut,

Si tu change ByRef par ByVal dans ta fonction et ainsi faire :
Matrice()= InverseMatrice(Matrice()) 

Ca devrait marcher non ?
0
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
7 nov. 2010 à 15:40
Salut
En faîte, c'est l'argument de la fonction "InverseMatrice" qui sert de passerelle aux variables modifiées, ici c'est la variable "Matrice" de type tableau. Donc à la fin de la Fonction "InverseMatrice", il faut affecter les valeurs de la matrice inverse à la variable(ici tableau) passée en argument.

Suite: la fin de la fonction
' retourne le résultat : la deuxième partie de la matrice M()
ReDim MInv(n, n)
For i = 1 To n
For j = 1 To n
MInv(i, j) = M(i, j + n)
Matrice(i, j) = MInv(i, j)
Next
Next
'InverseMatrice = MInv()

End Function


CNTJC
0
Rejoignez-nous