Calculs dans une table ou requête

Fermé
alainmante - 25 sept. 2008 à 13:53
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 - 28 sept. 2008 à 21:33
Bonjour, Bonjour, ACCESS 2003, J'ai beaucoup de calculs à effectuer à partir de contrôles numériques saisis sur un formulaire dans une table. Je peux les faire par des contrôiles calculés sur l'état de sortie ou même sur le formulaire. Mais comment faire pour que ces calculs soient conservés dans une table (ça me paraît impossible), dans une requête, de manière à ce que je n'ai pas chaque fois à poser tous mes contrôles numériques sur l'état, à les rendre invisibles, à effectuer de nouveau des contrôles calculés. Même chose si j'ai besoin de ces résultats de calculs pour inserer un graphique : on ne peut aller les chercher que dans une table ou une requête. Par exemple je saisis dans les contrôles numériques A, B, C, D, E, F, les valeurs a, b,c, d, e, f, qui vont s'enregistrer dans ma table. J'ai besoin du résultat x=a+b+c+d+e+f. Comment faire pour x soit en mémoire quelque part et puisse être rappelé ? Quelle solution ? Merci de votre aide.

5 réponses

Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
25 sept. 2008 à 16:44
Bonjour,
Il faut simplement que les champs contenant les valeurs calculées soient les champs contenus dans une table !
0
Bonjour Jean Pierre, comme vous pouvez le constater je continue sur mes bases ACCESS, et j'essaie au max de me débrouiller en embêtant le moins possible le volontaire que vous êtes. Mais là je coince : d'accord il faut que les champs termes des calcul arithmétiques que je fais soient dans une table, mais le résultat obtenu en faisant leur somme par exemple, je ne peux pas le mettre dans une table ni dans une requête, alors que ça se fait sur un contrôle ou un état sans problème ;
J’aimerais bien pouvoir disposer des totaux effectués dans les champs calculés dans un champ d’une table ou d’une requête
• pour les réutiliser ultérieurement pour d’autres calculs sans avoir à réécrire =[]+[] +[] +[] +[] … etc chaque fois puis à rendre les champs de départ invisibles,
• pour des graphiques (dont les sources ne ses trouvent que dans une table ou une requête) par exemple.
Merci si vous avez une solution, probablement évidente mais qui m’échappe pour l’instant. Cordialement.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
25 sept. 2008 à 22:29
Bonjour,
Mise au point pour :
J’aimerais bien pouvoir disposer des totaux effectués dans les champs calculés dans un champ d’une table ou d’une requête
La table contient les données.
La requête sert à filtrer les données d’une ou plusieurs tables en relation et à réaliser divers calculs selon les besoins.
Les résultats calculés dans une requête sont disponibles dans le formulaire ainsi que ceux calcules dans le formulaire lui-même.
Suite.
Ceci dit, si vous voulez enregistrer les totaux des champs calculés il faut créer les champs correspondant dans une table et les reprendre en plus dans le formulaire et dès que vous valider les données du formulaire c’est la macro qui contient les instructions pour renseigner les champs totaux : exemple d’instruction à mettre avant la commande de fermeture du formulaire (DoCmd.Close acForm, "NomFormulaire", acSaveYes)
Me.Tot1=Me.Calcul1
Me.Tot2=Me.Calcul2
Me.Totx=Me.Calculx
DoCmd.Close

Ou via instruction SQL, entrer les données directement dans la table :
DoCmd.RunSQL UPDATE Table1 SET Table1.Tot1 = Calcul1 WHERE (((Table1.[ID]) = Formulaires]![Nom]![ID]))
0
Bonjour Jean Pierre , j’ai fait ce que vous indiquiez , en introduisant le code ci-dessous sur votre modèle à partir des propriétés du formulaire : Sur fermeture /procédure événementielle, où FFonglets est le nom du formulaire, T1°, T2°, T3°, …les noms des champs dans la table, et Tniv1, Tniv2, Tniv3, …les noms des contrôles indépendanst où s’effectuent mes calculs totaux, mais ça me donne la fenêtre : « erreur d’exécution ‘2501’ L’action Close a été annulée, débogage
Private Sub Form_Close()
DoCmd.Close acForm, "FFonglets", acSaveYes
Me.T1° = Me.Tniv1> en jaune
Me.T2° = Me.Tniv2
Me.T3° = Me.Tniv3
Me.T4° = Me.Tniv4
Me.T5° = Me.Tniv5
Me.T6° = Me.Tniv6
DoCmd.Close
End Sub
Je joins la table en compressée, si vous souhaitez y jeter un œil. Merci de ce que vous pourrez me dire.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
26 sept. 2008 à 22:43
Bonjour,
Ce n’est pas comme je l’ai indiqué.
Je dis ceci : dès que vous valider les données du formulaire c’est la macro qui ….
Donc je suppose que vous avez une commande qui vous permet de VALIDER les données d’une école, avant de passer à l’école suivante, c’est dans le code de cette commande qu’il faut ajouter l’instruction qui suit :
Me.Tot1=Me.Calcul1
Me.Tot2=Me.Calcul2
Me.Totx=Me.Calculx
Avant l’instruction « DoCmd.Close » si vous l’avez utilisez, car elle ferme le formulaire.

Le code que vous mentionnez se déclenche lorsque vous fermer le formulaire, ce qui est complètement différent car vous n’aurez que le dernier enregistrement (donc la dernière école) qui sera correct au niveau de vos totaux « Tniv… »

Si vous n'avez aucune commande pour valider les enregistrements d'une école il faut créer une macro qui se déclenche sur le changement d'enregistrement (pour votre cas = toutes les données d'une école)
Exemple:
Private Sub Form_Current()
Me.Tot1=Me.Calcul1
Me.Tot2=Me.Calcul2
..............
Me.Totx=Me.Calculx
End Sub
0
Bonjour et merci de la précision,mais pour valider le contenu du formulaire, enregistrer les données saisies dasn la table, il suffit de passer à l'enregistreemnt suivant avec la flèche en bas à gauche. Or là je ne sais pas comment on peut lier le code au changement d'enregistrement. Syez sympa de me lancer une bouée. Merci.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
27 sept. 2008 à 13:00
Bonjour Alain,
Eh bien, avez vous lu le dernier paragraphe : Si.......
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
28 sept. 2008 à 21:33
Bonjour Alain,
Vous devez remplacer votre macro :
Private Sub Form_Close()
DoCmd.Close acForm, "FFonglets", acSaveYes
Me.T1° = Me.Tniv1> en jaune
Me.T2° = Me.Tniv2
Me.T3° = Me.Tniv3
Me.T4° = Me.Tniv4
Me.T5° = Me.Tniv5
Me.T6° = Me.Tniv6
DoCmd.Close
End Sub


par celle-ci :
Private Sub Form_Current()
Me.T1° = Me.Tniv1
Me.T2° = Me.Tniv2
Me.T3° = Me.Tniv3
Me.T4° = Me.Tniv4
Me.T5° = Me.Tniv5
Me.T6° = Me.Tniv6
End Sub

0