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 :

Valeur la plus récente [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Valeur la plus récente
    Bonjour à tous et à toutes,

    Dans une base gérant une association, pour laquelle un certain nombre d'entre vous m'avez efficacement aidé (merci à eux)
    j'ai fait une requête pour lister les mises à jour des coordonnées, classées par date de mise à jour.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Max(T_Nouvelles_valeurs.MiseAJour) AS MaxDeMiseAJour, T_Nouvelles_valeurs.N°Adherent, T_Nouvelles_valeurs.Titre, T_Nouvelles_valeurs.NomAdherent, T_Nouvelles_valeurs.PrenomAdherent, T_Nouvelles_valeurs.CP, T_Nouvelles_valeurs.Adresse, T_Nouvelles_valeurs.Ville, T_Nouvelles_valeurs.Region, T_Nouvelles_valeurs.Pays, T_Nouvelles_valeurs.Telephone, T_Nouvelles_valeurs.Fax, T_Nouvelles_valeurs.Mobile, T_Nouvelles_valeurs.EMail, T_Nouvelles_valeurs.DateNaissance, T_Nouvelles_valeurs.Adherent, T_Nouvelles_valeurs.TypeAdherent, T_Nouvelles_valeurs.DateAdhesion, T_Nouvelles_valeurs.Fonction, T_Nouvelles_valeurs.Origine, T_Nouvelles_valeurs.DateOrigine, T_Nouvelles_valeurs.Specialite, T_Nouvelles_valeurs.Profession, T_Nouvelles_valeurs.Retraite, T_Nouvelles_valeurs.Divers, T_Nouvelles_valeurs.DateDeces, T_Nouvelles_valeurs.DateRadiation, T_Nouvelles_valeurs.MotifRadiation, T_Nouvelles_valeurs.Chemin
    FROM T_Nouvelles_valeurs
    WHERE (((T_Nouvelles_valeurs.Adherent)=True))
    GROUP BY T_Nouvelles_valeurs.N°Adherent, T_Nouvelles_valeurs.Titre, T_Nouvelles_valeurs.NomAdherent, T_Nouvelles_valeurs.PrenomAdherent, T_Nouvelles_valeurs.CP, T_Nouvelles_valeurs.Adresse, T_Nouvelles_valeurs.Ville, T_Nouvelles_valeurs.Region, T_Nouvelles_valeurs.Pays, T_Nouvelles_valeurs.Telephone, T_Nouvelles_valeurs.Fax, T_Nouvelles_valeurs.Mobile, T_Nouvelles_valeurs.EMail, T_Nouvelles_valeurs.DateNaissance, T_Nouvelles_valeurs.Adherent, T_Nouvelles_valeurs.TypeAdherent, T_Nouvelles_valeurs.DateAdhesion, T_Nouvelles_valeurs.Fonction, T_Nouvelles_valeurs.Origine, T_Nouvelles_valeurs.DateOrigine, T_Nouvelles_valeurs.Specialite, T_Nouvelles_valeurs.Profession, T_Nouvelles_valeurs.Retraite, T_Nouvelles_valeurs.Divers, T_Nouvelles_valeurs.DateDeces, T_Nouvelles_valeurs.DateRadiation, T_Nouvelles_valeurs.MotifRadiation, T_Nouvelles_valeurs.Chemin
    HAVING (((Max(T_Nouvelles_valeurs.MiseAJour))>=[A partir de quand ?]))
    ORDER BY Max(T_Nouvelles_valeurs.MiseAJour) DESC , T_Nouvelles_valeurs.NomAdherent;


    Pour chaque adhérent concerné, toutes les coordonnées sont reprises.
    Or un adhérent peut apparaitre plusieurs fois ; par exemple dans le cas d'un déménagement l'on peut noter dans un 1er temps sa nouvelle adresse et dans un 2ième temps son nouveau N° de mobile s'il en a profité pour changer d'opérateur.
    Ainsi sur cette ligne apparaissant en 1er dans la liste, on aura à la fois sa nouvelle adresse et son nouveau mobile.

    Comment faire en sorte que seule cette ligne ressorte, et pas celle où seule l'adresse a été modifiée ?

    Merci de votre aide.
    A+

    C15nantes

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Tu peux faire ça en deux temps.

    Une sous-requête SousReq1 pour chercher la dernière mise à jour par adhérent :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Nouvelles_valeurs.N°Adherent, Max(T_Nouvelles_valeurs.MiseAJour) AS MaxDeMiseAJour
    FROM T_Nouvelles_valeurs
    GROUP BY T_Nouvelles_valeurs.N°Adherent

    puis la requête principale :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_Nouvelles_valeurs.*
    FROM T_Nouvelles_valeurs INNER JOIN SousReq1 
    ON (T_Nouvelles_valeurs.MiseAJour = SousReq1.MaxDeMiseAJour) 
            AND (T_Nouvelles_valeurs.N°Adherent = SousReq1.N°Adherent)
    WHERE T_Nouvelles_valeurs.Adherent AND T_Nouvelles_valeurs.MiseAJour>=[A partir de quand ?]

  3. #3
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Merci de ta réponse qui fonctionne à un tout petit détail près.

    La boite de dialogue [A partir de quand ?] apparait 2 fois.
    Il me la faut donc la renseigner 2 fois avec la même date pour avoir ma feuille de réponse.

    Peut-on éviter cela ?

    Merci

    C15nantes

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Je ne vois pas pourquoi il demanderait deux fois, sinon que le nom du paramètre est mal orthographié à un endroit

    As-tu déclaré le paramètre en type de données "Date et heure" ? (Le bouton [Paramètres] dans le ruban).

  5. #5
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    Je ne vois pas où il y aurait une erreur de saisie, j'ai tout vérifié
    Par ailleurs je suis sous 2003.
    Indépendamment de cela, je ne vois pas où régler date/heure pour le paramètre.

    Merci de ton aide.

    C15nantes

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par C15nantes Voir le message
    Par ailleurs je suis sous 2003.
    Indépendamment de cela, je ne vois pas où régler date/heure pour le paramètre.
    Ah oui, 2003... mais il doit bien y avoir un menu Requêtes avec une option Paramètres il me semble.

    Je n'arrive pas à reproduire le problème chez moi (Access 2013), peut-être un problème de version.

    Essaie en imbriquant la sous-requête dans la requête principale. En reprenant mon message précédent cela donnerait :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T_Nouvelles_valeurs.*
    FROM T_Nouvelles_valeurs INNER JOIN 
        (
         SELECT T_Nouvelles_valeurs.N°Adherent, Max(T_Nouvelles_valeurs.MiseAJour) AS MaxDeMiseAJour
         FROM T_Nouvelles_valeurs
         GROUP BY T_Nouvelles_valeurs.N°Adherent
        ) SousReq1 
    ON (T_Nouvelles_valeurs.MiseAJour = SousReq1.MaxDeMiseAJour) 
            AND (T_Nouvelles_valeurs.N°Adherent = SousReq1.N°Adherent)
    WHERE T_Nouvelles_valeurs.Adherent AND T_Nouvelles_valeurs.MiseAJour>=[A partir de quand ?]

  7. #7
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Merci de cette réponse.

    D"un part en copiant collant la syntaxe contenue dans le mail, j'ai eu un message "erreur dans la clause FROM".
    En reprenant cette syntaxe dans le post du forum (il semblerait que dans le mail une * de trop trainait après INNER JOIN), plus de message d'erreur mais toujours 2 paramètres demandés.
    En creusant un peu, je me suis aperçu d'un truc.
    La feuille de réponse m'affichait le résultat en dates croissantes de mises à jour. Si je triais dans l'ordre inverse, cela coinçait à nouveau (double paramètres demandé)
    En mode création, que je maitrise nettement mieux que le mode SQL, et ce n'est pas difficile, j'ai mis un tri décroissant sur la mise à jour.
    Et là, miracle, cela marche ; une seule fois le paramètre [à partir de quand ?] m'est demandé !

    Va comprendre Charles

    J'ai donc maintenant

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T_Nouvelles_valeurs.*
    FROM T_Nouvelles_valeurs INNER JOIN [SELECT T_Nouvelles_valeurs.N°Adherent, Max(T_Nouvelles_valeurs.MiseAJour) AS MaxDeMiseAJour
         FROM T_Nouvelles_valeurs
         GROUP BY T_Nouvelles_valeurs.N°Adherent
        ]. AS Requete1 ON (T_Nouvelles_valeurs.N°Adherent = Requete1.N°Adherent) AND (T_Nouvelles_valeurs.MiseAJour = Requete1.MaxDeMiseAJour)
    WHERE (((T_Nouvelles_valeurs.MiseAJour)>=[A partir de quand ?]) AND ((T_Nouvelles_valeurs.Adherent)<>False))
    ORDER BY T_Nouvelles_valeurs.MiseAJour DESC;

    Pour info, ta proposition N-1 fonctionne aussi si l'on applique ce principe.

    Ce problème est donc a priori résolu et je t'en remercie.

    Bon week-end

    C15Nantes

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/06/2014, 14h49
  2. Réponses: 4
    Dernier message: 27/12/2012, 13h30
  3. Regrouper par la valeur la plus récente
    Par iliak dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/08/2011, 18h50
  4. [vXIr2] valeur la plus récente d'une table
    Par schkrumble dans le forum Designer
    Réponses: 5
    Dernier message: 02/02/2010, 14h29
  5. Réponses: 3
    Dernier message: 18/02/2009, 10h00

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