OVH Cloud OVH Cloud

Paramêtre d'une fonction

10 réponses
Avatar
Le NooB
Bonjour,

je bloque depuis deux semaines sur un problème :
comment appeler les valeurs de champs d'enregistrements successifs pour
paramétrer une fonction, le nombre d'enregistrements étant variable :

j'ai une table avec un champ "flux", un autre "temps"

je voudrais remplacer les éléments p et d dans ma fonction par les valeurs
des champs "flux" et "date" :

dim p(1) as double
p(0) = - 10 000
p(1) = 12 000

dim d(1) as date
d(0)=#1/1/1994#
d(1)=#1/3/2004#

comment faire ?

question déjà posée le 29/12 (xirr/tripaiment)

10 réponses

Avatar
Raymond [mvp]
Bonjour.

à mon avis il faut déclarer deux tableaux D() et T() dont la valeur de
chaque élément sera la valeur donnée par l'enregistrement d'un recordset (je
pense). remplir ces tableaux par les valeurs du recordset dans l'ordre
séquentiel. La fonction UBound donnera également le nombre de valeurs dans
le tableau.
pour utiliser les valeurs il suffit d'appeler chaque valeur du tableau par
sa position ( debut = 0) sans dépasser le nombre maxi Ubound-1
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le NooB" a écrit dans le message de
news: ui7%23Gtx%
Bonjour,

je bloque depuis deux semaines sur un problème :
comment appeler les valeurs de champs d'enregistrements successifs pour
paramétrer une fonction, le nombre d'enregistrements étant variable :

j'ai une table avec un champ "flux", un autre "temps"

je voudrais remplacer les éléments p et d dans ma fonction par les valeurs
des champs "flux" et "date" :

dim p(1) as double
p(0) = - 10 000
p(1) = 12 000

dim d(1) as date
d(0)=#1/1/1994#
d(1)=#1/3/2004#

comment faire ?

question déjà posée le 29/12 (xirr/tripaiment)





Avatar
Le NooB
Bonsoir Raymond,

Je suis un noob (newbie, apprenti) en Access. Pourrais tu m'illustrer ceci
avec quelques lignes de code ?

Je resterai ton éternel abonné :))

"Raymond [mvp]" a écrit dans le message de
news: uD$Oy#x#
Bonjour.

à mon avis il faut déclarer deux tableaux D() et T() dont la valeur de
chaque élément sera la valeur donnée par l'enregistrement d'un recordset
(je

pense). remplir ces tableaux par les valeurs du recordset dans l'ordre
séquentiel. La fonction UBound donnera également le nombre de valeurs dans
le tableau.
pour utiliser les valeurs il suffit d'appeler chaque valeur du tableau par
sa position ( debut = 0) sans dépasser le nombre maxi Ubound-1
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le NooB" a écrit dans le message
de

news: ui7%23Gtx%
Bonjour,

je bloque depuis deux semaines sur un problème :
comment appeler les valeurs de champs d'enregistrements successifs pour
paramétrer une fonction, le nombre d'enregistrements étant variable :

j'ai une table avec un champ "flux", un autre "temps"

je voudrais remplacer les éléments p et d dans ma fonction par les
valeurs


des champs "flux" et "date" :

dim p(1) as double
p(0) = - 10 000
p(1) = 12 000

dim d(1) as date
d(0)=#1/1/1994#
d(1)=#1/3/2004#

comment faire ?

question déjà posée le 29/12 (xirr/tripaiment)









Avatar
Raymond [mvp]
Tu n'aurais pas une partie de table, requête formulaire déjà faits pour
éviter de tout réécrire ?
tu me l'envoie par mail en enlevant le XYZ. dans mon adresse.
tu indiques bien où ça se passe.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le NooB" a écrit dans le message de
news: O4QLZZz%
Bonsoir Raymond,

Je suis un noob (newbie, apprenti) en Access. Pourrais tu m'illustrer
ceci
avec quelques lignes de code ?

Je resterai ton éternel abonné :))

"Raymond [mvp]" a écrit dans le message
de
news: uD$Oy#x#
Bonjour.

à mon avis il faut déclarer deux tableaux D() et T() dont la valeur de
chaque élément sera la valeur donnée par l'enregistrement d'un recordset
(je

pense). remplir ces tableaux par les valeurs du recordset dans l'ordre
séquentiel. La fonction UBound donnera également le nombre de valeurs
dans
le tableau.
pour utiliser les valeurs il suffit d'appeler chaque valeur du tableau
par
sa position ( debut = 0) sans dépasser le nombre maxi Ubound-1
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le NooB" a écrit dans le message
de

news: ui7%23Gtx%
Bonjour,

je bloque depuis deux semaines sur un problème :
comment appeler les valeurs de champs d'enregistrements successifs pour
paramétrer une fonction, le nombre d'enregistrements étant variable :

j'ai une table avec un champ "flux", un autre "temps"

je voudrais remplacer les éléments p et d dans ma fonction par les
valeurs


des champs "flux" et "date" :

dim p(1) as double
p(0) = - 10 000
p(1) = 12 000

dim d(1) as date
d(0)=#1/1/1994#
d(1)=#1/3/2004#

comment faire ?

question déjà posée le 29/12 (xirr/tripaiment)













Avatar
Raymond [mvp]
Message expédié par mail:

Bonsoir

Je ne m'attendais pas à une base de ce type. La grosse partie du travail se
réalise sous excel, qui n'est pas ma tasse de thé. Elle a été retouchée par
3stone et RV, je ne vais pas encore rajouter une fonction qui ne serait
qu'un emplatre sur une jambe de bois.

Je regrette mais je ne peux pas intervenir sur ta base. Si ceux qui sont
déjà intervenu veulent bien continuer, soumets leur ton problème.

Je suis désolé de ne pouvoir te rendre service.

Par mesure de sécurité, tous tes documents seront détruits dès l'envoi de ce
mail.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum
Avatar
Le NooB
Bonsoir !

la fonction de 3stone est extraite d'une recherche sur le forum, peu
prodigue en "XIRR", et ne m'est pas adressée, car date de plus d'une année.
Je le sollicite donc humblement ;) De même qu'RV, qui m'a apporté l'amorce
de la solution à la veille du Nvl An.

N'est-il pas possible de paramétrer directement dans Access, ce qui est
tranquilement possible dans Excel ?

Est ce à dire qu'il est plus simple d'opérer une opération
d"export-réimport" via Excel (j'envoie la table a Excel, j'effectue le
calcul, je rapatrie le résultat ' le tout grâce à des automatismes VBA ), et
que je fais fausse route en voulant l'implémenter dans Access ?

Bon sang de bon soir, c'est quand même une fonction plus qu'utile pour tout
calcul de rentabilité. En tapant "XIRR" dans le forum, pas plus de quatre
résultats sujets (dont deux miens à moi :)

@+


"Raymond [mvp]" a écrit dans le message de
news: #NvSyQ0#
Message expédié par mail:

Bonsoir

Je ne m'attendais pas à une base de ce type. La grosse partie du travail
se

réalise sous excel, qui n'est pas ma tasse de thé. Elle a été retouchée
par

3stone et RV, je ne vais pas encore rajouter une fonction qui ne serait
qu'un emplatre sur une jambe de bois.

Je regrette mais je ne peux pas intervenir sur ta base. Si ceux qui sont
déjà intervenu veulent bien continuer, soumets leur ton problème.

Je suis désolé de ne pouvoir te rendre service.

Par mesure de sécurité, tous tes documents seront détruits dès l'envoi de
ce

mail.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum






Avatar
Eric
Bonsoir/Bonjour Le NooB,

J'ai repris des infos sur ton post du 31/12/04.
Je te fais passer la procédure qui te permet, compte tenu des données de
l'exemple, de récupérer le resultat de XIrr()
Ces données sont enregistrées dans une table appelée Feuil1 dans ma
procédure. La procédure va charger 1 vecteur t() pour les dates et 1
vecteur f() pour les flux, puis les vecteurs renseignés sont passés à la
fonction XIrr().

Le résulat retourné est : 0,374858599901199

Ne connaissant pas cette fonction, je ne sais pas si le résultat est
cohérent. De plus, tu devras modifier le chemin de la librairie
ATPVBAEN.XLA car je travaille avec Excel2K (9.0)

Sub testCalcExcel()
Dim objExcel As Excel.Application
Dim t() As Date, f() As Currency, dblResultat As Double
Dim rst As DAO.Recordset, cpt As Integer, taille As Integer
' La table est composée des champs Temps & Flux
' On ouvre un recordset sur la table pour charger les données
Set rst = CurrentDb.OpenRecordset("Feuil1") ' Nom de la table
rst.MoveLast ' pour connaitre le nb d'enregistrements
taille = rst.RecordCount
rst.MoveFirst ' on se remet sur le 1er enreg
ReDim t(taille), f(taille) 'Redéfinition des vecteurs
'Remplissage des vecteurs
'les champs dans un enregistrement sont indéxés à partir de 0
'1er champ =index 0 ...
While Not rst.EOF
t(cpt) = rst(0) ' champ contenant les dates ou rst!Temps
f(cpt) = rst(1) ' champs contenant les flux ou rst!Flux
rst.MoveNext
cpt = cpt + 1
Wend
Set objExcel = CreateObject("excel.application")
' Chemin à adapter à ton cas
objExcel.Workbooks.Open ("C:Program FilesMicrosoft OfficeOffice
MacrolibAnalyseATPVBAEN.XLA")
objExcel.Workbooks("atpvbaen.xla").RunAutoMacros (xlAutoOpen)
' pour vérification, msgbox a virer par la suite
MsgBox objExcel.Application.Run("atpvbaen.xla!xirr", f, t)
' on stocke dans dblResultat le renvoi de XIrr()
dblResultat = objExcel.Application.Run("atpvbaen.xla!xirr", f, t)
' ... Suite du Traitement
' ...
' Cloture et Récupération de la mémoire
objExcel.Quit
Set objExcel = Nothing
Erase t: Erase f ' Récupération de la mémoire allouée aux tableaux
Set rst = Nothing
End Sub

Espérant que ça réponde à ton attente


--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/
Avatar
Eric
...

J'ai oublié de te préciser de charger la Référence Microsoft DAO Object
Library 3.xx car j'ai déclaré le recordset en DAO.Recordset.

Les données avec lesquelles j'ai fait le test sont celles du 31/12.

--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/
Avatar
Le NooB
Muahhhh !!!

Trop fort !
J'ai juste mis un peu de temps pour comprendre qu'il me fallait virer mon
champ Numauto de la table pour éviter l'erreur '13' !

La fonction renvoie le bon résultat.

Un grand, grand MERCI! pour ton aide, et tous tes commentaires qui me
permettent d'appréhender ton code (et de progresser modestement sur le dur
chemin du VBA)!

@+

Le Noob



"Eric" a écrit dans le message de news:

...

J'ai oublié de te préciser de charger la Référence Microsoft DAO Object
Library 3.xx car j'ai déclaré le recordset en DAO.Recordset.

Les données avec lesquelles j'ai fait le test sont celles du 31/12.

--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/


Avatar
Eric
re,

"Le NooB" écrivait :

J'ai juste mis un peu de temps pour comprendre qu'il me fallait virer
mon champ Numauto de la table pour éviter l'erreur '13' !
...


Tu pouvais garder ton champ NumAuto dans la table. Il te suffisait de
décaler les index de rst(). Ainsi, tu n'avais plus l'erreur 13 -
Incompatibilité de type de données.

Structure de la table : Feuil1
NumAuto - NuméroAuto
Temps - Date
Flux - Monétaire

Un recordset basé sur cette table :
Dim rst as DAO.Recordset
Set rst= CurrentDb.OpenRecordset("Feuil1")
' rst(0) correspond à NumAuto
' rst(1) à Temps
' rst(2) à Flux
...

Ce qui donnait dans le remplissage des tableaux :
t(cpt) = rst(1)
f(cpt) = rst(2)

Voila
--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/

Avatar
Le NooB
Au risque de me répéter, merci encore !!

Je peux enfin stopper l'usure prématurée de millions de neurones par
accroissement anormal de ma température cérébrale !

:))
@+


"Eric" a écrit dans le message de
news:
re,

"Le NooB" écrivait :

J'ai juste mis un peu de temps pour comprendre qu'il me fallait virer
mon champ Numauto de la table pour éviter l'erreur '13' !
...


Tu pouvais garder ton champ NumAuto dans la table. Il te suffisait de
décaler les index de rst(). Ainsi, tu n'avais plus l'erreur 13 -
Incompatibilité de type de données.

Structure de la table : Feuil1
NumAuto - NuméroAuto
Temps - Date
Flux - Monétaire

Un recordset basé sur cette table :
Dim rst as DAO.Recordset
Set rst= CurrentDb.OpenRecordset("Feuil1")
' rst(0) correspond à NumAuto
' rst(1) à Temps
' rst(2) à Flux
...

Ce qui donnait dans le remplissage des tableaux :
t(cpt) = rst(1)
f(cpt) = rst(2)

Voila
--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/