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 :

[Access 2007 ou 2010] Rechercher une valeur dans une table sur base d'une date


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut [Access 2007 ou 2010] Rechercher une valeur dans une table sur base d'une date
    Bonjour,
    C'est mon premier post sur ce forum, alors soyez indulgent si la forme n'est pas parfaite.
    Je suis utilisateur d'Access depuis 1997, et j'ai déjà réalisé des bases de données pour plusieurs types d'application (facturation, fichiers clients, stocks, etc)
    J'ai une connaissance plus que basique de VBA, mais je peux passer des heures à chercher des solutions, comme dans le cas que je vous soumets aujourd'hui.

    J'ai joint en annexe un exemple de fichier simple. Voilà ce que je ne parviens pas à faire:
    partant d'un exemple fictif de fabrication de plats préparés, je souhaiterais pouvoir indiquer la date où j'entame un nouveau lot de tel composant, partant du principe que j'applique le principe du FIFO (first-in first-out), et donc que je n'ai jamais d'utilisation de composants d'un lot plus récent alors qu'il me reste des lots plus vieux (en théorie, parce qu'en pratique, il se pourrait qu'un jour deux lots d'un même composant soient encore utilisés en même temps, mais peu importe, je commencerais par faire simple). Tous mes composants sortis doivent se retrouver sur une note mensuelle avec leurs numéros de lots par date de fabrication.
    Comme les mentions des changements de lots en cuisine sont faits à la main, je voudrais ne pas devoir changer chaque lot de la table T_Lots en temps réel, mais pouvoir, lors de l'impression des fiches de fabrication fin de mois par exemple, pouvoir sortir une liste des fabrications avec tous les lots des composants. Je recopie mes fiches manuelles une fois par mois dans la table T_Lots.

    Ce que je souhaite donc, c'est que dans ma table T_Fabrications, lorsque j'encode mensuellement mes fabrications du mois sur base de la date, et que je choisis un composant, le n° de lot de ce composant soit directement extrait de la table T_Lots en fonction de la date de 1ère utilisation (donc la veille c'était le lot avant, etc).

    Je maîtrise la fonction DLOOKUP pour rechercher des données dans une autre table, mais ici, je n'ai trouvé qu'un exemple de code VBA pour Excel qui va me chercher la donnée d'un champ en fonction de la date.

    D'avance un grand merci pour vos conseils de pros.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et bienvenue chez nous,

    Je n'ai pas tout compris et je n'ai pas pu regarder ta pièce jointe (j'utilise Access2000), mais jette un coup d'œil ici : http://claudeleloup.developpez.com/t...plic-ploc/#LXI, c'est peut-être une piste.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    bonjour
    merci pour le lien, intéressant , notamment pour la partie envoi par mail, mais ce n'est pas vraiment ce que je cherche
    sans ouvrir la db exemple, difficile de comprendre mon (petit) souci
    salutations

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour


    Si j'ai bien compris (pas sûr) tu veux récupérer le dernier lot de ce composant ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Lots.idlot FROM T_Lots
    WHERE (((T_Lots.[Date début utilisation]) In (SELECT Max(T_Lots.[Date début utilisation]) AS [MaxDeDate début utilisation] FROM T_Lots GROUP BY T_Lots.Composant HAVING (T_Lots.Composant=2))));

    =2 à remplacer par la valeur du formulaire de saisie

    Si ce n'est pas le dernier, peux-tu repréciser le contexte et ce que tu veux obtenir en partant de ton exemple.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,
    merci de vous intéresser à mon soucis
    je me rends compte que j'ai oublié en créant le formulaire d'utiliser la même structure que la table T_Fabrications (liste de choix pour les composants), donc je reposte la db adaptée (v2)

    à titre d'exemple, je crée un premier enregistrement dans le formulaire F_Fabrications:
    date: 7/1/2015,
    et ensuite, si je choisis le composant C1, je veux que la valeur LA1-a se crée dans le champ Lot quand je quitte le champ composant
    si je choisis le composant C2, je veux que la valeur LA2-b se crée dans le champ Lot

    dans la db que j'utilise présentement pour un autre usage, c'est sur AfterUpdate que la procédure DLookUp va rechercher les valeurs
    mais ici.....????
    Fichiers attachés Fichiers attachés

  6. #6
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    lot-date v2.zip autant pour moi, voilà la db au format zip

  7. #7
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Si j'ai bien compris (pas sûr) tu veux récupérer le dernier lot de ce composant ?
    Bonsoir,
    non je veux récupérer le lot qui était utilisé à la date choisie
    le fichier attaché est mis à jour afin de pouvoir tester des exemples (voir post plus haut)

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    La requête
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 1 T_Lots.IDLot
    FROM T_Lots
    WHERE (((T_Lots.[Date début utilisation])<=[Formulaires]![F_Fabrications]![Date fabrication]) AND ((T_Lots.Composant)=[Formulaires]![F_Fabrications]![Composant]))
    ORDER BY T_Lots.[Date début utilisation] DESC;

    doit fonctionner.

    Après il faut programmer le formulaire pour que cela se mette à joue lors de la mise à jour des champs Composant et date...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    ok merci d'avance, je vais essayer ça (placer ce code dans la procédure événementielle associée au AfterUpdate du champ Composant du formulaire).
    je crois que je devrai utiliser l'argument DLOOKUP pour récupérer la valeur Lot de la table T_Lots et l'inscrire dans le champ Lot du formulaire
    j'essaie ça dès que j'ai une heure
    je ne comprends pas la première ligne de code (TOP 1)?

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    Je ne suis pas fan des fonction DLOOKUP & Co très gourmandes en ressources d'où mon approche requête classique.

    Top 1 : permet de ne récupérer que le 1er enregistrement dont la date est inférieure à la date de fabrication dans le tri décroissant des dates des lots liés à ce composant, en d'autres termes la date immédiatement inférieure dans la chronologie.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  11. #11
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    ok, je vais essayer ça dès que j'ai le temps
    je posterai la db avec la fonction si je trouve la solution
    merci pour l'aide

  12. #12
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    désolé... je n'y parviens pas
    je ne comprends pas où placer ce code, ni comment l'activer sur la mise à jour du composant, une fois la date encodée
    je vais devoir faire appel à l'équipe...
    merci d'avance pour vos bons conseils

  13. #13
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    je me permets un petit up si qq a le temps de m'aider
    merci

  14. #14
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    rebonjour,

    après avoir essayé diverses configurations, je me heurte toujours à ces foutues erreurs de syntaxe.
    pas moyen de trouver le bon libellé pour aller rechercher ces valeurs entre deux dates données.
    quelqu'un aurait-il la patience de rouvrir ma base de données testv2?

    à titre d'exemple, je crée un premier enregistrement dans le formulaire F_Fabrications:
    date: 7/1/2015,
    et ensuite, si je choisis le composant C1, je veux que la valeur LA1-a se crée dans le champ Lot quand je quitte le champ composant
    si je choisis le composant C2, je veux que la valeur LA2-b se crée dans le champ Lot
    etc

    merci d'avance pour votre aide

  15. #15
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Bonjour
    Regarde si cette exemple te convient
    bonne journée

  16. #16
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Renardo Voir le message
    Bonjour
    Regarde si cette exemple te convient
    bonne journée
    Bonjour Renardo,

    un grand merci de t'être penché sur mon problème.
    J'ai étudié ta méthode, mais ce n'est pas ce que je recherche. Tu incrémentes des n° de lot par dates de fabrication successives.
    Ce que je souhaiterais, c'est, la table T_Lots restant fixe pour le moment (c'est là que j'encoderais les nouveaux n° de lots dès que j'entamerais le premier sac de ce lot), de pouvoir en fonction de la date de fabrication dans mes enregistrements du formulaire F_Fabrications (qui se situerait dans ma base exemple entre le 1/1/15 et le 30/1/15), aller rechercher dans la table T_Lots le lot du constituant qui était utilisé à cette date (c-à-d entre deux dates en fait), et qu'il s'encode dans le champ Lot du formulaire dès que je quitte le champ Composant.
    Donc pas besoin de créer un nouveau n° de lot, ni d'aller chercher de dernier n° de lot Dmax.

    à titre d'exemple, je crée un premier enregistrement dans le formulaire F_Fabrications:
    date: 7/1/2015,
    et ensuite, si je choisis le composant C1, je veux que la valeur LA1-a se crée dans le champ Lot quand je quitte le champ composant
    si je choisis le composant C2, je veux que la valeur LA2-b se crée dans le champ Lot

    Il ne devrait donc pas avoir besoin de créer des requêtes supplémentaires.
    Le principe du select énoncé dans les réponses précédentes devrait être bon mais je ne sais pas comment l'implémenter dans les objets. J'ai chaque fois une erreur de syntaxe que je ne comprends pas.

    Pour info, j'avais trouvé sur ce même site, un exemple qui me conviendrait avec la syntaxe suivante:
    SELECT tblInfoPatient.IdPatient, tblInfoPatient.DateReference,
    DLookUp("IdPeriode","tblPeriodes",Format([tblInfoPatient].[DateReference],"\#mm\/dd\/yyyy\#") & " Between [DebutPer] And [FinPer]") AS ClePeriode,
    DLookUp("Periode","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS NomPeriode,
    DLookUp("DebutPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS DebutPer,
    DLookUp("FinPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS FinPer
    FROM tblInfoPatient;
    SELECT tblPeriodes.IdPeriode, tblPeriodes.Periode, tblPeriodes.DebutPer, tblPeriodes.FinPer, tblInfoPatient.IdPatient, tblInfoPatient.DatePEC
    FROM tblPeriodes LEFT JOIN tblInfoPatient ON tblInfoPatient.DatePEC >= tblPeriodes.DebutPer And tblInfoPatient.DatePEC <= tblPeriodes.FinPer
    ORDER BY tblPeriodes.DebutPer;

    ou un autre exemple ici http://www.developpez.net/forums/d10...onditionnelle/

    mais comment applique ça à ma petite base????????? que je reposte vide ci-dessous
    lot-date v2.zip

    Si tu as une autre piste merci de poster tes essais.
    En te remerciant encore.

  17. #17
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir byacces2,


    J’ai testé avec MySQL, mais le code SQL devrait convenir avec ACCESS. Pour récupérer la date de fabrication et le lot pour le composant 'C1' au 2015-01-25 (j'ai codé en dur les valeurs de référence du composant et de la date) :

    
    SELECT lot.Composant, lot.lot, lot.DateDebutUtilisation
    FROM 
    (
        SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil 
        FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <= '2015-01-25' 
        GROUP BY Composant
    ) AS t 
    
    INNER JOIN lot ON t.Composant = lot.composant AND t.theDateDebutUtil = lot.DateDebutUtilisation ;
    
    
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  18. #18
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    ouf,

    un grand merci fsmrel de te pencher sur mon problème, mais tu viens de me donner le coup de grâce pour ce soir...
    je vais regarder à ça demain à tête reposée, car le sql et moi...
    je vais essayer de transposer le code dans Access, et remplacer les valeurs fixes par les champs de ma base (date, composant)
    je vois que le select comprend plus d'éléments que dans les codes proposés plus haut, pour lesquels j'avais chaque fois une erreur de syntaxe
    puis je vais tester où mettre ce foutu code (probablement dans AfterUpdate du champ Composant du formulaire?)
    puis je reviens sur le forum pour faire part de mon avancement

    encore merci et bonne soirée

  19. #19
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir byacces2,



    Comme l’a suggéré 78chris, vous pouvez utiliser la fonction TOP :


    Requête 1 :

    
    SELECT TOP 1 DateDebutUtilisation, Composant, Lot
    FROM Lot
    WHERE Composant ='C1' AND DateDebutUtilisation <='2015-01-25'
    ORDER BY DateDebutUtilisation DESC ;
    
    
    Ce qui nécessite de trier sur l’attribut DateDebutUtilisation dans le sens décroissant (ORDER BY DateDebutUtilisation DESC) et de retenir le 1er élément de la liste qui en résulte.

    Pour ma part, je ne suis pas fan de cette fonction, car je la soupçonne de ne pas faire partie de la norme SQL, et puis elle n’est pas portable vers la plupart des autres SGBD.

    J’ai donc préféré utiliser la fonction d’agrégation classique MAX. Décryptons.

    On aimerait pouvoir écrire :

    Requête 2 :

    
    SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil, Lot 
        FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <= '2015-01-25' ; 
    
    

    Le problème est que la présence de la fonction MAX impose l’utilisation de GROUP BY. Essayons :

    Requête 3 :

    
    SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil, Lot 
        FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <= '2015-01-25' 
        GROUP BY Composant ;
    
    

    Mais les colonnes présentes dans la partie SELECT doivent intégrer le GROUP BY :

    Requête 4 :

    
    SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil, Lot 
        FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <= '2015-01-25' 
        GROUP BY Composant, Lot ;
    
    

    Mais on ne veut pas d’un regroupement par Composant, Lot, on ne veut regrouper que par Composant...
    D’où la requête très « sage » que j’ai proposée dans mon précédent message, où l’on procède à la jointure du SELECT :

    
        SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil 
        FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <='2015-01-25' 
        GROUP BY Composant
    
    
    Avec avec la table lot pour justement récupérer le lot.

    Il existe aussi une vieille astuce, une alternative consistant à remplacer Lot par MAX(Lot) dans le SELECT de la requête3 :

    
    SELECT Composant, Max(DateDebutUtilisation) AS theDateDebutUtil, MAX(Lot) as theLot 
    FROM   lot WHERE Composant = 'C1' AND DateDebutUtilisation <= '2015-01-25' 
    GROUP BY Composant ;
    
    

    Bon, j’espère vous avoir apporté une solution...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  20. #20
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Janvier 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 43
    Points : 11
    Points
    11
    Par défaut
    Un grand merci pour votre réponse très didactique, mais me voilà encore un peu plus dans la panade....
    Le fait que vous utilisiez des noms de champ différents de ceux de ma base me perturbe un peu, ainsi que le fait que vous utilisiez des alias "as" dont je me demande quoi faire, et surtout je ne vois pas où le code dit de mentionner ce lot trouvé dans le champ du formulaire.
    Est-ce que je peux recommencer par le début et y aller par étapes de façon à comprendre ce que vous me proposez?

    Ce dont je pense avoir besoin est une mise à jour du champ [Lot] du formulaire suite à une mise à jour du champ [Composant] du formulaire, en tenant compte du champ [Date fabrication] de ce même formulaire.

    Donc il faudrait une procédure événementielle écrite sous Private Sub Composant_AfterUpdate(). Est-ce correct?

    Ce que la procédure doit prévoir c'est de filtrer la table T_Lots sur base du [Composant] sélectionné dans le formulaire, puis de trier le résultat par [Date début utilisation] décroissante, puis de sélectionner le premier enregistrement dont la [Date début utilisation] est inférieure à la [Date fabrication] du formulaire, puis de recopier le [Lot] de cet enregistrement dans le champ [Lot] du formulaire. Est-ce correct?

    Cette procédure devrait se produire à chaque mise à jour du champ [Composant] du formulaire, mais aussi de la [Date début utilisation] du formulaire. Est-ce correct?

    J'ai essayé de copier/coller votre code tel quel dans ma base mais évidemment cela ne fonctionne pas. Idem avec les codes donnés par les autres membres plus haut, j'ai systématiquement une erreur de syntaxe dans le select (notamment "Erreur de compilation. Attendu: Case").

    Ayant déjà utilisé il y a bien longtemps la procédure DLOOKUP dans une autre base (ici je comprends le principe du copier dans le formulaire la valeur du Lot trouvée dans la table), j'ai adapté ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Composant_AfterUpdate()
    Dim ChFiltre As String
    ChFiltre = "[Composant]=" & Me![Composant]
    Me![lot] = DLookup("[Lot]", "T_Lots", ChFiltre)   'Me![lot] repasse en minuscule tout seul...
    End Sub
    qui fonctionne à moitié puisqu'il me retourne chaque fois la première valeur du lot de chaque composant, ne sachant pas comment y mentionner un tri par date. Je pensais pouvoir implémenter le "between" mentionné dans l'exemple trouvé sur ce même site
    SELECT tblInfoPatient.IdPatient, tblInfoPatient.DateReference,
    DLookUp("IdPeriode","tblPeriodes",Format([tblInfoPatient].[DateReference],"\#mm\/dd\/yyyy\#") & " Between [DebutPer] And [FinPer]") AS ClePeriode,
    DLookUp("Periode","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS NomPeriode,
    DLookUp("DebutPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS DebutPer,
    DLookUp("FinPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS FinPer
    FROM tblInfoPatient;
    SELECT tblPeriodes.IdPeriode, tblPeriodes.Periode, tblPeriodes.DebutPer, tblPeriodes.FinPer, tblInfoPatient.IdPatient, tblInfoPatient.DatePEC
    FROM tblPeriodes LEFT JOIN tblInfoPatient ON tblInfoPatient.DatePEC >= tblPeriodes.DebutPer And tblInfoPatient.DatePEC <= tblPeriodes.FinPer
    ORDER BY tblPeriodes.DebutPer;



    Bref je patauge par manque de connaissance, donc j'attends à nouveau des conseils pour progresser. Ou ma base adaptée directement avec vos solutions, car je suis incapable de le faire, mais peut-être que j'en demande trop...
    Merci d'avance

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2010, 02h39
  2. Réponses: 1
    Dernier message: 17/04/2009, 15h44
  3. Réponses: 2
    Dernier message: 05/03/2008, 22h01
  4. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35
  5. [JSTL] Récupérer une valeur dans ma map à l'aide d'une clé
    Par Sim dans le forum Taglibs
    Réponses: 1
    Dernier message: 29/08/2006, 10h03

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