OVH Cloud OVH Cloud

Fontion matricielle définie par l'utilisateur

4 réponses
Avatar
nex
Depuis quelques temps, j'essaie en vain de définir une fonction matricielle
en VBA utilisable dans une feuille de calcul. Je pense en particulier à une
fonction permettant de calculer le produit vectoriel de 2 vecteurs 3x1. J'ai
donc écrit cette fonction :

Function ProdVect(a, b)
Dim result(2) As Double
result(0) = a(1) * b(2) - a(2) * b(1)
result(1) = a(2) * b(0) - a(0) * b(2)
result(2) = a(0) * b(1) - a(1) * b(0)
ProdVect = result
End Function

Elle marche très bien lorsque je l'appelle à partir d'une procédure, mais
pas depuis une cellule (un groupe de 3 cellules plus exactement). J'ai
pourtant essayé d'avoir les entrées et/ou les résultats en lignes ou en
colonnes, et je connais l'utilisation du CTRL+Shift+Entree.

Quelqu'un connaitrait-il une solution? D'avance merci

4 réponses

Avatar
Starwing
Bonjour nex,

La procédure de Garnote pourrait-elle t'aider?

Voici une fonction personnalisée permettant d'obtenir le
produit vectoriel de deux vecteurs.

Function pv(uv As Range)
'Par Serge, dit Garnote
i = uv(1, 2) * uv(2, 3) - uv(2, 2) * uv(1, 3)
j = uv(1, 3) * uv(2, 1) - uv(1, 1) * uv(2, 3)
k = uv(1, 1) * uv(2, 2) - uv(2, 1) * uv(1, 2)
pv = Array(i, j, k)
End Function

Un exemple : Évaluer (1,2,1) X ( 5,6,8).
1. Jécris les composantes du premier vecteur
dans A1:C1 et celles du deuxième dans
A2:C2

A B C
1 2 1
5 6 8

2. Je sélectionne trois cellules adjacentes
sur une même ligne et entre la fonction
=pv(A1:C2)

3. Je valide par Ctrl+Maj+Entrée


Starwing
Avatar
Frédéric Sigonneau
Bonsoir,

Visiblement tes paramètres a et b sont des tableaux et dans une feuille de
calcul tu les utilises avec des plages de cellules. Si c'est bien ça, ton
problème vient de là. Les plages de cellules sont des tableaux
- à 2 dimensions
- de base 1
alors que ta fonction traite des tableaux à une seule dimension et de base 0.

Sans avoir vraiment testé, cette première adaptation de ta fonction pourrait te
servir de point de départ :

Function ProdVect(a, b)
Dim result(2) As Double
result(0) = a(2, 1) * b(3, 1) - a(3, 1) * b(2, 1)
result(1) = a(3, 1) * b(1, 1) - a(1, 1) * b(3, 1)
result(2) = a(1, 1) * b(2, 1) - a(2, 1) * b(1, 1)
ProdVect = result
End Function

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Depuis quelques temps, j'essaie en vain de définir une fonction matricielle
en VBA utilisable dans une feuille de calcul. Je pense en particulier à une
fonction permettant de calculer le produit vectoriel de 2 vecteurs 3x1. J'ai
donc écrit cette fonction :

Function ProdVect(a, b)
Dim result(2) As Double
result(0) = a(1) * b(2) - a(2) * b(1)
result(1) = a(2) * b(0) - a(0) * b(2)
result(2) = a(0) * b(1) - a(1) * b(0)
ProdVect = result
End Function

Elle marche très bien lorsque je l'appelle à partir d'une procédure, mais
pas depuis une cellule (un groupe de 3 cellules plus exactement). J'ai
pourtant essayé d'avoir les entrées et/ou les résultats en lignes ou en
colonnes, et je connais l'utilisation du CTRL+Shift+Entree.

Quelqu'un connaitrait-il une solution? D'avance merci


Avatar
nex
"Starwing" wrote:

Bonjour nex,

La procédure de Garnote pourrait-elle t'aider?

Voici une fonction personnalisée permettant d'obtenir le
produit vectoriel de deux vecteurs.

Function pv(uv As Range)
'Par Serge, dit Garnote
i = uv(1, 2) * uv(2, 3) - uv(2, 2) * uv(1, 3)
j = uv(1, 3) * uv(2, 1) - uv(1, 1) * uv(2, 3)
k = uv(1, 1) * uv(2, 2) - uv(2, 1) * uv(1, 2)
pv = Array(i, j, k)
End Function

Un exemple : Évaluer (1,2,1) X ( 5,6,8).
1. Jécris les composantes du premier vecteur
dans A1:C1 et celles du deuxième dans
A2:C2

A B C
1 2 1
5 6 8

2. Je sélectionne trois cellules adjacentes
sur une même ligne et entre la fonction
=pv(A1:C2)

3. Je valide par Ctrl+Maj+Entrée


Starwing


Merci beaucoup, Starwing, de ton aide précieuse (et, par délégation à
Garnote). Ca marche du feu de Dieu!
Je viens de comprendre également un certains nombres de dysfonctionnements
de mes fonctions définies en VBA!

Avatar
Starwing
Eh bien Bravo!

--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing

--