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

IHM Discussion :

Probleme formule ou decodage


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 159
    Points : 55
    Points
    55
    Par défaut Probleme formule ou decodage
    Bonsoir

    on ne peut pas dire que le code soit mon ami lol
    je me tourne vers vous encore une fois pour trouver cette formule dans mon Etat

    ci joint l'Etat : Nom : donateur 3 saisons.png
Affichages : 199
Taille : 19,9 Ko

    j'aimerais avoir dans le champ tout en haut a gauche (le chiffre actuel n'est pas le bon ) un comptage sur les adhérents qui ont donne en n-1 ET en N-2 mais PAS en N ( saison en cours)

    si en plus la formule (ou macro ou code) pouvait ne pas faire référence nommément aux années elle serait universelle ce qui m'arrangerait (type N, N-1, N-2 j'espère que je me fais bien comprendre ?! en fait 1an ET 2 ans avant et saison actuelle)

    Cet Etat est le résultat d'un tab crois avec une colonne de critère ;TestSaisons3([Saison]) qui me donne systématiquement le N , N-1 et N-2

    ce test 3 saison est une macro faite par un tiers que voici que voila
    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 Function TestSaisons3(Saison As String) As Boolean
    Dim a1 As Long, a3 As Long, a As Long
     
       If Date > DateSerial(Year(Date), 6, 30) Then ' si supérieur au 30 juin - fin 3ème trimestre
          a1 = Year(Date) - 2 ' année n°1 (saison 1) = année en cours - 2
          a3 = Year(Date)     ' année n°3 (saison 3) = année en cours (dernière année)
       Else ' sinon
          a1 = Year(Date) - 3 ' année n°1 = année en cours - 3
          a3 = Year(Date) - 1   ' année n°3 = année en cours - 1
       End If
     
    a = Val(Saison) '1ère année de la saison
     
    TestSaisons3 = (a >= a1) And (a <= a3) '1ère année de la saison comprise entre début d'année de la 1ère saison et dbut d'année de la dernière saison
     
    End Function
    cordialement

    Patrick

  2. #2
    Modérateur

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

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

    La solution est de faire en sorte que tes données soient "universelle" donc dans la source de données, il faut que tu ai un champ calculé qui va déterminer quelle est l'année concernée.

    Je vais supposer que tu as l'architecture suivante :

    tblCotisation
    ClefCotisation
    AnneeCotisatio
    ClefAdherent

    tblAdherent
    ClefAdherent
    Autres infos (ex : Nom)

    Il te faut une requête qui te donne l'année de cotisation séquentielle

    quelque chose comme :

    reqCotisationSequentielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select tblCotisation.*, Year(Date()) - [tblCotisation].[AnneeCotisation] as AnneeSequentielle
    from tblCotisation
    0 est l'année courante, 1 l'année précédente et 2 l'année encore avant.

    Ensuite tu fais une requête qui te donne la liste des adhérents et leurs années séquentielles de cotisation sur 3 ans.

    reqCotisationAdherent3DernierAnnee
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblAdherent.*, reqCotisationSequentielle.AnneeSequentielle AS AnneeSequentielleCotisation
    FROM tblAdherent LEFT JOIN reqCotisationSequentielle ON tblAdherent.ClefAdherent = reqCotisationSequentielle.ClefAdherent
    WHERE (((reqCotisationSequentielle.AnneeSequentielle) Is Null Or (reqCotisationSequentielle.AnneeSequentielle) Between 0 And 2));

    le Is Null te permet d'avoir les adhérents qui n'ont pas cotisé sur les 3 dernières années.

    Après tu fais une requête d'analyse croisée dynamique qui te présente les cotisations sur les 3 dernières années.

    reqCotisationAdherent3DernierAnnee_3Colonne
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Count(reqCotisationAdherent3DernierAnnee.ClefAdherent) AS CompteDeClefAdherent
    SELECT reqCotisationAdherent3DernierAnnee.ClefAdherent
    FROM reqCotisationAdherent3DernierAnnee
    GROUP BY reqCotisationAdherent3DernierAnnee.ClefAdherent
    PIVOT reqCotisationAdherent3DernierAnnee.AnneeSequentielleCotisation;

    Utilise l'assistant pour la création de la requête croisée dynamique, la syntaxe est imbuvable.

    Enfin tu te sers de reqCotisationAdherent3DernierAnnee_3Colonne comme source de ton rapport.
    Comme sa structure va être constante tu n'auras pas à modifier ton rapport chaque année.

    Et la touche finale consiste à utiliser des textbox comme entête de tes colonnes dans le rapport pour les champs 0, 1, 2.
    Le contenu du textbox sera : year(date())-2 pour le champ [2], year(Date())-1 pour le champ [1] et Year(date)) pour le champ [0].

    Ton utilisateur aura l'illusion d'un rapport nouveau à chaque année mais toi tu n'auras jamais qu'un et un seul à maintenir.

    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
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 159
    Points : 55
    Points
    55
    Par défaut reponse a marot_r
    merci de ta réponse rapide j'ai une table nommée "Adherent" qui possède le champ saison (2016-2017, 2017-2018 etc) et celui qui nous interesse "Dons"

    d'ailleurs dans cette table nous avons toutes les informations désirées (ou presque) sur l'adhérent ses cotisations etc.

    ton propos permet de mieux m'expliquer ( et puis j'ai dormi dessus c'est plus clair aussi grace à ta réponse )

    Marot_r j'ai déja le requête analyse croisée avec les 3 ans qui changent à chaque saison pas de problème, (que tu as vu dans ma demande sous forme d'Etat mais provient bien de l'analyse croisée) moi ce qui m'intéresse c'est le champ tout en haut à gauche( actuellement marqué : 69 ce qui est faux )

    Ce champ doit comptabilisé le total des adhérent qui ont fait un don en N-1 ET n-2 mais pas sur N d'ailleurs à la réflexion c'est plus compliqué que je ne pensais effectivement car si on veut être complet il se peut qu'un adhérent ait donné en saison N-1 mais pas en N ( pas inscrit en N-2) l'autre cas est donné en N-1 ET en N-2 et pas en N il me semble qu'il n'y ait que ces 2 cas ?!!

    donc tu as raison il faut vérifier que l'adhérent est bien présent dans les saisons considérés , par exemple un adhérent qui est présent en N-2 qui a fait un don mais qui n'en a pas fait en N-1 et N ne veut pas dire qu'il n'a pas fait de don mais peut être qu'il ne s'est pas réinscrit auquel cas nous n'avons pas perdu son don en N!

    j'espère que ma demande est plus claire non? as tu besoin de tables, requêtes ou autres?

    Dit plus clairement en langage néophyte : je veux savoir qui n' a pas fait de don en saison en cours (N) alors qu'habituellement il en faisait ! c'est peut être plus simple de l'expliquer comme ça et pour être encore plus précis sur la finalité , je vais établir (ou pas) une corrélation entre les non don et les augmentations de tarif

    je suis intimement convaincu qu'à chaque grosse augmentation de tarif il y a des adhérents qui compensent en ne donnant pas cette saison là ( voila tu sais tout lol )

    cordialement

    Patrick

  4. #4
    Modérateur

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

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

    j'ai une table nommée "Adherent" qui possède le champ saison (2016-2017, 2017-2018 etc) et celui qui nous intéresse "Dons"
    Cette structure "à la Excel" n'est pas viable sur le long terme dans Access. Access marche avec des listes, des listes de listes, des listes de listes de listes ... pas avec des tableaux à 2 dimensions.
    Je t'invite à revoir la structure de ta BD en te basant sur le modèle que j'ai évoqué avec 1 enregistrement par saison.
    Ça va aussi considérablement simplifier ta logique de calcul.

    Ceci dit si tu ne souhaites pas (ou ne peut pas) changer ton architecture, la façon qui me paraît la plus simple est de faire un calcul par année puis d'additionner les résultats.
    Ça va t'éviter les tests du type il était l'an dernier mais pas cette année mais là l'année suivante qui sont compliqués et sujet à erreur.

    Donc tu pourrais utiliser quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("Clef"; "Adherent"; "Nz([2016],0)<>0")+DCount("Clef"; "Adherent"; "Nz([2017],0)<>0")+DCount("Clef"; "Adherent"; "Nz([2018],0)<>0")
    Éventuellement tu peux envisager de "créer" ce calcul par code VBA et faire en sorte que les noms de champs changent en fonction des années ce qui serait un moindre mal.

    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. Formule de decodage
    Par sebing dans le forum Langage
    Réponses: 0
    Dernier message: 13/03/2011, 22h02
  2. [XL-MAC 2011] Probleme formule et tri
    Par sebing dans le forum Excel
    Réponses: 1
    Dernier message: 29/01/2011, 10h36
  3. [6.5.1] probleme formule avec si et alors
    Par gwena2b dans le forum Débuter
    Réponses: 3
    Dernier message: 08/04/2009, 16h06
  4. probleme formule moyenne
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/09/2008, 14h53
  5. [BO XI][DESKI] PROBLEME FORMULE DANS CELLULE
    Par jbouat dans le forum Deski
    Réponses: 4
    Dernier message: 24/04/2008, 23h34

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