Retourner un objet RANGE avec une fonction
Bonjour,
je voudrais programmer une fonction qui calcule un produit vectoriel, qui fonctionnerait un peu comme la fonction produitmat.
Pas de problème pour récupérer les coordonnées des 2 vecteurs arguments de type RANGE, mais je n'arrive pas à remplir la variable RANGE de sortie.
dans l'aide le type RANGE ne fait pas partie des types cités comme possibles en sortie, mon problème vient-il tout simplement de là, ce que je veux faire est-il impossible ?
Pourtant la fonction produitmat doit bien retourner quelque chose comme un RANGE, non ?
voilà un extrait de code qui ne marche pas (message #valeur dans la cellule résultat) :
Function produitvec(vec1 As Range, vec2 As Range) As Range
x1 = vec1.Cells(1, 1)
produitvec.Cells(1, 1).Value = y1 * z2 - y2 * z1
end function
Si quelqu'un peut m'aider, merci !
Ludovic
Bonsoir
sans voir tout le code, pas évident, mais si tu cherches un produit matriciel, tu ne peux obtenir un objet Range...
Je te propose (à partir de ton code simplifié...)
Function produitvec(vec1 As Range, vec2 As Range) As Long
x1 = vec1
'...
produitvec = y1 * z2 - y2 * z1
'...
End Functionet dans une cellule :
=produitvec(A1;A2)Edit, si tes nombres sont entiers, tu peux utiliser la déclaration en Long
S'ils ce sont des nombres décimaux, utilises la variable Double
Merci pour ta réponse !
Effectivement je n'ai pas mis assez de code, je pensais que le "as range" suffisait à expliquer mon idée...
Un produit vectoriel prend 2 vecteurs (à 3 composantes dans mon cas) et retourne un troisième vecteur à 3 composantes. Mon idée est donc que ma fonction retourne une variable de type matrice à 3 lignes. Ensuite je veux utiliser ma fonction comme j'utilise la fonction produitmat, en entrant la fonction "sous forme de format matriciel", comme il est écrit dans l'aide de la fonction produitmat.
J'ai essayé le type RANGE comme variable de sortie parce que c'est le seul que je connaissais, mais ça ne marche pas.
J'ai continué à fureter sur le web, et j'ai fini par tomber indirectement sur un exemple chez microsoft qui ressemblait à mon besoin, et en l'adaptant un peu ça marche. Il faut utiliser un tableau et le type Variant en sortie (voir le code en fin de post). Ensuite la fonction s'utilise comme n'importe quelle fonction matricielle.
Merci en tous cas pour l'aide !
Ludo
Function produitvec(vec1 As Range, vec2 As Range) As Variant
Dim tmp(1 To 3, 1) As Variant
x1=...
tmp(1, 0) = y1 * z2 - y2 * z1
tmp(2, 0) = z1 * x2 - z2 * x1
tmp(3, 0) = x1 * y2 - x2 * y1
produitvec = tmp
End Function