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

Access Discussion :

Obtenir un champ de la ligne précédente dans une requête


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2020
    Messages : 26
    Points : 23
    Points
    23
    Par défaut Obtenir un champ de la ligne précédente dans une requête
    Bonjour à tous,
    Je bloque sur un problème de requête avec access ou j'ai affaire à une contrainte de précédence.
    En effet je souhaite faire une table avec article, la date de besoin, la quantité nécessaire, le stock disponible et le stock n+1 (=Quantité disponible - quantité nécessaire) sauf que la Quantité disponible doit être égal au stock n+1 de la ligne du dessus de la sorte suivante :

    Article Date de besoin Quantité disponible Quantité nécéssaire Stock n+1
    Culasse CO7 13/04/2022 50 12 38
    Culasse CO7 21/04/2022 38 29 9
    Culasse CO7 29/04/2022 9 7 2
    Culasse CO7 07/05/2022 2 15 -13
    Circlip N54 21/04/2022 17 3 14
    Circlip N54 29/04/2022 14 7 7
    Circlip N54 07/05/2022 7 4 3

    Savez-vous comment il est possible de faire une requête incluant un champ de la ligne précédente ? (Je n'ai rien de trouvé de concluant en SQL)
    Encore merci

    Menez

  2. #2
    Membre habitué Avatar de B_SKO
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 95
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    En SQL vous pouvez inclure une sous requête faisant référence à une autre ligne : https://docs.microsoft.com/fr-fr/off...oft-access-sql

    Sinon en VBA : Vous pouvez utilisez un Recordset ou RecordsetClone comme ça vous pouvez naviguez d'une ligne à l'autre.

    Bon courage

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2020
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Merci, j'ai tenté avec une requête et deux sous-requêtes mais sans succès ...
    (La table rqt_finale est la table de base)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT rqt_finale.Article, rqt_finale.[Date de besoin], 
     
    (SELECT [Stock n+1] FROM rqt_finale AS T1 WHERE T1.Article = rqt_finale.Article AND rqt_finale.[Date de besoin] = 
     
    (SELECT TOP 1 [Date de besoin] FROM rqt_finale AS T2 WHERE T2.[Date de besoin] < rqt_finale.[Date de besoin])),
     
    rqt_finale.[Quantité nécéssaire], rqt_finale.[Stock n+1]
     
    FROM rqt_finale;
    Pour l'instant rien de concluant

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 411
    Points : 19 988
    Points
    19 988
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Je crois qu'il faut ajouter le critère (T2.Article = rqt_finale.Article) dans la sous-sous-requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT rqt_finale.Article, rqt_finale.[Date de besoin],  
    (SELECT [Stock n+1] FROM rqt_finale AS T1 WHERE T1.Article = rqt_finale.Article AND rqt_finale.[Date de besoin] = 
     (SELECT max([Date de besoin]) as dt FROM rqt_finale AS T2 WHERE (T2.Article = rqt_finale.Article) AND T2.[Date de besoin] < rqt_finale.[Date de besoin])) as [Quantité Disponible], 
    rqt_finale.[Quantité nécéssaire], rqt_finale.[Stock n+1] 
    FROM rqt_finale;

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2020
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    A vrai dire je ne sais pas si ma reqûete a véritablement un sens et si la forme est bonne.
    Pouvez-vous me dire si selon vous la requête peut vraiment réaliser les opérations voulues ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT rqt_finale.Article, rqt_finale.[Date de besoin], rqt_finale.[Quantité nécéssaire], rqt_finale.[Stock n+1],
     
    (SELECT [Stock n+1] FROM rqt_finale AS T1 WHERE T1.Article = rqt_finale.Article AND rqt_finale.[Date de besoin] = 
    (SELECT max([Date de besoin]) as dt FROM rqt_finale AS T2 WHERE (T2.Article = rqt_finale.Article) AND (T2.[Date de besoin] < rqt_finale.[Date de besoin]))) AS [Quantité Disponible]
     
    FROM rqt_finale;
    La requête ne fonctionne pas car "Argument de fonction non-valide"

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 411
    Points : 19 988
    Points
    19 988
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Je relis votre demande :

    le stock disponible et le stock n+1 (=Quantité disponible - quantité nécessaire) sauf que la Quantité disponible doit être égal au stock n+1 de la ligne du dessus de la sorte suivante
    Oui en fait, vous ne pouvez pas définir cela dans une requête : le stock n+1 = Quantité disponible - quantité nécessaire
    et Quantité disponible doit être égale au stock n+1 de la ligne du dessus.

    Vous avez besoin de la Quantité disponible et la quantité nécessaire pour avoir le stock n+1, et la quantité disponible dépend elle-même du stock n+1 de la ligne du dessus.

    ça ressemble à une structure récursive..

  7. #7
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Il n'est peut-être pas nécessaire de passer par une qry pour reporter la qte n+1 précédente à la qte dispo en cours.
    Une sub en vba (les éléments en img)
    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
    25
    26
    27
    28
    Private Sub date_mvt_AfterUpdate()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim indice As Long
    Dim strSQL As String
     
    Set dbs = CurrentDb
     
    indice = Nz(DMax("id_stock", "tbl_stock", "lib_prod = '" & Me.lib_prod & "'"), 0)
     
    strSQL = "SELECT *" _
        & " FROM tbl_stock" _
        & " WHERE lib_prod = '" & Me.lib_prod & "'" _
        & " AND id_stock = " & indice & ""
     
    If Me.NewRecord Then
    Set rst = dbs.OpenRecordset(strSQL)
     
    With rst
        If Not .EOF Then
            Me.qte_dispo.Value = Nz(.Fields(5).Value, 0)
        Else
            Me.qte_dispo.Value = 0
        End If
            .Close
    End With
    End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub qte_out_AfterUpdate()
        Me.qte_stock = Me.qte_dispo - Me.qte_out
    End Sub
    Images attachées Images attachées  

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2020
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    Merci pour vos réponses, Hyperion13 j'ai adapté ton code à mon cas mais Access me dit '' Utilisation incorrecte du mot clé Me '' et comment faire pour afficher ces données ?
    Car j'ai vu qu'elles sont pour toi affichées dans un formulaire.

    J'ai eu l'idée d'une méthode qui pourrait peut-être simplifier le problème :

    - Une première requête qui récupère la valeur de base du stock pour chaque article. (Champ article et Stock de base)

    - Une seconde requête avec tous les champs qui fait ''Valeur de base'' - la somme des valeurs de Quanté Nécéssaire sur les lignes précédentes :

    Article Date de besoin Quantité disponible Quantité nécéssaire Stock n+1
    Culasse CO7 13/04/2022 50 (issu de requête1) 12 38 (50-12)
    Culasse CO7 21/04/2022 38 29 9 (50-12-29)
    Culasse CO7 29/04/2022 9 7 2 (50-12-29-7)
    Culasse CO7 07/05/2022 2 15 -13 (50-12-29-7)
    Circlip N54 21/04/2022 17 (issu de requête1) 3 14 (17-3)
    Circlip N54 29/04/2022 14 7 7 (17-3-7)
    Circlip N54 07/05/2022 7 4 3 (17-3-7-3)

    Qu'en pensez-vous ?

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 411
    Points : 19 988
    Points
    19 988
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par MenezHom Voir le message
    J'ai eu l'idée d'une méthode qui pourrait peut-être simplifier le problème :

    - Une première requête qui récupère la valeur de base du stock pour chaque article. (Champ article et Stock de base)

    - Une seconde requête avec tous les champs qui fait ''Valeur de base'' - la somme des valeurs de Quanté Nécéssaire sur les lignes précédentes :

    Qu'en pensez-vous ?
    Oui, ça me semble jouable :

    Tu lie la table tbl_article et la requête rqt_finale sur le champ article, et ensuite dans cette requête tu utilise une sous-requête pour calculer la somme des quantités nécessaires pour en déduire les quantités dispos et du stock n+1 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT rqt_finale.Article, rqt_finale.[Date de besoin], 
    tbl_Article.[qteStockArticle] - (SELECT Sum([Quantite nécéssaire]) FROM rqt_finale AS T1 WHERE T1.Article = rqt_finale.Article AND (T1.[Date de besoin] < rqt_finale.[Date de besoin])) As [Quantité Disponible], 
    rqt_finale.[Quantité nécéssaire],
    tbl_Article.[qteStockArticle] - (SELECT Sum([Quantite nécéssaire]) FROM rqt_finale AS T1 WHERE T1.Article = rqt_finale.Article AND (T1.[Date de besoin] <= rqt_finale.[Date de besoin])) As [stock n+1]
    From rqt_finale, tbl_Articles
    Where rqt_finale.Article=tbl_Articles.Article;

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2020
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par User Voir le message
    Oui, ça me semble jouable :
    Tu lie la table tbl_article et la requête rqt_finale sur le champ article, et ensuite dans cette requête tu utilise une sous-requête pour calculer la somme des quantités nécessaires pour en déduire les quantités dispos et du stock n+1 :
    Merci @User ça marche !

    Je ne sais pas comment vous remercier Bon je vais essayer d'aider d'autres membres sur les sujets que je maîtrise

    j'ai rajouté une petite condition sur un nombre aléatoire dans le cas ou les dates sont identiques (sinon cela fait deux lignes indentiques sans prise en compte de la quantité nécéssaire).

    Nom : Capture.PNG
Affichages : 105
Taille : 16,8 Ko

    A bientôt et bonne journée

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

Discussions similaires

  1. modifier un champs d'un ligne selectionner dans une fichier texte
    Par darkman13130 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/06/2008, 12h00
  2. Réponses: 7
    Dernier message: 31/01/2008, 12h42
  3. Obtenir l'index de la ligne courante dans une repeating table
    Par stephane eyskens dans le forum InfoPath
    Réponses: 7
    Dernier message: 25/05/2007, 17h55
  4. exclure les lignes blanches dans une requêtes
    Par sam01 dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/10/2006, 09h42
  5. Ligne Opération dans une requête
    Par misterenart dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/06/2006, 14h34

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