IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Problème de calcul "dynamique" [AC-2010]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Problème de calcul "dynamique"
    Bonjour à tous,

    Je travaille actuellement sur la création d'une appli Access pour gérer la maintenance d'un hotel, ainsi que le suivi du stock de matériel.
    J'ai donc créer une BDD (voir version allégée en PJ) qui reprends l'ensemble de ces informations, avec entre autre:

    -Un formulaire pour alimenter une table "interventions, ou l'on renseigne la date l'heure le lieu de l'intervention, et le matériel utilisé ainsi que la quantité de ce matériel.
    -Une "table sortie matériel" qui s'alimente automatiquement à chaque fois que l'on saisi une quantité de matériel dans la formulaire Interventions. (Cette table sert en fin de mois à lister de façon plus claire le matériel à sortir sur notre logiciel (trés lourd d'utilisation de gestion de stock))
    -Une table "Materiel" qui reprend l'intégralité des références de pièces que nous avons en magasin. A chaque inventaire notre logiciel de suivi de stock nous sort un rapport excel avec situation fin de mois, qui sera importé afin d'alimenter le champs [StockFinPer](Stock à la fin de la période d'inventaire précédente).

    Mon idée était la suivante. dans la table "Matériel", le champs [StockReel] serait égal à la différence entre [StockFinPer] et le chaps [ConsduMois] qui serait alimenté automatiquement par le remplissage du champs [Qte] de la table [DemandeIntervention], lui-même alimenté par le formulair "F_Interventions].
    Sur le papier l'idée parait correct mais je n'arrive pas à la concrétiser.

    Quelqu'un aurait-il une piste de solution?

    Merci d'avance.

    Mickaël H.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Après remplissage du champ du formulaire, il faudrait lancer une requête de mise à jour, ce serait la solution la plus simple et la plus sûr.

    Philippe

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    tu peux creer des macro de donnees

    si tu rajoute un record dans T_SortieMateriel, la quantite va s'ajouer a T_Material.Consdumois (macro after insert)

    Nom : AfterInsert.PNG
Affichages : 409
Taille : 10,5 Ko

    si tu supprime un record dans T_SortieMateriel, la quantite va se soustraire a T_Material.Consdumois (macro after delete)

    Nom : AfterDelete.PNG
Affichages : 394
Taille : 10,4 Ko


    si tu modifie la qte dans T_SortieMateriel, la quantite va se mattre a jour dans T_Material.Consdumois (macro after update)

    Nom : AfterUpdate.PNG
Affichages : 416
Taille : 17,2 Ko


    bien entendu ca ne prend pas en compte la notion de mois... pour ca il faudra trouver autre chose

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    si je puis me permettre (j'ai déjà traité plusieurs gestions de stock), je ne te suis dans ta démarche :
    dans la table "Matériel", le champs [StockReel] serait égal à la différence entre [StockFinPer] et le chaps [ConsduMois] qui ...
    Plutôt que de s'appuyer sur un stock en fin de période qui n'existe pas, je préfère la démarche :
    Stock calculé = Stock en début de période + qté achetées - qtés consommées
    Je garde la définition Stock réel pour un décompte physique réel (comme lors d'un inventaire)

    Et donc si tu opères par périodes mensuelles, dans ta table Matériels il te faut au minimum les champs :
    Stock début période, Stock IN période, Stock OUT période
    Le Stock actuel est un champ calculé , comme vu plus faut.
    En fin de période, il faut alors passer un traitement de "passage à la période suivante " pour mettre à jour les 3 champs

    Cordialement,
    "Always look at the bright side of life." Monty Python.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour Micniv,

    Merci pour tes conseils.
    En effet l'appelation stock fin de période est assez bizarre, mais le nom du champs n'a été choisi qu'en fonction de l'appelation du champs équivalent de notre lgiciel de comptabilité, qui est d'un lourdeur impressionnante. Afin de limiter les sources d'erreur, j'ai délibérément choisi de garder certaines appélations, même si il est vrai c'est plus un stock de début de période, après déduction des quantités sorties et rentrées.
    Pour ce qui est du reste, je suis d'accord avec toi. Je cherche encore comment je vais traiter la partie que tu appelles "Stock in période", pour éviter les doublons lorsque j'importerai e fichier Excel généré par notre logiciel compta.
    Mais encore une fois, merci pour tes conseils.
    Vu mes difficultés, ils ne seront jamais de trop.

    Cordialement,

    Mickaël H.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour Accesisgood,

    J'étais sur le point de te construire un monument, car ta solution proposée pour l'ajout d'un record est vraiment ce que je cherchais, puis j'ai tester les deux autres, une à une et là, plus rien ne fonctionne. Je fais peut-être une fausse manip, je ne sais pas.
    Je vais continuer à essayer, et te (vous tiens au courant.)

    Ps, je n'ai pas encore totalement abandonné l'idée du monumant, d'autant que grâce à toi, j'ai découvert les macros de données, qui m'ouvrent des possibilités, que je n'osais espérer, alors ne serait-ce que pour cela, un grand merci.

    Cordiaement,

    Mickaël H.

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    L'utilisation des macro de donnees est hyper efficace mais il y a des contraintes

    par exemple, le champ a mettre a jour T_Materiel.ConsDuMois doit prealablement contenir un chiffre (il faut rendre ce champ obligatoire, avec 0 en valeur par defaut)

    ci joint ta base avec les 3 macro
    GMAO 09_1521.zip

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour Accessisgood,

    Merci pour ton aide, en effet avec des champs pré-remplis, cela fonctionne parfaitement.
    J'a encore une question, doivent-ils être à "0" parce que ceux sont des champs numériques, est-ce qui si je souhaite faire la même chose avec du texte il faudrat forcément un texte dans la cellule ?

    Merci d'avance pour ta réponse, et encore merci de ton aide.

    Cordialement,

    Mickaël H.

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    il n'a pas de contraintes sur les champs texte, l'operateur "&" accepte de traiter les champs vides

    pour les champs numeriques il faut toujours une valeur meme a zero, car les macro de donnees plantent (silencieusement!) quand elles rencontrent une valeur [Null], il faut donc juste rendre ces champs obligatoires.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Je n'y comprends plus rien
    Bonjour à tous,

    Grâce à la précieuse aide d' "Accessisgood", j'avais réussi à régler mon problème de calcul dynamique , et j'ai donc en toute logique continué à avancé sur mon projet de gmao, quand tout à coup, (oui je sais ça fait trés effet dramatique...) pour une raison que je n'arrive pas à comprendre , les calculs de stock ne se font plus, les macros de données ne fonctionnent plus.
    J'ai essayer de reprendre les tables, les macros, mais rien n'y fait.
    J'ai donc créer une nouvelle base de données (GMAO 11_15) en y important uniquement les tables nécessaires,et cela ne fonctionne toujours pas.
    Alors s'il vous plait: "AU SECOURS"
    Je n'ai vraiment aucune idée de où cela peut-il venir.

    Merci d'avance,

    Mickaël H.
    Fichiers attachés Fichiers attachés

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Personne n'a d'idées ?

    Merci d'avance.

    Mickaël.

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonsoir,

    dans la pièce jointe à ton message du 18/11 il n'y a que des tables (donc seulement des données)
    et aucune macro
    Donc pas étonnant qu'aucune macro fonctionne !

    Cordialement
    "Always look at the bright side of life." Monty Python.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour micniv,

    Dans la table T_Interventions, il y a une macro de données après insertion (ouvrir la table, puis "outils de table", puis "table" et enfin "après insertion", dans la version complète de mon projet j'ai le même type de macro après supression, et après modification.
    Au début cela fonctionnait correctement, mais après un certain temps, plus rien.

    Cordialement,

    Mickaël H.

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    merci d'avoir données des explications. C'était difficile à deviner.

    Alors, a priori le probleme est dans T_interventions, dans la colonne LibMat tu affiches bien un LibMat via ta liste déroulante, mais tu y inscris en fait l'identifiant idMat (qui est la première colonne masquée de ta liste déroulante)
    Pour info, la fonction Clng() convertit l'argument en un entier Long.

    ici, brutalement en l'état, dans la macro de ton trigger apres_insertion si tu modifies la recherche de l'enregistrement par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ... WHERE [MyTarget].[IdMat]=clng([T_Interventions].[LibMat])
    la consommation du mois est mise à jour dans T_materiel

    Ce que je conseille, dans T_interventions , utilise idmat au lieu de libMat et tout sera plus évident.

    Bonne suite
    "Always look at the bright side of life." Monty Python.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour à tous,

    Comme je suis en train de me creuser le cerveau sur un autre problème de macro, je e rends compte en parcourant ce blog, que je n'ai jamais clôturé cette discussion.
    En fait la solution est un très juste jeu de mots:
    Lorsque j'ai retapé la macro, au lieu de saisir le nom du champs [consdumois] (pour consommation du mois), j'ai tapé [condumois], certain diront lapsus révélateur, vu qu'un mois, c'est à peu près le temps que j'ai passé à essayer de comprendre pourquoi cela ne fonctionnait plus.
    Depuis que j'ai rectifier l'erreur, la macro fonctionne de nouveau à merveille.

    Merci encore Accessisgood, et merci à tous.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Demande d'infos supplémentaires sur les macros de données
    Bonjour à tous

    Il y a quelques temps, AccessIsGood m'avait aidé sur un problème de calcul de stock dynamique, à l'aide de macros de données, ce qui fonctionne parfaitement.

    A présent, au vu de l'ampleur que prend l'application, je souhaite travailler avec des bases de données fractionnées.
    Est-ce que les macro de données fonctionnent si dans une table d'une base de données racine N°1, on cherche un enregistrement dans une table d'une autre base de données racine N°2, en vue de le modifier ?

    J'ai essayé et même en modifiant les liaisons des tables, cela ne fonctionne pas, peut-être une syntaxe particulière à employer, je ne sais pas trop...

    Merci d'avance de vos réponses,

    Cordialement,

    Mickaël H.

  17. #17
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    les macro de données ne fonctionnent pas entre 2 bases fractionnées,
    elles fonctionnent seulement à l'intérieur de chacune de leurs bases

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juillet 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juillet 2013
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Bonjour AccessIsGood,

    Et merci pour cette réponse, c'est ce qu'il m'avait semblé, mais je préférais m'en assurer.
    Tant pis, je vais explorer d'autres pistes pour optimiser les temps de traitement et réponse de mon application.

    Merci encore,

    Nana.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47
  2. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo