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

Macros et VBA Excel Discussion :

Loi de poisson et #VALEUR!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Par défaut Loi de poisson et #VALEUR!
    Bonsoir à tous,

    Voilà mon problème :
    J'ai développé un fonction personnelle qui utilise la loi de poisson pour faire un calcul de nombre de pièces de rechanges.
    Ma fonction effectue des itérations successives jusqu'à ce que le calcul par loi de poisson respecte une condition donnée (passée en 4e paramètre).
    Autant à la première itération le calcul s'effectue bien autant pour toutes les itérations suivantes je récupère le message d'erreur #VALEUR!.
    Pouvez-vous SVP m'aider à comprendre quelle est mon erreur ?

    Merci d'avance pour vos réponses.
    Cordialement
    oracle7556

    PS : Pour aider à comprendre ce qui ce passe voici une copie d'écran et le code VBA de ma fonction :



    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Public Function F_Calcul_NbRechanges(pi_NbMateriel As Integer, pi_Aor As Integer, _
                                         pd_lambda As Double, pd_Pnrs As Double) As Integer
    '=======================================================================================
    ' Fonction      : F_Calcul_NbRechanges
    ' Objet         : Calculer le nombre de rechanges nécessaires pour maintenir un ensemble _
                      d'équipements tout en respectant une PNRS donnée.
    ' Crée le       : 05/05/2010 par JCR
    ' Description   : On utilise la loi de poisson pour déterminer par itérations successives _
                      le nombre de rechanges adéquats
    ' Arguments     : pi_NbMateriel IN = Nombre d'équipements pris en compte _
                      pi_Aor IN = Temps de fonctionnement opérationnel annuel des équipements _
                      pd_Lambda IN = Mid Time Between Failure de l'équipement _
                      pd_Pnrs IN = Probabilité de Non Rupture de Stock à respecter
    ' Valeur retour : Nombre de Rechanges calculé
    '=======================================================================================
    ' Utilisation   : vi_NbRechanges = F_Calcul_NbRechanges(pi_NbMateriel,pi_Aor,pd_Lambda,pd_Pnrs)
    '==============================Historique des modifications=============================
    ' Date          Indice      Auteur      Sujet
    ' 05/05/2010    A00         JCR         Création
    '
    '---------------------------------------------------------------------------------------
        ' Déclarations Publiques / Privées
    '---------------------------------------------------------------------------------------
        Dim vb_Test As Boolean  ' Indicateur de sortie de boucle
        Dim vd_NbRechanges As Double    ' Nombre de rechanges calculé
        Dim vd_NbPannes As Double   ' Nombre de pannes attendues
        Dim vd_LoiPoisson As Double ' Résultat de l'application de la loi de poisson
    '---------------------------------------------------------------------------------------
        ' Initialisations
    '---------------------------------------------------------------------------------------
        vd_NbRechanges = 0
        vb_Test = False
    '---------------------------------------------------------------------------------------
        ' Implémentation
    '---------------------------------------------------------------------------------------
        ' On calcule de nombre de pannes attendues
        vd_NbPannes = pi_NbMateriel * pi_Aor * pd_lambda
        Do
            ' On applique la loi de poisson pour chaque évenement
            vd_LoiPoisson = WorksheetFunction.Poisson(vd_NbRechanges, vd_NbPannes, False)
            ' On vérifie que le calcul respecte la PNRS imposée
            If vd_LoiPoisson > pd_Pnrs Then
                ' OUI : Fin du calcul
                vb_Test = True
            Else
                ' NON : on passe à l'évenement suivant
                vd_NbRechanges = vd_NbRechanges + 1
            End If
        Loop Until vb_Test
        ' On renvoie le Nb de rechanges calculé
        F_Calcul_NbRechanges = CInt(vd_NbRechanges)
     
    End Function

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour oracle7556,

    pour pd_Pnrs = 0.95, la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If vd_LoiPoisson > pd_Pnrs Then
    ne pourra jamais être vrai car au premier passage de la boucle
    vd_LoiPoisson = 0.700242903
    au
    2ème vd_LoiPoisson = 0.249516153
    3ème vd_LoiPoisson = 0.044454796
    4ème vd_LoiPoisson = 0.005280163
    etc..
    toujours en diminuant jusquà 0 et là c'est l'erreur.
    171 ème vd_LoiPoisson = 0

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Par défaut
    Bonsoir sabzzz

    1 - Merci de ta réponse mais je crains que tu ne te sois trompée dans tes calculs :
    ne pourra jamais être vrai car au premier passage de la boucle
    vd_LoiPoisson = 0.700242903
    au
    2ème vd_LoiPoisson = 0.249516153
    3ème vd_LoiPoisson = 0.044454796
    4ème vd_LoiPoisson = 0.005280163
    etc..
    toujours en diminuant jusquà 0 et là c'est l'erreur.
    171 ème vd_LoiPoisson = 0
    Car lorsque je fais les calculs à la main par ailleurs je ne trouve pas du tout les valeurs que tu annonces. Ce n'est pas grave car j'ai trouvé par hazard l'erreur.
    Je ne sais pas l'expliquer mais en tous cas la fonction répond correctement maintenant.
    En fait il suffisait d'écrire autrement la ligne de calcul suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ' On calcule de nombre de pannes attendues
        vd_NbPannes = pi_NbMateriel * pi_Aor * pd_lambda
    en l'écrivant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ' On calcule de nombre de pannes attendues
        vd_NbPannes = pi_NbMateriel * pd_lambda * pi_Aor
    A priori cela semble être la même chose du pont de vue syntaxe mais toujours est-il qu'avec cette nouvelle écriture cela marche !
    Informatiquement c'est à rien y comprendre !

    Du coup je considère le problème et le post comme résolu.

    Merci encore de ton aide.
    Cordialement
    oracle7556

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

Discussions similaires

  1. Test khi deux avec la loi de poisson
    Par mehdi1989 dans le forum Général VBA
    Réponses: 0
    Dernier message: 28/02/2012, 20h16
  2. Réponses: 4
    Dernier message: 07/01/2012, 16h07
  3. Test d'adéquation à la loi de Poisson
    Par Petru16 dans le forum SAS STAT
    Réponses: 0
    Dernier message: 15/06/2010, 15h26
  4. Loi de Poisson sous VBA Access
    Par speedway dans le forum VBA Access
    Réponses: 5
    Dernier message: 11/03/2008, 15h18
  5. Réponses: 4
    Dernier message: 18/01/2007, 13h48

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