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 :

calcul moyenne avec champs vides


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut calcul moyenne avec champs vides
    bonjour je suis entraine de creer une base de données pour feuille de calcul moyenne ,ecarttype et max avec des fonctions importées d'excel .
    mais en essayant la feuille de calcul j'ai remarque que lorsque il ya quelque champs vides le resultat n'est pas reel selon le champ introduit ie
    la fonction definie dans le module avec 5 argument
    avg(x,y,z,t,h) la fonction prend toujours en comptes 5 champs
    si j'ai avg(1,1,1,0,0) resultat 0.6 au lieu de 1
    j'aimerai bien que quelqu'un m'apprends ou m'indique comme faire de telle facon que la fonction ne prends pas en compte les champs vides ou valeur 0

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 372
    Points
    34 372
    Par défaut
    bonjour pascal,
    la fonction avg en question, tu peux nous en indiquer le code stp ? ou est-ce une fonction déjà toute faite (mais je ne comprends pas l'obligation des 5 valeurs)...

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    bonjour monsieur merci pour votre interet c'est tres important pour moi le code est le suivant
    definition dans module moyenne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function avg(x, y, z, t, h) As Double
    Dim monexcel As Excel.Application
    avg = Excel.WorksheetFunction.average(x, y, z, t, h)
    Set monexcel = Nothing
    End Function
    la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Commande79_Click()
    Lecture_moyenne_A = avg([Mesure_A1], [Mesure_A2], [Mesure_A3], [Mesure_A4], [Mesure_A5])
    merci mr

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 372
    Points
    34 372
    Par défaut
    bonjour,
    si tu utilises la fonction toute faite avg d'excel, il est normal que si tu as une valeur vide, il mette 0, et tu auras bien 0.6 de moyenne et non pas 1 pour ta série {1,1,1,0,0}
    Si tu te limites à ces 5 éléments, tu peux créer ta propre fonction, dans laquelle tu auras d'une part la somme des éléments et d'autre part le nombre d'éléments pris en compte.

    Tu vois le raisonnement ? Sauras-tu le coder seul ?

    Bonne journée.
    JP

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci mr je vous serai tres reconnaissant si vous me montrer comment procede en verite je ne suis pas tres bien cale

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    je m'excuse mr au dbut j'ai mal lu votre reponse
    si j'ai bien compris je vais utilise les fonction sum divise par fonction nbval,
    mais sous access c'est un peu difficile

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 372
    Points
    34 372
    Par défaut
    une idée vite fait de fonction non optimisée

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Function MoyenneHorsZero(a as double, b as double, c as double, d as double, e as double) as double
    Dim i as integer
    dim total as double
    total = 0
    i=0
    if (not isnull(a)) then
    if (a<>0) then
    total = a
    i=i+1
    end if
    end if
    if (not isnull(b)) then
    if (b<>0) then
    total = total+b
    i=i+1
    end if
    end if
    if (not isnull(c)) then
    if (c<>0) then
    total = total+c
    i=i+1
    end if
    end if
    if (not isnull(d)) then
    if (d<>0) then
    total = total+d
    i=i+1
    end if
    end if
    if (not isnull(e)) then
    if (e<>0) then
    total = total+e
    i=i+1
    end if
    if i<> 0 then
    MoyenneHorsZero = total/i 
    else 
    MoyenneHorsZero = 0
    end if
    End Function

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup mr je vais la tester etje vous tiendrai au courant a tts

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut remerciments
    bonjour mr jpcheck
    je suis tres satisfait pour ton grand aide et je vous remecie profondement, la fonction marche tres apres quelque tres leger ajout
    aussi si vous pourriez m'aidez sur l'ecarttype est ce que c'est toujours la meme chose svp quelque explications ou m'orientes vers des liens ou tutoje vous remercie encore une fois a bientot

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

Discussions similaires

  1. requete avec champs vide
    Par le69 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2006, 16h57
  2. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15
  3. Pb sélection avec Champ vide
    Par Luffy Duck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 12h11
  4. [stringtokenizer] probleme avec champs vides
    Par gege2mars dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2004, 08h25
  5. Pb de tri avec champs vide
    Par nesbla dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42

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