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

Requêtes et SQL. Discussion :

Tableau récapitulatif par adhérent


Sujet :

Requêtes et SQL.

  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 Tableau récapitulatif par adhérent
    Bonjour à tous et à toutes,

    Dans une base gérant des adhérents (modèle simplifié joint), je voudrais faire une requête qui récapitule, pour chaque adhérent, les cotisations payées, entre telle et telle année (voir fichier joint issu d'une ancienne configuration de la base).
    Pour l'AG qui va avoir lieu bientôt, l'on voudrait avoir les années de 2014 à 2019, sachant que l'année prochaine ce serait de 2015 à 2020...

    En fait, c'est une requête analyse croisée avec en ligne les noms et prénoms (de T Adhérents), en colonnes les années (Cotisation_An de T_Cotisation) et en valeur les case à cocher (Cotisation de T Cotisation)
    J'ai un problème de conception sur lequel je butte.

    Merci de votre aide.
    A+

    C15
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Access marche assez mal avec des entetes variables.

    La solution la plus simple est de remplacer tes annees par quelque chose comme AnneeOffeste ou AnneeOffset vaut : 0, 1, 2, 3, 4 ou 5.
    Comme cela tes entetes sont constantes, puis a l'affichage de remplacer 0 ... 5 par les valeurs que tu veux.
    Tu as quelque part l'annee de reference et tu y ajoutes l'offset et tu affiches ces valeurs.

    Une autre solution est de changer la source de tes champs d'affichage en function des annees mais la 1ere solution est a mon avis plus facile a mettre en oeuvre.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 261
    Points : 6 557
    Points
    6 557
    Par défaut
    Salut
    Le plus simple, peut-être, serait de créer une req (REQ_01) avec les tbl T Adhérents et T_Cotisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [T Adhérents].N°Adherent, [Titre] & " " & [Nom] & " " & [Prenom] AS Adherent, T_Cotisation.Cotisation_An, T_Cotisation.Cotisation_Du
    FROM [T Adhérents] INNER JOIN T_Cotisation ON [T Adhérents].N°Adherent = T_Cotisation.T_Adherent_FK;
    puis cette req d'analyse croisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(REQ_01.Cotisation_Du) AS SommeDeCotisation_Du
    SELECT REQ_01.N°Adherent, REQ_01.Adherent, Sum(REQ_01.Cotisation_Du) AS [Total de Cotisation_Du]
    FROM REQ_01
    WHERE (((REQ_01.Cotisation_An) Between 2014 And 2019))
    GROUP BY REQ_01.N°Adherent, REQ_01.Adherent
    PIVOT REQ_01.Cotisation_An;
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  4. #4
    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,

    Erreur de ma part concernant le fichier joint

    J'ai donc mis la bonne version de ma base test.
    J'en ai profité pour creuser le problème ; j'ai réussi à créer la requête qui m'intéresserait (0_R_Cotisations_2014_2019).
    Par contre sur le plan exploitation ce n'est pas le top.
    J'aurai voulu avoir non pas des -1 et de 0, mais des cases cochées ou pas.

    J'ai trouvé une solution efficace mais lourde.
    Exporter le résultat de la requête vers Excel et remplacer les -1 et 0 par des cases cochées ou des carrés vides (via la police Wingdings2).
    Ce n'est pas ni élégant ni dynamique.

    Si vous me dites "Y'a plus simple", je ne serai ni surpris ni vexé

    Merci de votre aide
    A+
    C15
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 261
    Points : 6 557
    Points
    6 557
    Par défaut
    Salut,
    impossible de modifier la police de caractère directement dans ta tbl d'analyse croisée.
    Il te faut construire un état avec ta req (0_R_Cotisations_2014_2019), sans regroupement et avec la disposition "tabulaire".
    En mode création :
    - sélectionner les 5 zones de texte 2014 à 2019
    - dans la fenêtre de propriétés, activer l'onglet Format
    - dans la propriété Format saisir ce qui suit :
    -> appuyer sur la touche Alt, la maintenir appuyée et taper sur le clavier numérique 0168, lâcher tout. Ce Alt 0168 = case non cochée
    -> taper ; (point virugle)
    -> taper \ (antislash)
    -> appuyer sur la touche Alt, la maintenir appuyée et taper sur le clavier numérique 0254, lâcher tout, puis Entrée. Ce Alt 0254 = case cochée
    Chercher la propriété Police et sélectionner Wingdings.

    Ne pas me demander de faire plus exotique
    Ne fonctionne que pour les champs de type Oui/Non
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Je pense que tu peux utiliser directement des cases a cocher de Access dans ton rapport/fiormulaire au lieu de jouer avec la police.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 261
    Points : 6 557
    Points
    6 557
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.
    Je pense que tu peux utiliser directement des cases a cocher de Access dans ton rapport/fiormulaire au lieu de jouer avec la police.
    A+
    Salut Marot
    Je suis allé à l'essentiel. Et comme C15 voulait un peu d'exotisme avec la police wingdings, alors ...
    De plus, les champs sont de type numérique, il m'aurait fallu supprimer les textbox pour les remplacer par des checkbox. trop de travail
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  8. #8
    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 Hyperion13,

    Merci de cette réponse.
    En faisant des tests entre ta proposition et Excel (pour les différents caractères possibles), je me suis aperçu que dans Format (police wingdings2 bien sur) si je saisis (dans cet ordre là)
    £;\R, j'obtiens les cases cochées ou vides.
    C'est en m'étant planté à plusieurs reprises dans la manipulation des touches que je suis arrivé à cette solution "directe".

    Toujours est-il que tu m'as apporté la bonne réponse.

    Affaire rapidement conclue, merci encore
    C15

  9. #9
    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,

    Désolé marot_r je t'ai oublié dans mes remerciements.

    J'avoue que ta proposition m'a fait un peu peur, d'autant plus que j'en suis à une nième configuration de ma base...et que je n'ai pas encore exploité une proposition faite par Hyperion13...avant la canicule

    A+
    C15

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.


    J'avoue que ta proposition m'a fait un peu peur, d'autant plus que j'en suis à une nième configuration de ma base
    Desole de t'avoir inquiete.

    L'idee est assez simple, je vais la detailler un peu.
    Il suffit de faire une requete qui calcule DateDiff("yyyy", DateSerial([Forms]![frmParam]![AnneeDebut],1,1), [DateCotisation]), cela te donne un resultat entre 0 et 5.
    Apres tu fais une requete croisee dynamique qui te donne en colone 0 a 5.
    Tu te sers de cette requete comme source du rapport.
    A la place des etiquettes des colonnes, tu mets des controles textes dont la valeur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =[Forms]![frmParam]![prmAnneeDebut]
    =[Forms]![frmParam]![prmAnneeDebut]+1
    ...
    =[Forms]![frmParam]![prmAnneeDebut]+5
    Cela va t'afficher tes annees de cotisations (meme si en dessous ce sont les champs 0 a 5).

    Pour l'affichage des colonnes tu utilises des cases a cocher a la place des champs texte.

    Donc tu as juste besoin
    1. d'un formulaire ou tu saisis l'annee de depart.
    2. d'une requete de selection.
    3. d'une requete croisee dynamique.
    4. d'un rapport.


    Ca prends peut-etre 1/2h a creer et tu as une solution qui marche pour toutes les periodes, pas seulement pour 2014-2019.
    La seule partie qui change c'est la valeur du parametre AnneeDebut.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    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 marot_r

    Je me suis lancé dans l'essai de ta procédure
    J'ai créé un formulaire 0_F_frmParam avec une zone de texte AnneeDebut
    J'ai fait une requête avec le champ (il m'a fallu changer "yyyy" en "aaaa")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    periode: DiffDate("aaaa";SérieDate([Formulaires]![0_F_frmParam]![AnneeDebut];1;1);[T_Cotisation]![Cotisation_An])
    Quand j'exécute la requête un pop up s'ouvre me demandant de renseigner Formulaires!0_F_frmParam!AnneeDebut
    Si je mets, par exemple, 2015, la réponse, pour tous les enregistrements de chacun, est -110
    Les différents tests effectués m'ont permis d'en conclure que c'était le nombre d'années entre 2015 et...1905

    J'ai essayé avec
    qqq: DiffDate("aaaa";[Formulaires]![0_F_frmParam]![AnneeDebut];[T_Cotisation]![Cotisation_An])
    et là j'ai 0 pour tout le monde

    Je pense qu'il y a quelques chose qui m'a échappé.

    Merci de ton aide

    A+

    c15

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    [T_Cotisation]![Cotisation_An] est une date complete (annee/mois/jour) ou seulement une annee ?

    Si c'est seulement une annee il faut simplement faire la soustraction avec le parametre.

    Aussi il faut que le formulaire soit ouvert pour que Access puisse le lire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    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,

    Effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [T_Cotisation]![Cotisation_An]
    est une année

    Par contre, je ne comprends pas
    "il faut simplement faire la soustraction avec le parametre."

    Merci de ton aide.
    A+
    C15

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    DateDiff fait la difference entre 2 dates. Les dates sont des choses un peu speciales et on ne peut pas les utiliser comme des nombres banals.
    La tu as des nombres ordinaires donc pas la peine de se casser la tete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    periode: [Formulaires]![0_F_frmParam]![AnneeDebut] - [T_Cotisation]![Cotisation_An]
    Ou peut etre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    periode: [T_Cotisation]![Cotisation_An] - [Formulaires]![0_F_frmParam]![AnneeDebut]
    Une simple soustraction suffit.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    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 marot_r,

    En faisant un mix de ta dernière proposition et ce qui avait déjà été conçu (grâce aux contributeurs de ce forum, dont toi et Hyperion13), j'ai
    créé un formulaire 0_ FORMULAIRE_COTISATIONS_AG, permettant de saisir une année de référence (par exemple 2018)
    il génère une requête 0_R_COTISATIONS_AG, basée sur la requête 0_R_adhérents_présents_Ag_Année_actuelle et la table T_Cotisation
    j'ai donc les cotisations de 2014 à 2019
    créé un état basé sur cette requête 0_R_COTISATIONS_AG
    le code dans Module_Cotisations_AG

    Cela fonctionne bien...sauf 2 points :
    en faisant des tests sur une autre année de référence (par exemple pour l'année prochaine 2019), si la requête me donne les bons résultats, l'état n'est pas actualisé au niveau des données car les années n'ont pas "glissé" de 2015 à 2020
    pour que mes en-têtes de colonnes de l'état soit actualisés, il faut que mon formulaire est ouvert ; sur le plan visuel, ce n'est pas le top. Quelle commande utiliser pour le minimiser ?

    Pour être plus clair encore, le but de cet état est d'obtenir un récapitulatif, par adhérents, des cotisations payées (les cases ont cochées) ce qui permet, lors de l'AG de faire le point et réclamer argent
    Cette liste ne doit concerner QUE les présents à l'AG (d'où la requête 0_R_adhérents_présents_Ag_Année_actuelle)
    Par ailleurs, certains adhérents payant non seulement la cotisation de l'année mais aussi celle de l'année suivante, cela justifie le fait que l'année prochaine apparaisse.

    Merci de ton aide
    A+

    C15
    Fichiers attachés Fichiers attachés

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Les etats sont des objets "statiques" qui ne sont mis a jour qu'a l'ouverture.
    Donc si tu changes tes criteres et que l'etat est deja ouvert, il reste le meme.
    C'est un peu domage et trompeur.

    Le truc est donc de fermer le rapport avant de l'ouvrir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if CurrentProject.AllReports("NomTomRapport").IsLoaded then
       docmd.close acReport, NomTomRapport
    end if
     
    docmd.openReport NomTomRapport
    Pour minimiser un formulaire :

    Il faut t'assurer que le formulaire est actif car DoCmd.Minimize s'applique a l'objet courant sans quel qu'il soit,

    Pour retablir le formulaire :

    ou

    et tu peux rendre le formulaire invisible :

    ou [CODEinline]Me.[/CODEinlline] est le formulaire courant.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    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

    Concernant le 1er point, je referme bien l'état à chaque fois mais en fait il garde "en mémoire" les valeurs précédentes.
    En effet le code qui me créé la requête inscrit "en dur" les années comme critères

    1 code requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation
    SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK = [0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK
    WHERE (((T_Cotisation.Cotisation_An) Between 2013 And 2018))
    GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    PIVOT T_Cotisation.Cotisation_An;
    2 code associé au bouton du formulaire
    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
    Public Sub PointCotisationsAG(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
     
        sSql = "TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation" _
    & " SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom" _
    & " FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK = [0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK" _
    & " WHERE ((T_Cotisation.Cotisation_An) Between " & NumDebut - 4 _
    & " And " & NumDebut + 1 & ")" _
    & " GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom" _
    & " PIVOT T_Cotisation.Cotisation_An;"
     
     
    Set q = CurrentDb.QueryDefs("0_R_COTISATIONS_AG")
      q.SQL = sSql
    End Sub
    Pour mon Between, il faudrait avoir Between Formulaires![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]-4 and Formulaires![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]+1
    Mais là il y a un problème de raisonnement et/ou de syntaxe que je ne sais maitriser.

    Merci de ton aide.
    A+
    C15

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim anneeDebut as long:anneedebut= Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     " WHERE T_Cotisation.Cotisation_An Between " & anneeDebut - 4 & " And " & anneeDebut + 1  _
    Mais tu sais qu'avec des parametres dans un formulaire tu peux ne pas changer le SQL.

    Ca devient :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation
    SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK = [0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK
    WHERE (((T_Cotisation.Cotisation_An) Between Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]-4 And Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]+1))
    GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    PIVOT T_Cotisation.Cotisation_An;

    Access va lui-meme aller pecher l'info dans le formulaire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  19. #19
    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 marot_r

    Désolé, mais cela ne fonctionne pas...ou alors je n'ai pas compris ta procédure.

    J'ai :
    modifié le code déclenchant la création de la requête :
    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
    Public Sub PointCotisationsAG(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
      Dim anneeDebut As Long: anneeDebut = Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]
     
        sSql = "TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation" _
    & " SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom" _
    & " FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK = [0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK" _
    & " WHERE T_Cotisation.Cotisation_An Between " & anneeDebut - 4 & " And " & anneeDebut + 1 _
    & " GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom" _
    & " PIVOT T_Cotisation.Cotisation_An;"
     
     
    Set q = CurrentDb.QueryDefs("0_R_COTISATIONS_AG")
      q.SQL = sSql
    End Sub
    modifié le code de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation
    SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK = [0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK
    WHERE (((T_Cotisation.Cotisation_An) Between Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]-4 And Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]+1))
    GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    PIVOT T_Cotisation.Cotisation_An;
    si je fais 2018 dans mon formulaire, ma requête et mon état font bien apparaitre les cotisations de 2014 à 2019, mais si je fais ensuite 2019, après avoir refermé l'état, le formulaire et la requête,
    la requête m'affiche de 2015 à 2020
    l'état m'affiche un message d'erreur (voir PJ). En effet, les sources des contrôles sont restées respectivement de 2014 à 2019, or 2014 n'est plus dans la requête
    Pour info, si l'on regarde le code de la requête on va avoir alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(T_Cotisation.Cotisation) AS SommeDeCotisation
    SELECT [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    FROM T_Cotisation INNER JOIN 0_R_adhérents_présents_Ag_Année_actuelle ON T_Cotisation.T_Adherent_FK=[0_R_adhérents_présents_Ag_Année_actuelle].T_Adherent_FK
    WHERE T_Cotisation.Cotisation_An Between 2015 And 2020
    GROUP BY [0_R_adhérents_présents_Ag_Année_actuelle].Nom, [0_R_adhérents_présents_Ag_Année_actuelle].Prenom
    PIVOT T_Cotisation.Cotisation_An;
    Il a transformé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((T_Cotisation.Cotisation_An) Between Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]-4 And Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart]+1))
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE T_Cotisation.Cotisation_An Between 2015 And 2020
    sans que pour autant cela soit pris en compte dans l'état et pourtant la source de mon état est bien la requête 0_R_COTISATIONS_AG


    Merci de ton aide
    A+
    C15
    Images attachées Images attachées

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Je me suis fait avoir par ton SQL que j'ai mal interprete, desole.

    Il faut que ton select te retourne des valeurs entre 0 et 4 pour les annees, pas les annees elles-meme.

    Je te conseille de faire 2 requetes separees :
    • reqDonnees : te donne la liste des donnees selectionnees avec les annees recalculees.
      ca ressemble a :

      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      select 
         [tblCotisation].[IdAdherant], 
         [tblCotisation].[Annee] - Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart] as [OffsetAnnee] 
      from
         [tblCotisation]
      where 
         [tblCotisation].[Annee] between Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart] - 4 and Forms![0_ FORMULAIRE_COTISATIONS_AG]![txtNombreDepart] + 1

      Si tu veux, pour validation, tu peux afficher l'annee de cotisation mais on ne s'en sert plus apres. On se sert de l'offset dans la requete d'analyse croisee dynamique.
    • reqACD : requete d'analyse croisee dynamique basee sur reqDonnees.
      Cette requete te donnes quelque chose comme :
      Adherant | 0 | 1 | 2 | 3 | 4
      Adherant X | 0 | 1 | 0 | 0 | 1 |
      Adherant Y | 1 | 1 | 1 | 1 | 1 |

      C'est a l'affichage dans le rapport que tu vas afficher les annees reeles a la place des entetes de colonnes 0, 1, 2, 3, 4.


    Couper ta requete en 2 va faciliter la mise au point.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 02h12
  2. Générer un tableau récapitulatif
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 14/11/2005, 10h01
  3. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 16h31
  4. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 18h21

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