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 :

Récupération d'une valeur de l'enregistrement précédent [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut Récupération d'une valeur de l'enregistrement précédent
    Bonjour,

    Dans ma base j'ai une table qui contient l'historique des pannes d'une machine.
    Mon objectif est de calculer le temps d'arrêt pour chacunes d'elles.

    J'ai une requête qui créé une table en triant les enregistrements , par numéro de pannes et par statut.
    Voir PJ.
    Le statut "A" correspond à l'arrivée de la panne le statut "C" à sa fin.

    Pour calculer le temps écoulé il me faut sur les lignes statut "C" récupérer dans le champ "heureDebut" l'heure de l'enregistrement précédent .

    Grâce à un code récupéré sur ce site, j'arrive à mettre des conditions mais je ne connais pas celui pour récupérer la valeur souhaitée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Function Table1()
    Set rst = CurrentDb.OpenRecordset("Table1")
    rst.MoveFirst
    If rst.RecordCount > 1 Then
      niveauPrec = rst![N°Panne]
      niveauPrec1 = rst![Status]
     
      rst.MoveNext
    End If
     
    While Not rst.EOF
    If (rst![N°Panne] = niveauPrec) And ((niveauPrec1 = "A")) Then
      rst.Edit
      rst.Fields("HeureDebut").Value = "Ok"
      rst.Update
    End If
     
    niveauPrec = rst![N°Panne]
    niveauPrec1 = rst![Status]
     
    rst.MoveNext
    Wend
    Set rst = Nothing
    End Function

    Est ce que ma demande est réalisable ?

    Espérant avoir été clair.
    D'avance merci pour votre aide.

    Cordialement
    Images attachées Images attachées  

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Est-ce une requête basée sur les cumuls ne donnerait pas la solution. De la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1.N°Panne, Table1.Statuts, Table1.Heure, DMax("[Heure]","[Table1]","[Statuts]='" & [Statuts] & "' AND [N°Panne]=" & [N°Panne] & " AND [Heure]<#" & [Heure] & "#") AS HeureDebut
    FROM Table1;
    Cordialement,

    EDIT : Correction (en se penchant plus sur ta demande) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1.N°Panne, Table1.Statuts, Table1.Heure, IIf([Statuts]='C',DMax("[Heure]","[Table1]","[Statuts]='A' AND [N°Panne]=" & [N°Panne] & " AND [Heure]<#" & [Heure] & "#"),Null) AS HeureDebut
    FROM Table1;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour madefemere,

    Une fois de plus je dis bravo!!
    La seconde requête fonctionne parfaitement et permet d'avoir le résultat attendu.
    J'avoue avoir essayé de comprendre sa syntaxe mais mon niveau de compétence ne me le permet pas.
    C'est frustrant !!
    Encore merci pour ton aide précieuse.
    Je risque certainement être appelé à faire appel au forum car je suis qu'au début du développement ( bien modeste) de cette base.
    Cordialement.
    StSym

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonsoir,

    Je ne commenterai pas les 3 premiers champs, mais plutôt la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf([Statuts]='C',DMax("[Heure]","[Table1]","[Statuts]='A' AND [N°Panne]=" & [N°Panne] & " AND [Heure]<#" & [Heure] & "#"),Null) AS HeureDebut
    1- IIF est la fonction VRAIFAUX en français ou SI sous Excel. Elle vérifie une condition et selon donne l'une ou l'autre valeur comme résultat :
    Ici :
    SI Statuts = C Alors
    Résultat = DMax("[Heure]","[Table1]","[Statuts]='A' AND [N°Panne]=" & [N°Panne] & " AND [Heure]<#" & [Heure] & "#")
    Sinon
    Résultat = Null


    2- DMax est ce qu'on appelle une fonction de domaine. On fait un calcul ou on recherche une valeur (DLookUp ou RechDom) dans une table (selon des critères. Je te conseille de lire le tuto de références de Philippe Jochmans sur le site pour en apprendre plus.
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DMax("[Heure]","[Table1]","[Statuts]='A' AND [N°Panne]=" & [N°Panne] & " AND [Heure]<#" & [Heure] & "#")
    Trouver la valeur maximum de [Heure] dans la table [Table1] où :
    - [N°Panne] de la table Table1 est égal égal à [N°Panne] de la requête (la ligne)
    ET [Statuts] de la table Table1 est égal à A
    ET [Heure] de la table Table1 est inférieure à [Heure] de la requête (la ligne)

    Cordialement,

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour madefemere,

    Cerise sur le gâteau!
    J'ai non seulement la solution à mon problème mais aussi l'explication de sa résolution.
    Merci pour ton explication et je vais donc aussi sur tes conseils lire le Tuto.
    Cordialement
    StSym

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

Discussions similaires

  1. [glade] Récupération d'une valeur dans une combo
    Par Poutchjay dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 23/01/2006, 15h59
  2. Réponses: 6
    Dernier message: 05/01/2006, 17h37
  3. [XSL] récupération d'une valeur
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/12/2005, 16h58
  4. Réponses: 2
    Dernier message: 03/11/2005, 16h03
  5. récupération d'une valeur dans une variable
    Par jh0483 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2005, 10h49

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