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 :

Faire une moyenne en excluant les 0


Sujet :

Access

  1. #1
    Lag
    Lag est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 74
    Points
    74
    Par défaut Faire une moyenne en excluant les 0
    Bonjour,

    Je bute sur un problème simple :
    J'ai une table avec des champs note et un champ nom: [note1], [note2], [note3] , [nom].

    Je souhaite faire une requête qui me fasse la moyenne de note1, note2, note3 en excluant les notes qui seraient nulles (=0).

    Pas de pb sur Excel avec la fonction NB.SI() pour calculer le dénominateur, mais impossible de trouver une fonction similaire sur Access.

    J'ai cherché avec Compte() mais il n'y a pas de possibilité d'inclure un critère.
    J'ai cherché avec CpteDom() mais dans ce cas il me fait une moyenne de toutes les note1,2,3 de la table et non pour chaque enregistrement.

    Ca a l'air pourtant simple comme question et à moins de partir dans des fonctions complexes type vraifaux() je ne vois pas comment m'en sortir.

    Merci de votre aide !!!

  2. #2
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    C'est complexe VraiFaux?

    moi je fais avec ça...

  3. #3
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,
    il y a qqchose que je n'ai pas compris. tu exclut du calcul moyenne lorsque tous les champs (note1, note2, note3) sont à 0 ou est ce que c'est dès lors l'un des champs est à 0.

  4. #4
    Lag
    Lag est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 74
    Points
    74
    Par défaut
    Merci de vous intéresser au problème

    Je me suis débrouillé avec des requêtes et des vraisfaux() mais cela a pris un max de temps car j'ai une trentaine de notes réunies dans des familles...

    Je suis cependant toujours intéressé par connaître un moyen plus "propre" : il s’agirait "simplement" de transcrire sous Access la formule NB.SI...

    Les champs sont regroupés dans des familles. Je calcule par enregristrement la moyenne pour chaque famille.
    Je cherche à retirer les champs qui sont à 0 du calcul de la moyenne car dans mon système un 0 signifie "sans objet" et celui-ci ne devrait pas impacter les moyennes des familles.

    Sous Excel la formule serait du style : Moy_Famille1 = Somme(Note1:Note3) / NB.SI (note1:note3;"<>0")

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le problème c'est l'ambiguité de 0 à qui tu donnes deux rôles
    0 peut repérenter une note et doit être pris en compte et tu lui donnes
    le rôle de sans objet qui aurait pu être nul et justement nul n'est pas pris en compte par les moyennes

  6. #6
    Lag
    Lag est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 74
    Points
    74
    Par défaut
    Sans rentrer dans les motifs du comment du pourquoi, je suis obligé d'avoir la valeur 0 dans les champs.

    Si le moyen existe cela m'intéresse de le connaître

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    la fonction moyenne des fonctions de regroupement ne prend pas en compte les valeurs non numériques ou nulles
    tu peux procéder ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function annul0(x As Variant) As Variant
    Dim vide As Variant
    If IsNull(x) Or x = 0 Then
    annul0 = vide
    Else
    annul0 = x
    End If
    End Function
    tu peux ensuite demander la moyenne de note

  8. #8
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Sous Excel la formule serait du style : Moy_Famille1 = Somme(Note1:Note3) / NB.SI (note1:note3;"<>0")
    Sous Access tu peux utiliser les fonctions de regroupements de domaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Moy_Famille1  = DSum("Note","MaTable") / Dcount("*","MaTable","Note>0")
    Cet exemple ne tient pas compte de la possibilité de valeur nulle dans le champ note. Et il n'est pas indiquée pour être utilisée dans une requête.

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le plus simple ne serait pas de baser les calculs sur une requête qui se chargerait via sa clause where d'enlever les 0 ?

  10. #10
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    En soi ce n'est pas le plus simple car tout dépend des besoins (requête ou pas requête).

    Mais comme Lag demande bien une requête, tu raison tofalu.
    J'avais lu un peu vite.

    Donc voici comment faire avec une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Avg([MaTable].[note]) AS Moy_Famille1
    FROM [SELECT Note FROM MaTable WHERE Note>0]. AS T;

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Avg([MaTable].[note]) AS Moy_Famille1 
    FROM MaTable WHERE Note>0

  12. #12
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Tofalu +1
    Je me suis emêlé les pinceaux entre Having et Where.

    Bon je démissione

  13. #13
    Lag
    Lag est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 74
    Points
    74
    Par défaut
    Merci à tous pour vos (précieuses) réponses !!!

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

Discussions similaires

  1. Faire une moyenne en excluant des valeurs
    Par slydefr007 dans le forum Développement
    Réponses: 3
    Dernier message: 05/01/2012, 17h58
  2. Réponses: 4
    Dernier message: 11/11/2008, 15h18
  3. Faire une moyenne en ignorant les valeurs nulles
    Par Giansolo dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/06/2007, 14h38
  4. Réponses: 1
    Dernier message: 03/05/2006, 10h49
  5. Réponses: 9
    Dernier message: 07/11/2005, 19h57

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