De: Laurent Longre Objet: Re: Optimisation passage ByRef, ByVal Date : lundi 25 septembre 2000 15:59 Olivier, "Olivier Berthier W.N." a écrit : > > 1. passer tous les parametres en ByVal, et inverser les parametres > non "A" mais a ce moment on penalise inutilement les fonctions > appelees depuis une feuille de calcul. En fait je ne pense pas que ça les pénalise, parce que, que les arguments soient déclarés ByRef ou ByVal, ils sont toujours passés par valeur quand la fonction est appelée depuis une feuille de calcul. A moins que si ils sont déclarés ByVal, il y ait dans ce cas création de deux temporaires successifs? Je ne sais pas, mais ça m'étonnerait beaucoup. Il faudrait peut-être faire des tests de vitesse sur des gros tableaux pour en être sûr. > 2. dupliquer d'office les inputs a l'interieur des fonctions dans le > cas d'un appel par une autre fonction VB. comment reperer ce cas la ? > les fonctions sur feuille ne sont alors pas penalisees. Pour détecter si une fonction a été appelée par VBA ou par une formule, tu peux passer par Application.Caller: Function FCTFORMULE(Param) As Boolean If Not TypeOf Application.Caller Is Range Then FCTFORMULE = FCTVBA(Param) Else ' Appel par une formule... ' ... End If End Function Private Function FCTVBA(ByVal Param) As Double ' Appel par VBA... '... End Function > 3. rester en ByRef, et reinverser les inputs a la sortie de la fonction > dans le cas non "A". Il n'y donc pas de copie de tableau en memoire et > le cas general est plutot rapide (par contre, s'il y a une inversion...) > 4. rester en ByRef et faire attention lors de l'appel, cad dupliquer > les inputs avant l'appel. dangereux si non documente. Là, c'est mon neurone que tu es en train de dangereusement inverser... ;-) Laurent