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
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
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
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
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
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!
"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!
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!
Starwing
Eh bien Bravo!
-- Au plaisir de vous revoir ... Visitez >> http://www.excelabo.net Le merveilleux site de Misange Starwing
--
Eh bien Bravo!
--
Au plaisir de vous revoir ...
Visitez >> http://www.excelabo.net
Le merveilleux site de Misange
Starwing
brault-lavoieNOSPAM@sympatico.ca
--