OVH Cloud OVH Cloud

Calcul à partir d'une table

3 réponses
Avatar
Gabriel Tremblay
Bonjour,
Je travaille présentement sur un projet de base de données Access qui
présente un problème particulier. Je dois faire plusieurs calculs sur
différents champs, un peu comme un champ calculé dans Excell. J'ai une table
contenant les différents calculs à faire et une autre contenant les valeurs
des paramètres. Exemple:
Table de calculs:
Position Calcul Resultat
1 A+B
2 A+c-B
.... ......
Table Parametres:
A B C .....
28 5 16 .....

Ma question est: Est-ce possible de faire les calculs automatiquement avec
une fonction VBA?

Voici le code que j'ai essayé sans succés:
Function Calcul_Valeur()

Dim Valeur As Recordset
Dim Données As Recordset
Dim Équation As String

Set bd = CurrentDb()
Set Valeur = bd.OpenRecordset("Calculs")
Set Données = bd.OpenRecordset("Parametres")
Do Until Valeur.EOF
Équation = Valeur![1]
Valeur.Edit
Valeur![Resultat] = Données_Cuve![Équation]
Valeur.Update
Valeur.MoveNext
Loop
Valeur.Close
End Function

Est-ce que quelqu'un peut m'aider?

Merci
Gabriel

3 réponses

Avatar
Jac
Bonjour Gabriel,

en général, on ne met jamais les résultats de calculs dans une table
car elle contient les valeurs qui interviennent dans les calculs.
De plus, mettre les résultats dans la table la feraient grossir...

Il suffit de faire les calculs dans une ou plusieurs requêtes de façon
dynamique et ensuite de pointer sur la requête pour "récupérer" les
résultats des calculs.

Et c'est beaucoup plus simple et rapide que d'écrire dans la table.
D'ailleurs, à quel moment faudrait-il relancer la mise à jour ? Toutes les
secondes, minutes, heures ou chaque fois qu'une donnée est changée ?
Et s'il y a 1.000.000 d'enregistrements, sur un réseau, on fait quoi pendant
ce temps là ? Non, ce ne serait pas raisonnable... La requête donne les
résultats des calculs chaque fois qu'on fait appel à elle.

On en reparle quand tu veux.

Jac


"Gabriel Tremblay" a écrit dans
le message de news:
Bonjour,
Je travaille présentement sur un projet de base de données Access qui
présente un problème particulier. Je dois faire plusieurs calculs sur
différents champs, un peu comme un champ calculé dans Excel. J'ai une
table
contenant les différents calculs à faire et une autre contenant les
valeurs
des paramètres. Exemple:
Table de calculs:
Position Calcul Résultat
1 A+B
2 A+c-B
.... ......
Table Paramètres:
A B C .....
28 5 16 .....

Ma question est: Est-ce possible de faire les calculs automatiquement avec
une fonction VBA?

Voici le code que j'ai essayé sans succès:
Function Calcul_Valeur()

Dim Valeur As Recordset
Dim Données As Recordset
Dim Équation As String

Set bd = CurrentDb()
Set Valeur = bd.OpenRecordset("Calculs")
Set Données = bd.OpenRecordset("Parametres")
Do Until Valeur.EOF
Équation = Valeur![1]
Valeur.Edit
Valeur![Resultat] = Données_Cuve![Équation]
Valeur.Update
Valeur.MoveNext
Loop
Valeur.Close
End Function

Est-ce que quelqu'un peut m'aider?

Merci
Gabriel


Avatar
Jac
Je ne comprends pas bien ta réticence :
si la table a 30 lignes, la requête en aura aussi 30 !!!

La requête, ce n'est rien d'autre qu'une façon de regarder les
données d'une ou plusieurs tables (et/ou requêtes) en ajoutant,
si nécessaire, des tris, des critères de sélection, des questions
à poser à l'utilisateur (Par quoi commence le nom du pays,
Date de début, Date de fin, ...) et des calculs.
Donc ce que tu vois dans ta table, si tu fais une requête qui
s'appuie dessus, tu le verras à l'identique dans la requête.
Donc ton graphique se comportera à l'identique dans les deux cas.

Si tu veux vraiment travailler sur une table, tu peux, dans une
requête mettre en place les champs + les calculs et transformer
la requête en requête création de table.
Donc pour afficher ton graphique, tu fais une macro avec
1/ Avertissement = non afin qu'il ne pose aucune question de
confirmation de remplacement de table
2/ OuvrirRequête = la requête création de table
3/ OuvrirForm ou OuvrirEtat = celui qui contient le graphique

Si tu trouves que les graphiques Access sont un peu lourds à mettre
en place et / ou offrent moins de possibilités que les graphiques XL,
tu pourrais faire tes graphiques dans XL en t'appuyant sur les données
qui sont dans Access. Le pire que j'ai fait : données dans XL, calculs
et cumuls dans Access et graphiques dans XL...
C'est du sport, mais ça a été beaucoup plus facile et rapide à mettre
en place et à maintenir qu'en développant le tout via XL et ses macros.

Et quand XL regarde dans Access, Access peut être ouvert ou fermé.


"Gabriel Tremblay" a écrit dans
le message de news:
Bonjour Jac,
Merci pour la réponse. Cependant, ça ne règle pas mon problème. La raison
pour laquelle les résultats sont dans la table est que je doit faire un
graphique par la suite. En fait, les formules servent à calculer chacun
des
points du graphique, autant les x que les y. Je ne crois pas que c'est
possible à faire avec des requètes principalement parce que son nombre est
variable et le calcul l'est aussi. C'est pourquoi j'ai mis, pour chaque
graphique, les calculs des x et des y dans une table. Avec VBA, j'espèrais
être capable de faire les calculs. Il peut y avoir pas plus de 30 points
par graphique et celui-ci est calculé sur demande d'un type de graphique.

Alors, y a-t-il un moyen de règler mon problème?

Gabriel


Bonjour Gabriel,

en général, on ne met jamais les résultats de calculs dans une table
car elle contient les valeurs qui interviennent dans les calculs.
De plus, mettre les résultats dans la table la feraient grossir...

Il suffit de faire les calculs dans une ou plusieurs requêtes de façon
dynamique et ensuite de pointer sur la requête pour "récupérer" les
résultats des calculs.

Et c'est beaucoup plus simple et rapide que d'écrire dans la table.
D'ailleurs, à quel moment faudrait-il relancer la mise à jour ? Toutes
les
secondes, minutes, heures ou chaque fois qu'une donnée est changée ?
Et s'il y a 1.000.000 d'enregistrements, sur un réseau, on fait quoi
pendant
ce temps là ? Non, ce ne serait pas raisonnable... La requête donne les
résultats des calculs chaque fois qu'on fait appel à elle.

On en reparle quand tu veux.

Jac


"Gabriel Tremblay" a écrit
dans
le message de news:
Bonjour,
Je travaille présentement sur un projet de base de données Access qui
présente un problème particulier. Je dois faire plusieurs calculs sur
différents champs, un peu comme un champ calculé dans Excel. J'ai une
table
contenant les différents calculs à faire et une autre contenant les
valeurs
des paramètres. Exemple:
Table de calculs:
Position Calcul Résultat
1 A+B
2 A+c-B
.... ......
Table Paramètres:
A B C .....
28 5 16 .....

Ma question est: Est-ce possible de faire les calculs automatiquement
avec
une fonction VBA?

Voici le code que j'ai essayé sans succès:
Function Calcul_Valeur()

Dim Valeur As Recordset
Dim Données As Recordset
Dim Équation As String

Set bd = CurrentDb()
Set Valeur = bd.OpenRecordset("Calculs")
Set Données = bd.OpenRecordset("Parametres")
Do Until Valeur.EOF
Équation = Valeur![1]
Valeur.Edit
Valeur![Resultat] = Données_Cuve![Équation]
Valeur.Update
Valeur.MoveNext
Loop
Valeur.Close
End Function

Est-ce que quelqu'un peut m'aider?

Merci
Gabriel










Avatar
Jac
Envoie-moi ton n° de fixe par mail sur
en remplaçant par @
Ça ira bien plus vite en parlant qu'en écrivant...


"Gabriel Tremblay" a écrit dans
le message de news:
Re-bonjour Jac,
Je ne suis pas vraiment rétissant à utiliser des requètes mais je ne vois
pas comment. Le problème est qu'il faudrait une requête par ligne et le
nombre de ligne varie en fonction du graphique demandé. Chaque requète
doit
calculer un x et un y. C'est la raison pour laquel je crois que ce serait
mieux de mettre l'équation de chaque x et chaque y dans une table et faire
le
calcul de chaque ligne avec VBA. J'utilise une requète pour aller chercher
les équations appropriées pour le graphique demandé. Elles sont placé dans
la
table Calcul et ensuite chaque point est calculé. Je ne voie pas comment
faire tout celà avec des requètes. Les calculs varie aussi en fonction du
graphique demandé.

Est-ce possible?
Merci pour ton aide
Gabriel



Je ne comprends pas bien ta réticence :
si la table a 30 lignes, la requête en aura aussi 30 !!!

La requête, ce n'est rien d'autre qu'une façon de regarder les
données d'une ou plusieurs tables (et/ou requêtes) en ajoutant,
si nécessaire, des tris, des critères de sélection, des questions
à poser à l'utilisateur (Par quoi commence le nom du pays,
Date de début, Date de fin, ...) et des calculs.
Donc ce que tu vois dans ta table, si tu fais une requête qui
s'appuie dessus, tu le verras à l'identique dans la requête.
Donc ton graphique se comportera à l'identique dans les deux cas.

Si tu veux vraiment travailler sur une table, tu peux, dans une
requête mettre en place les champs + les calculs et transformer
la requête en requête création de table.
Donc pour afficher ton graphique, tu fais une macro avec
1/ Avertissement = non afin qu'il ne pose aucune question de
confirmation de remplacement de table
2/ OuvrirRequête = la requête création de table
3/ OuvrirForm ou OuvrirEtat = celui qui contient le graphique

Si tu trouves que les graphiques Access sont un peu lourds à mettre
en place et / ou offrent moins de possibilités que les graphiques XL,
tu pourrais faire tes graphiques dans XL en t'appuyant sur les données
qui sont dans Access. Le pire que j'ai fait : données dans XL, calculs
et cumuls dans Access et graphiques dans XL...
C'est du sport, mais ça a été beaucoup plus facile et rapide à mettre
en place et à maintenir qu'en développant le tout via XL et ses macros.

Et quand XL regarde dans Access, Access peut être ouvert ou fermé.


"Gabriel Tremblay" a écrit
dans
le message de news:
Bonjour Jac,
Merci pour la réponse. Cependant, ça ne règle pas mon problème. La
raison
pour laquelle les résultats sont dans la table est que je doit faire un
graphique par la suite. En fait, les formules servent à calculer
chacun
des
points du graphique, autant les x que les y. Je ne crois pas que c'est
possible à faire avec des requètes principalement parce que son nombre
est
variable et le calcul l'est aussi. C'est pourquoi j'ai mis, pour chaque
graphique, les calculs des x et des y dans une table. Avec VBA,
j'espèrais
être capable de faire les calculs. Il peut y avoir pas plus de 30
points
par graphique et celui-ci est calculé sur demande d'un type de
graphique.

Alors, y a-t-il un moyen de règler mon problème?

Gabriel


Bonjour Gabriel,

en général, on ne met jamais les résultats de calculs dans une table
car elle contient les valeurs qui interviennent dans les calculs.
De plus, mettre les résultats dans la table la feraient grossir...

Il suffit de faire les calculs dans une ou plusieurs requêtes de façon
dynamique et ensuite de pointer sur la requête pour "récupérer" les
résultats des calculs.

Et c'est beaucoup plus simple et rapide que d'écrire dans la table.
D'ailleurs, à quel moment faudrait-il relancer la mise à jour ? Toutes
les
secondes, minutes, heures ou chaque fois qu'une donnée est changée ?
Et s'il y a 1.000.000 d'enregistrements, sur un réseau, on fait quoi
pendant
ce temps là ? Non, ce ne serait pas raisonnable... La requête donne
les
résultats des calculs chaque fois qu'on fait appel à elle.

On en reparle quand tu veux.

Jac


"Gabriel Tremblay" a écrit
dans
le message de news:

Bonjour,
Je travaille présentement sur un projet de base de données Access
qui
présente un problème particulier. Je dois faire plusieurs calculs
sur
différents champs, un peu comme un champ calculé dans Excel. J'ai
une
table
contenant les différents calculs à faire et une autre contenant les
valeurs
des paramètres. Exemple:
Table de calculs:
Position Calcul Résultat
1 A+B
2 A+c-B
.... ......
Table Paramètres:
A B C .....
28 5 16 .....

Ma question est: Est-ce possible de faire les calculs
automatiquement
avec
une fonction VBA?

Voici le code que j'ai essayé sans succès:
Function Calcul_Valeur()

Dim Valeur As Recordset
Dim Données As Recordset
Dim Équation As String

Set bd = CurrentDb()
Set Valeur = bd.OpenRecordset("Calculs")
Set Données = bd.OpenRecordset("Parametres")
Do Until Valeur.EOF
Équation = Valeur![1]
Valeur.Edit
Valeur![Resultat] = Données_Cuve![Équation]
Valeur.Update
Valeur.MoveNext
Loop
Valeur.Close
End Function

Est-ce que quelqu'un peut m'aider?

Merci
Gabriel