Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formule stockée dans un champ texte

7 réponses
Avatar
LDLOGON
Bonjour,

Voici mon souhait. J'ai une table assez longue qui contient les champs
suivants (entre autres) :

Code.rubrique (ce code est li=E9 au contenu d'une table "Rubriques")
Nombre
Quantit=E9
Montant

je souhaiterais faire des simulations de calcul. Mon souci, c'est que
le calcul =E0 faire n'est pas toujours le m=EAme en fonction de la
rubrique
Parfois, c'est nb*qt=E9., parfois il faut juste prendre le montant ....
et les cas sont assez divers.

Mon id=E9e =E9tait de cr=E9er un champ dans la table "Rubriques" intitul=E9
"calcul" dans lequel j'indiquerai le calcul =E0 faire.
Par exemple : nb * Qt=E9 ou Montant * 2

Ensuite, avec VBA et DAO, j'ouvre un recordset et j'applique sur
chaque ligne la formule qui provient du champ "calcul".

Mon souci, c'est que je ne vois pas trop comment traduire le champ
texte "nb * qt=E9" pour faire le calcule en VBA.

Auriez-vous une id=E9e ?

Par avance, merci

7 réponses

Avatar
3stone
Salut,

LDLOGON wrote:
Voici mon souhait. J'ai une table assez longue qui contient les champs
suivants (entre autres) :

Code.rubrique (ce code est lié au contenu d'une table "Rubriques")
Nombre
Quantité
Montant

je souhaiterais faire des simulations de calcul. Mon souci, c'est que
le calcul à faire n'est pas toujours le même en fonction de la
rubrique
Parfois, c'est nb*qté., parfois il faut juste prendre le montant ....
et les cas sont assez divers.

Mon idée était de créer un champ dans la table "Rubriques" intitulé
"calcul" dans lequel j'indiquerai le calcul à faire.
Par exemple : nb * Qté ou Montant * 2




Il ne faut surtout pas faire de telle chose !!!
La formule de calculs n'ont rien à faire dans un champ de table.
Je pense aussi que tu as un (gros) problème de conception.
Pour remédier à cela, tu devrais lire ceci (et les 3 pages suivantes)
http://www.3stone.be/access/articles.php?lng=fr&pg"1


Ensuite, avec VBA et DAO, j'ouvre un recordset et j'applique sur
chaque ligne la formule qui provient du champ "calcul".




Il se peut que tu aies besoin d'utiliser le VBA, pour autant
que tu le maitrise un temps soit peu...

Mais, à lire tes besoin, tu dois aussi pouvoir t'en sortir avec
un champ "calculé" dans la requête.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
LDLOGON
Merci,

Pour cette réponse rapide.
Je m'aperçois que je n'ai pas forcément été très clair.

En fait, pourquoi je veux stocker la formule dans un champ texte de la
table "rubriques", c'est parce que le calcul doit être différent en
foonction du code de la rubrique.

Par exemple :
Si c'est la rubrique 01. je dois faire nb * qté
Si c'est la rubrique 02. je dois faire nb * qté * 2
si c'est la rubrique 03, la formule doit être qté * tx_minimal

En fait, dans ma table j'ai un champ simulation. et je dois le
compléter en appliquant une formule qui sera différente selon le code
de la rubrique.

Il se peut que tu aies besoin d'utiliser le VBA, pour autant
que tu le maitrise un temps soit peu...


Je ne suis pas un pro, mais c'est souvent de avec VBA et DAO que je
fais mes calculs, car je trouve cela un peu plus clair que les
requêtes calculées.

Encore merci.
Avatar
3stone
Salut,

LDLOGON wrote:
Merci,

Pour cette réponse rapide.
Je m'aperçois que je n'ai pas forcément été très clair.

En fait, pourquoi je veux stocker la formule dans un champ texte de la
table "rubriques", c'est parce que le calcul doit être différent en
foonction du code de la rubrique.

Par exemple :
Si c'est la rubrique 01. je dois faire nb * qté
Si c'est la rubrique 02. je dois faire nb * qté * 2
si c'est la rubrique 03, la formule doit être qté * tx_minimal

En fait, dans ma table j'ai un champ simulation. et je dois le
compléter en appliquant une formule qui sera différente selon le code
de la rubrique.




Comme je disais, ce sont les valeurs que l'ont sauve dans les tables...
et tu as un problème de conception.

Ici, la valeur _semble_ être désigné par "la rubrique" et il faut donc
compléter la table "rubrique" et y ajouter la valeur qui va bien!

rubrique 01 => 0
rubrique 02 => 2
rubrique 03 => ...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
LDLOGON

Ici, la valeur _semble_ être désigné par "la rubrique" et il faut d onc
compléter la table "rubrique" et y ajouter la valeur qui va bien!

rubrique 01 => 0
rubrique 02 => 2
rubrique 03 => ...



Effectivement, c'est dans la table "rubrique" que je veux préciser
quel calcul il faut faire.
Prenons l'exemple d'un programme de paye.
les rubriques peuvent se calculer de plusieurs façons :
si salaire mensuel : 151.67 * taux_horaire
si heures supp : nb_heures_supp * taux * 1.25
si ancienneté : base_ancienneté * taux_ancienneté.

donc, ce que je voudrais, c'est que dans la table "rubriques" il y ait
un champ texte précisant le calcul que l'on doit effectuer :
ex : nb * qté
ex2 : taux_ancienneté * base_ancienneté
.....

dans ma table "historique_rubriques" je balaie ligne par ligne avec
DAO et j'effectue le calcul prévu en fonction du code de la rubrique.
Bien entendu, les différentes variables sont présentes dans la table
"historique_rubriques".

ainsi si j'arrive sur la rubrique :
'01' et que la formule correspondante est : "qté * taux_horaire" je
fais le calcul en vba : Rst!nb * Rst!tx_hor
'02' et que la formule correspondante est : "nb_heures_supp *
taux_horaire * 1.25" je fais le calcul en vba : Rst!nb_hsupp * Rst!
tx_hor * 1.25

Ce que je n'arrive pas à faire, c'est traduire un champ texte "Rst!Qté
* Rst!taux_horaire" en calcul VBA : Rst!Qté * Rst!taux_horaire"

J'ai bien conscience de ne pas être très clair, et je vous suis
d'autant plus reconnaissant de me consacrer ce temps.
Avatar
3stone
Salut,

LDLOGON wrote:
Ici, la valeur _semble_ être désigné par "la rubrique" et il faut
donc compléter la table "rubrique" et y ajouter la valeur qui va
bien!

rubrique 01 => 0
rubrique 02 => 2
rubrique 03 => ...



Effectivement, c'est dans la table "rubrique" que je veux préciser
quel calcul il faut faire.
Prenons l'exemple d'un programme de paye.
les rubriques peuvent se calculer de plusieurs façons :
si salaire mensuel : 151.67 * taux_horaire
si heures supp : nb_heures_supp * taux * 1.25
si ancienneté : base_ancienneté * taux_ancienneté.

donc, ce que je voudrais, c'est que dans la table "rubriques" il y ait
un champ texte précisant le calcul que l'on doit effectuer :
ex : nb * qté
ex2 : taux_ancienneté * base_ancienneté
.....

dans ma table "historique_rubriques" je balaie ligne par ligne avec
DAO et j'effectue le calcul prévu en fonction du code de la rubrique.
Bien entendu, les différentes variables sont présentes dans la table
"historique_rubriques".

ainsi si j'arrive sur la rubrique :
'01' et que la formule correspondante est : "qté * taux_horaire" je
fais le calcul en vba : Rst!nb * Rst!tx_hor
'02' et que la formule correspondante est : "nb_heures_supp *
taux_horaire * 1.25" je fais le calcul en vba : Rst!nb_hsupp * Rst!
tx_hor * 1.25

Ce que je n'arrive pas à faire, c'est traduire un champ texte "Rst!Qté
* Rst!taux_horaire" en calcul VBA : Rst!Qté * Rst!taux_horaire"




Je reste sur ma position, je te déconseille cette démarche!
Je pense que tu essayes d'appliquer une réflexion à la Excel ;-)

Au besoin, tu dois ajouter une table du style TauxMultiplicateur"
en liaison avec ta table Rubrique.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
LDLOGON
Je reste sur ma position, je te déconseille cette démarche!
Je pense que tu essayes d'appliquer une réflexion à la Excel ;-)



Là, vous avez visé juste ! c'est vrai que j'ai souvent des
raisonnements "excel" ce qui pénalise un peu mes appli. Access dès
qu'elles deviennent un peu complexes.

Je vais voir comment retravailler cela.

Encore merci
Avatar
Serge Deimerly
Va voir du côté de la fonction eval(string) qui permet d'utiliser une zone
de texte ou un champ pour effectuer un calcul
cette fonction géniale existe depuis Access 2 mais n'est jamais
officiellement documentée
exemple dans la fenêtre d'exécution immédiate de VBA
? eval("1 + 1") et ça marche!