Débutant Access difficultés de mise en œuvre de solution
Résolu/Ferméyg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 - 30 janv. 2023 à 17:00
- Xxx xxx zzz
- Mise en forme conditionnelle excel - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Pack solution - Télécharger - Divers Utilitaires
- Mise en veille prolongée - Guide
9 réponses
Bonsoir,
Tu es manifestement un faux débutant et sans doute en connais-tu bien plus que moi sur les BD en dehors de Access.
Autant dire tout de suite que j'ai pas pu lire ni ton extrait de formulaire ni tes expressions de SQL. Question de taille des caractères. Je répondrai donc un peu à l'aveuglette à ta question.
Il me semble que, compte tenu de ta demande, le mieux serait d'avoir en pied de formulaire un contrôle "Solde" ou "EtatDuStock" qui reprenne les expressions "DSum("xxx","yyy","zzz")" en entrées et en sorties, où, "xxx" est la variable à rechercher, en l'occurrence les quantités, "yyy" la table ou la requête dans lesquelles les données sont disponibles, et "zzz" l'équation qui valide les critères de sélection des données "xxx" à recueillir.
Dans tous les cas, n'hésite surtout pas consulter l'aide de MS-Access, qui n'est pas trop mal fait même s'il est beaucoup moins de celui présenté il y a longtemps déjà.
Bon courage.
27 janv. 2023 à 09:07
Bonjour Tessel75,
Merci pour ta réponse.
En cliquant sur mes pièces jointes, elles s'ouvrent et elles deviennent lisibles.
Si tu peux y jeter un œil.
Merci
Bonne journée
27 janv. 2023 à 12:41
bonjour,
merci de partager du texte, et pas des images de texte. Tiens compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
27 janv. 2023 à 12:43
bonjour,
Tu pourrais créer une requête qui calculerait le stock, puis utiliser, comme source du formulaire, cette requête au lieu de la table.
27 janv. 2023 à 12:49
Remarque à propos de ton code VBA: les dates étant numériques dans Access, tu peux les comparer sans utiliser format().
27 janv. 2023 à 12:54
Access étant une base SQL, je suis surpris que tu utilises DSUM en VBA plutôt que du SQL pour faire ces calculs.
27 janv. 2023 à 14:33
Bonjour YG_BE
Merci de tes réponses.
Concernant ta remarque sur la pièce jointe de code, merci de me le faire remarquer, j'en tiendrais compte lors de mes prochains posts.
Concernant des deux autres remarques (Dates et Sum), ce n'est pas moi qui ait écrit ces codes, je les hérite du développeur de l'embryon de l'application. Pour les Dates, j'ai cru comprendre que c'était à cause du format Anglais des Dates. Mais je vais essayer sans format pour voir si ça passe. Le module mFonctions est utilisé pour afficher le stock actuel dans les formulaires de gestion des Entrées et de Sorties de Stock.
S'agissant de ta proposition, j'y ai pensé , mais mon formulaire est un formulaire de mise à jour de la table Articles et non de consultation.
Et précision supplémentaire, mon Stock est contenu dans mes tables Entrées et Sorties en faisant la somme des Entrées - la somme des Sorties, et ces tables ne font pas partie de mon formulaire
D'ailleurs, je m'aperçois que dans mon code la donnée (tArticleFk) qui permet de cibler les enregistrements concernées dans les 2 tables Entrées et Sorties ne correspond pas à ma donnée tArticlesPk de mon formulaire (normal puisqu'il est utilisé à l'origine pour les tables tEntrees et tSorties)
Question subsidiaire : un module public mFonctions peut-il être appelé de n'importe où dans l'application ou il est forcément lié à un objet ?
En fait, ce que j'aurais voulu faire, c'est créer un objet de classe pour ce champ Stock_actuel de mon formulaire, mais je ne vois pas comment aller lire des tables extérieures au formulaire généré. (en Cobol ou sur Oracle cela aurait été fait en 2, 4 6 ...)
J'ai beau naviguer dans l'aide en ligne d'Access, sur les tutos accessibles , mais je ne trouve pas grand chose qui puisse m'aider
Merci pour ton aide yg_be.
Philippe
Modifié le 27 janv. 2023 à 14:56
Une fonction publique n'est pas liée à un "objet". Qu'appelles-tu "objet"?
Si je devine bien, il s'agit d'un formulaire en continu que tu veux utiliser pour mettre les données à jour.
Si tu choisis d'utiliser ce type de formulaire, Access fait automatiquement une série de choses pour toi, et cela introduit une série de contraintes.
Je ne pense pas que tu peux comparer cela à une application Cobol ou Oracle, dans laquelle tu fais tout toi-même.
Je pense que ce type de formulaire doit utiliser comme source une table ou une requête "pouvant être mise à jour". Ce n'est probablement pas le cas d'une requête calculant l'état du stock. Tu peux tester cela en créant la requête, et en vérifiant si Access accepte de l'utiliser pour une mise à jour (pas besoin de formulaire pour cela).
Si je ne me trompe, tu dois donc choisir: renoncer à ajouter des données de tables externes dans ce formulaire en continu destiné à mettre les données à jour, ou créer ton propre formulaire de mise à jour (ce que tu décris comme très simple à faire).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour à tous les deux,
Pour répondre à ta question et aux remarques de Yebe, je pense qu'il vaut toujours bien mieux avoir des fonctions publiques dans ton code, ce qui te permet de les appeler chaque fois que tu en as besoin sans t'occuper de savoir si tu l'entres sur un formulaire, un sous-formulaire ou un état ou autre.
Après, pour ce qui est des mises à jours des données, tu as bien sûr intérêt à avoir une requête qu'on puisse mettre à jour (requête-sélection) pour ton formulaire, et comme je le disais à ma 1ère réponse, mettre en affichage le solde en pied de formulaire avec les fonctions DSum("xxx","yyy","zzz") , et qui s'actualise automatiquement par simple click, ou lorsque tu sors d'un formulaire.
Par exemple, pour moi j'ai un formulaire de ce type pour compter le solde de mon compte bancaire. J'ai un formulaire avec l'intitulé du compte et en sous-formulaire les entrées et les sorties d'argent, et en pied de formulaire principal le solde avec les fameuses fonctions DSum () qui s'actualisent quand je rentre un débit ou un crédit.
Bonne suite
27 janv. 2023 à 16:11
Merci de ton retour rapide
1- ce que j'appelle Objet est un formulaire ou un champ d'un formulaire
2- Oui, c'est bien un formulaire généré avec l'assistant qui me sert à mettre à jour ma table (Ajout, Suppression, MAJ) et basé sur la table Articles
3 - Si je te suis , dans un formulaire généré sur une table, d'autres tables ne peuvent pas intervenir même dans une procédure "Private Sub" lié à un champ de mon formulaire
4 - Il faudrait donc passer par un Formulaire construit sans association à une table particulière, en développant entièrement tout le code lié . ce qui me permettrait d'accéder à n Tables . (Pas simple à faire pour un débutant sous Access)
A te lire
27 janv. 2023 à 17:10
Pas du tout d'accord avec ton point 3.
Un formulaire continu permettant la mise à jour doit avoir comme source soit
- une table
- une requête SELECT permettant d'être mise à jour
Dans Access comme dans les autres bases SQL, certaines requêtes SELECT (view) peuvent être mises à jour, d'autres pas.
Je t'invite à tester cela, et je m'attends à ce qu'une requête incluant les états de stock, a fortiori si tu fais cela via des fonctions, ne puisse pas servir de base à une mise à jour.
27 janv. 2023 à 17:20
Tu pourrais faire ainsi:
- ne pas faire les mises à jour directement dans le formulaire continu
- ce qui te permet d'utiliser une requête calculant les stocks, même si tu ne peux pas la mettre à jour
- ajouter un bouton "mise à jour" sur chaque ligne du formulaire continu
- ce bouton ouvrirait un formulaire de mise à jour de l'enregistrement concerné
27 janv. 2023 à 16:40
Bonsoir Tessel75,
1 - Pour appeler une fonction c'est bien l'ordre Call NomdelaForme.fnc_NomdelaFonction introduite dans un Private Sub ?
2 - Je vois ce que tu veux dire.
En fait tu as une Table Maître "compte bancaire" avec une ou des Tables Détail "opérations sur le compte" en débit ou en crédit. Ton formulaire est basé sur la table Maître et ton sous-formulaire sur la ou les tables Détails.
J'ai deux formulaires un peu comme celui-ci que j'ai hérité de l'application d'origine, mais la Table Maître n'est pas impliquée. Ces formulaires gèrent les entrées et les sorties de stock.
Mon contexte, par analogie par rapport à ta Gestion de compte, c'est comme si tu avais plusieurs comptes bancaires dans ta Table Maître et que tu faisais un formulaire lié à cette Table Maître pour avoir pour chacun des comptes les infos du compte (Nom banque, No compte, ect ...) ainsi que les soldes de chacun des comptes .
Comment tu t'y prendrais pour créer ça ?
Re-Bonjour,
Tu as tout compris. En fait, je voulais construire une base générale pouvant servir à une famille avec plusieurs personnes, plusieurs banques et plusieurs comptes.
Je pensais que mon exemple pourrait te servir pour ta gestion de stocks de bois, avec plusieurs essences et éventuellement plusieurs coupes. Pour ce tu dis, l'idée est bien là.
Pour détailler.
J'ai une petite table Nom , par ex Propriété
une table Prénom => Parcelle d'origine
une table Banque => par ex : type Bois
une table N° Compte => coupe
une table Débit/Crédit => Entrée/Sortie quantité
Bon courage.
30 janv. 2023 à 15:22
Bonjour,
Merci à Tessel75 et Yg_Be pour leurs interventions et leur aide.
J'ai mis le week-end à profit pour fouiller ACCESS
Bonne Journée
30 janv. 2023 à 17:00
Le cas échéant, peux-tu marquer la discussion comme résolue?