XL 2016 VBA fonction personnalisée

solgti

XLDnaute Junior
Bonjour je tente de créer un fonction personnalisée qui pour sont calcul devra utiliser des données en array récupérées d'un tableau Excel.
Si je fais une procédure le array fonctionne (voir TestS dans le fichier joint)
mais si je fais un fonction le array ne fonctionne pas (voir TestF dans le fichier joint)

Ce que je souhaite en bout de ligne c'est d'avoir une fonction qui pourra être appelé d'une cellule avec des arguments, comme par exemple dans mon fichier:
=TestF("A1";"2015-02-06") retourne la valeur 100
En attendant je bloque simplement sur l'array
Si vous tester avec le Bouton 1, ça écrit la colonne 1 de l'array dans la colonne F
et si vous tester la fonction TestF qui est dans la cellule E4, ça devrait écrire la colonne 1 dans la colonne G, mais tous ce que ça fait c'est #Valeur!
J'espère que c'est clair.
MErci
solgti
 

Pièces jointes

  • Test.xlsm
    18.2 KB · Affichages: 40

Dranreb

XLDnaute Barbatruc
Bonsoir.
Une formule de cellule invoquant (ou non) une fonction personnalisée ne peut rien changer de dur dans un classeur, elle ne peut en particulier pas changer le contenu de cellules. (Du moins pas par ses seuls moyens propres … mais … il y a une ruse …)
Tout ce qu'elle peut faire c'est changer la valeur de la cellule ou de la plage matricielle qui la porte selon ce qu'elle retourne.
Par ailleurs elle doit en principe admettre des paramètres, sinon Excel n'est pas fondé à devoir la réévaluer quand les données sur lesquelles elle se base secrètement changent.
Une Function invoquée différemment, par VBA, en dehors d'une phase d'évaluation de formule peut en revanche modifier ce qu'elle veut.
 
Dernière édition:

solgti

XLDnaute Junior
En fait, mon objectif est de faire une fonction de type financière qui calcul le rendement annuel d'un placement qui peut avoir eu au fil du temps des dépôts et des retraits, ces dépôts et retraits sont dans un base de données.
Exemple:
Placement "A" dépôt initial 1000$ le 2014-12-31
Placement "A" dépôt 250$ le 2015-06-30
Placement "A" retrait 100$ le 2015-09-30
Placement "A" dépôt 200$ le 2016-06-30
Valeur actuelle 1500$ en date du 2016-11-30

Donc la fonction rendement annuelle doit utiliser comme paramètre les données du placement
je voudrais inscrire dans la cellule A1 le nom du placement, ici Placement "A" et dans la cellule B1 la fonction =RendementAnnuel(A1)
la fonction recherche dans la base de données tous les montants et retourne dans la cellule B1 le % de rendement.

Donc pour ce faire la fonction doit trouver tous les mouvements monétaire dans la BD, mais toutes mes tentatives ne permettent pas de faire un recherche dans un tableau, onter un array et faire le calcul et le retourner.

j'espère que je suis explicite.

merci

solgti
 

Dranreb

XLDnaute Barbatruc
Donc la fonction rendement annuelle doit utiliser comme paramètre les données du placement
Donc ça commence par :
VB:
Function TestF(ByVal PlgPlac As Range) As Double
Dim DonPlac()
DonPlac = PlgPlac.Value
'…
Le reste je n'ai pas compris.
Mais à condition qu'elle affecte un résultat de calcul à son propre nom, cette fonction pourrait attribuer cette valeur de résultat à une cellule qui porterait :
Code:
=TestF(Tableau_De_Données)
 
Dernière édition:

Discussions similaires

Réponses
16
Affichages
472
Réponses
5
Affichages
279
Réponses
0
Affichages
148

Statistiques des forums

Discussions
312 195
Messages
2 086 076
Membres
103 111
dernier inscrit
Eric68350