Débutant Access difficultés de mise en œuvre de solution

Résolu/Fermé
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023 - 26 janv. 2023 à 11:01
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 - 30 janv. 2023 à 17:00

Bonjour à tous.

Tout d'abord, une petite présentation :
Ancien informaticien développeur (Cobol sous SGBD Total puis Sql et PLSql sous Oracle) et ayant terminé en temps que chef de Projet, j'ai abandonné l'informatique pure il y a une quinzaine d'années pour travailler sur le déploiement de fibre optique (Réseaux Wan).
je viens de rechanger mon fusil d'épaule pour prendre un poste de Responsable des Achats dans une entreprise forestière (je réside au GABON depuis 38 ans).

Malheureusement cette partie de l'entreprise n'est pas informatisée, et j'ai décidé de mettre en œuvre une application de Gestion de Stocks sous Access .

Ne voulant pas partir d'une feuille vierge, j'ai cherché sur le Net une application d'accès libre et j'ai trouvé une application  dont l'embryon me convenait.

Donc, il faut que je me remette à la tâche et je m'aperçois que ce n'est plus si facile. Bon, il faut aussi que je commence par reprendre les bases d'Access depuis le début pour avoir des bases solides, mais pour moi et cette application le temps presse ...

1er problème :

A l'origine, il y avait trois tables , j'en ai rajouté 3 autres pour l'instant qui me permettent de gérer certaines constantes comme le matériel, les fournisseurs, les utilisateurs, avec les relations qui vont bien (deux autre tables doivent venir compléter le dispositif). Et j'ai donc rajouté des champs de Foreign-Key dans les tables existantes pour faire les liens sur mes nouvelles tables.

J'ai généré entre autres un formulaire de Gestion des Articles. qui est basé sur la table tArticles

Je voudrais pouvoir afficher le Stock actuel de chaque article . La formule est contenue dans le module mFonctions créé par le développeur de l'application

Mais j'ai eu beau chercher, je ne vois pas comment afficher la donnée calculée StockADate dans le champ txtStock de mon formulaire pour chacune des itérations.

Dois-je passer par un Objet de Classe relié à ma Form ? Si oui comment faire ?

Un grand merci aux bonne âmes qui voudront bien m'aider pour ce premier point

Philippe
Windows / Opera 94.0.0.0

A voir également:

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.

0
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023
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

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
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

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
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.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
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().

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
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.

0
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023
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

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
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).

0

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

Posez votre question

Bonjour à 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

0
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023
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

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
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

  1. une table
  2. 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. 

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024
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é
0
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023
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 ?

0

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.

0
Phil241-1960 Messages postés 13 Date d'inscription jeudi 26 janvier 2023 Statut Membre Dernière intervention 2 février 2023
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

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
30 janv. 2023 à 17:00

Le cas échéant, peux-tu marquer la discussion comme résolue?

0