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

IHM Discussion :

Calcul dans formulaire sur enregistrements différents


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut Calcul dans formulaire sur enregistrements différents
    Bonjour à tous, de retour

    Dans un form j'ai un champ sntpot et un champ stnpit, ce sont 2 champs date/heure

    Je voudrais faire un calcul qui me calcule la différence entre stnpit et sntpot mais sur 2 enregistrements différents

    Si on part sur la base que ENR1 est le premier enregistrement et ENR2 le 2° je voudrais faire ca....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ENR1 stnpot stnpit 
    ENR2 stnpot stnpit (enr1.stnpit - enr2.stnpot)
    Merci de votre aide

    PS : Et oui je sais que ca n'est pas comme dans XL.....

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Bonjour,

    Non ce n'est pas Excel. Tu ne peux pas dans un formulaire, état, table ou une requête indiquer "Enregistrement précédent".

    Dans tous les cas il faut identifier qui est Enr1 pour Enr2.

    Y-a-t-il un N° de tour par exemple ?

    Dans ce cas :

    Méthode 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    N° Tour
    1           ENR1 stnpot stnpit 
    2           ENR2 stnpot stnpit (enr1.stnpit - enr2.stnpot)
    Alors (enr1.stnpit - enr2.stnpot) vaudrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dlookup("stnpit","nomtable","Tour=" & valTourCourant -1) - enr2.stnpot
    Où valTourCourant est la valeur du tour courant (field ou control)

    Dlookup() permet de recherche rapidement une valeur (stnpit) et une seule dans une table (nomtable) d'après une condition ("Tour=" valTourCourant -1)

    Bien sur il faut tenir compte de la course dans le where pour ne pas aller prendre le tour précédent d'une autre course PUIS gérer le cas où c'est le premier tour.

    Pour la course on l'ajoute dans le where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Tour=" & valTourCourant  -1 & " and course=" & valCourseCourante
    Où valCourseCourante est la valeur de la course (id_course ?).

    Pour le premier tour on ajoute un NZ(..;0) qui remplace un Null par 0 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nz( dlookup("stnpit","nomtable","Tour=" & valTourCourant -1 & " and course=" & valCourseCourante-1) ,0) - enr2.stnpot
    Évidemment n'ayant qu'une vue partielle je te donne là qu'une vue théorique de la résolution. Cette méthode fonctionne pour les formulaires/états et requête.

    Méthode 2
    Pour les formulaires et les états uniquement on peut utiliser la méthode DAO avec le recordsetclone de l'objet Form/Report.
    On fait un déplacement arrière (moveprevious) pour récupérer la valeur stnpit qu'on stocke pour s'en servir dans le calcul.

    C'est un peu plus complexe si tu n'as pas l'habitude de DAO.
    La source (l'ensemble des ENR) doit être triée dans l'ordre du tour.
    Il faut être vigilant sur le moveprevious depuis un Newrecord, intercepter le cas d'un moveprevious sur le tour 1, ...

    Cordialement

  3. #3
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Merci de la réponse, c'est dans le formulaire de Run Plan qui est le plan de la session en cours.

    Donc par exemple sur les essais libres 1 je fais un Run Plan qui me dit que le pilote A va commencer son relais (stint) avec une heure de sortie des stands (pit out) et une heure de rentrée (pit in)

    Et la je veux calculer le temps passé aux stands, donc la différence entre le pit in du pilote A et le pit ou du pilote B (ou du pilote A si on ne change pas de pilote sur ce passage aux stands, juste un changement de pneus ou un ravitaillement en essence par exemple.

    Donc j'ai mes références de stint qui se suivent par exemple 74 75 et 76

    Nom : access.jpg
Affichages : 59
Taille : 50,7 Ko

    Et la je voudrais calculer la différence entre le pit in de 74 et le pit ou de 75

    Merci de l'aide

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    La méthode est indiquée et le Pit (...73, 74, 75...) peut donc être utilisé comme valTourCourant.

    En tant qu'expression (et non plus VBA) tu dois écrire plutôt ceci, en adaptant bien entendu à tes noms de controles et formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dlookup("stnpit","nomtable","Tour=Forms!monform!controlPit -1 And course=forms.monform!controlRun")

    Erratum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nz( dlookup("stnpit","nomtable","Tour=" & valTourCourant -1 & " and course=" & valCourseCourante-1) ,0) - enr2.stnpot
    Il ne faut pas faire un valcoursecourante -1.

    Mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nz( dlookup("stnpit","nomtable","Tour=" & valTourCourant -1 & " and course=" & valCourseCourante) ,0) - enr2.stnpot

  5. #5
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Merci de l'idée mais j'ai découvert un bug entre temps, vu que mes stints 73 74, etc peuvent avoir des trous (passer de 73 a 75 sans avoir de 74) ca ne marche pas, donc je vais devoir jouer avec le passage d'un enregistrement à l'autre et sauvegarder avec une variable....

    Y'a des fois ou tout ca me fait regretter excel ha ha ha

    Donc maintenant quand j'ai un sous form affiché en mode continu (voir la copie d'écran) je peux lui faire un truc du genre docmd...acprevious puis une variable "pitincalc" puis revenir avec un docmd.....acnext et faire mon calcul ?

    J'ai essayé ca mais ca me plante sur le docmd previous.....j'ai essayé avec activedataobject et acform et c'est pareil....j'ai essayé de mettre le nom du form (sfrmrunplan) mais ca me dit qu'il n'est pas ouvert (alors que la cellule qui lance le code est dans ce form et qu'il est ouvert....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub PitTime_GotFocus()
        Dim pitincalc As Date
        DoCmd.GoToRecord acDataForm, , acPrevious
        pintincal = [StnPiT]
    debug.print pitincalc
        DoCmd.GoToRecord , , acNext
        [pitime] = [StnPoT] - pitincalc
    End Sub
    J'ai laissé le docmd acnext en vierge, quand ca me plantera la je ferai comme j'ai fait au dessus

    Merci de l'aide

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Non ce n'est pas un bug, c'est un problème de conception, c'est différent.

    Les trous c'est parce que tu utilises un type Numéroauto pour une donnée utilisateur, on le vois au premier coup d'oeil dans ta copie d'écran.

    Le numéroauto c'est pratique pour des id et uniquement pour des id du fait de sa gestion interne. Il ne doit pas être utilisé pour des données utilisateurs.

  7. #7
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Oui, je suis bien d'accord mais la j'utilise des numeroauto ppur avoir une "référence" de mes stints, et parfois il arrive que j'efface un stint donc j'ai un trou de numéro.

    C'est pas possible de le faire avec gotorecord dans un form ?

    Merci

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Quand tu sais qu'il va pleuvoir tu montes quand même des slicks ?
    Là c'est pareil, quand tu sais que tu dois avoir une suite d'entier sans trou tu n'utilises pas le NuméroAuto.
    La règle à respecter c'est "Ne jamais utiliser le NuméroAuto pour une valeur qui est vue et utilisée par l'utilisateur"


    Non si cette possibilité était envisageable je l'aurais cité.

    Mon conseil est de te créer une petite fonction VBA pour numéroter ta suite et garder ton numéroauto pour l'id de tes enregistrements car tu en auras besoin tôt ou tard.
    Il y a plein d'exemples de ce type de fonction dans le forum.

    Quelque chose m'intrigue cependant dans ta déclaration :

    j'utilise des numeroauto ppur avoir une "référence" de mes stints,
    Une fois que tu as fini ta course, tu supprimes tes "stints" pour la prochaine ? Tu ne gardes pas d'historique de tes temps ?

  9. #9
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Alors pour les slicks sous la pluie ca se tente Si le pilote est bon, qu'il peut garder de la température dedans et qu'ils pleut pas trop, une bonne règle de base c'est que si tu suis un mec et que tu vois que ses pneus ne brillent pas tu peux rester dehors, si ils brillent la il faut rentrer parce que l'eau "reste" dessus....

    Après c'est un calcul basique, si tu perds 3s au tour avec tes slicks sous la pluie mais qu'il reste 5 tours ca vaut mieux que de rentrer et perdre 60 secondes pour mettre les pluie, qui en plus seront froids et donc hyper dangereux pour les 2 premiers tours.....

    Mais bon j'ai compris que mes trous de stints ca ne fonctionne pas donc je vais trouver un truc pour qu'il n'y en ait pas, quand je vais créer mon run plan je vais créer les stints en même temps, au pire le dernier sera vide mais ils seront prêts.

    Vu que je n'ai à faire cette opération que dans la même course au pire j'aurai des valeurs de stint qui pourront être discontinues ENTRE les courses mais pas pendant...

    Je garde bien sur les vieux stints dans mon beau form de détail de stint avec le kilométrage des pneus, la conso d'essence par minute (pour extrapoler l'essence dans la voiture en temps réel c'est bien pour l'endurance...) et toutes les datas de temps au tour, réel et théorique....

    J'essaie de faire le dlookup demain matin parce que demain après midi je pars pour la course

    Je mettrai des photos, ca illustrera le propos

    Merci beaucoup pour les tuyaux

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Peut-être juste créer une colonne stint alimentée par ta propre expression d'incrémentation. En plus comme c'est +1 c'est pas compliqué.
    Et laisser ta colonne actuelle pour identifier ton enregistrement de manière unique.

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/11/2014, 20h06
  2. Débutant : ouvrir un formulaire sur enregistrement
    Par energies dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 16h46
  3. Code : ouvrir un formulaire sur enregistrement precis
    Par mat75019 dans le forum Access
    Réponses: 19
    Dernier message: 10/04/2006, 18h50
  4. Calculs dans formulaire.
    Par Marmouz dans le forum IHM
    Réponses: 3
    Dernier message: 06/12/2005, 10h56
  5. Ouverture formulaire sur enregistrement precis
    Par mat_lefebvre dans le forum IHM
    Réponses: 7
    Dernier message: 11/10/2004, 15h37

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