VBA Fonction NormInv

Hello tt le monde!

J'ai un petit souci que j'essaies de regler tant bien que mal sous excel en VBA.

J'essaies d'utiliser la fonction NormInv function et de l'appliquer sur plusieurs colonnes

Pour chaque colonne, je dois utiliser un parametre de " standard deviation" different.

Ci apres mon code, apparemment cela bugue au niveau de :

.Cells(i, j).Value = WorksheetFunction.NormInv(Rnd(), NormalMean, NormalSD)

et plus particulierement au niveau du parametre "NormalSD"

Est ce que quelqu'un aurait une piste/soluce à me filer? Merci bcp par avance!

Sub Button4_Click()
Dim i As Long 'ligne
Dim j As Integer 'column
Dim vReturn As Variant
Dim NormalMean As Double
Dim NormalSD As Single

Application.ScreenUpdating = False
With Worksheets("A")

For j = 1 To 134
For i = 4 To 152

If IsError(vReturn) Then
.Cells(i, "H") = ""
.Cells(i, "I") = ""

Else
If .Cells(2, j) = "Heure (hrs)" Then
vReturn = Application.Match(.Cells(1, j), Sheets("Data").Range("A:A"), 0)
NormalMean = Application.Index(Sheets("Data").Range("G:G"), vReturn)
NormalSD = Application.Index(Sheets("Data").Range("H:H"), vReturn)
.Cells(3, j).Value = NormalSD

Else
vReturn = Application.Match(.Cells(1, j - 1), Sheets("Data").Range("A:A"), 0)
NormalMean = Application.Index(Sheets("Data").Range("Q:Q"), vReturn)
NormalSD = Application.Index(Sheets("Data").Range("R:R"), vReturn)
.Cells(3, j).Value = NormalSD

End If
Randomize

.Cells(i, j).Value = WorksheetFunction.NormInv(Rnd(), NormalMean, NormalSD)

End If

Next i
Next j

End With
Worksheets("A").Visible = True
Worksheets("A").Activate
End Sub

​

PS: ​Voila, si je remplace dans la formule "NormalSD" par ".Cells(3, j).Value" ca ne marche pas mieux

bonsoir

dit moi ce que donne ce code ( les msgboxs)

 Sub Button4_Click()
    Dim i As Long 'ligne
    Dim j As Integer 'column
    Dim vReturn As Variant
    Dim NormalMean As Double
    Dim NormalSD As Single
On Error GoTo g1

    Application.ScreenUpdating = False
    With Worksheets("A")

    For j = 1 To 134
    For i = 4 To 152

    If IsError(vReturn) Then
    .Cells(i, "H") = ""
    .Cells(i, "I") = ""

    Else
    If .Cells(2, j) = "Heure (hrs)" Then
    vReturn = Application.Match(.Cells(1, j), Sheets("Data").Range("A:A"), 0)
    NormalMean = Application.Index(Sheets("Data").Range("G:G"), vReturn)
    NormalSD = Application.Index(Sheets("Data").Range("H:H"), vReturn)
    .Cells(3, j).Value = NormalSD

    Else
    vReturn = Application.Match(.Cells(1, j - 1), Sheets("Data").Range("A:A"), 0)
    NormalMean = Application.Index(Sheets("Data").Range("Q:Q"), vReturn)
    NormalSD = Application.Index(Sheets("Data").Range("R:R"), vReturn)
    .Cells(3, j).Value = NormalSD

    End If
    Randomize

    .Cells(i, j).Value = WorksheetFunction.NormInv(Rnd(), NormalMean, NormalSD)

    End If

    Next i
    Next j

    End With
    Worksheets("A").Visible = True
    Worksheets("A").Activate

g1: MsgBox NormalMean: MsgBox NormalSD: MsgBox Rnd()

    End Sub

Bonsoir,

Tout d'abord merci pour ta réponse.

Effectivement, en rajoutant les msgbox, cela remplit mon tableau!

Par contre effectivement quelques "messages" contenant des valeurs sont apparus (4 ou 5 fois), cela veut-il dire que cela plante à certains endroits?

Par ailleurs, je ne suis pas vraiment expert en VBA (d'où mes petits soucis!), à quoi servent ces msgbox concrètement? On outrepasse les éventuels problèmes de calcul/code?

Du coup, pour les messages qui apparaissent à certains moments, faut-il que je fasse une manipulation particulière?

Merci encore pour ton aide.

Bonne soirée/nuit

msg 3 msg 1 msg 2

bonjour

Les images sont elles ordonnées par premier qui apparaisse puis la deuxième puis la troisième.

Puisque : Si la probabilité est inférieure à 0 ou supérieure à 1, la fonction NORMINV renvoie la valeur d'erreur #NUM!

Oui les images sont ordonnées dans ce sens.

1er: chiffre 0.7269

2nd: 17.999

3rd: 54

Merci!

bonjour

Dans le code les msgbox sont ordonnées comme ca :

g1: MsgBox NormalMean: MsgBox NormalSD: MsgBox Rnd()

Alors la troisième msgbox doit être supérieure à 0 et inférieure à 1 et ce n est pas le cas sur tes images

Oui autant pour moi, c'est bien:

1er: 54

2nd: 17.999

3rd: 0.7269

Bonjour

SVP envoyer un exemple de ton fichier en PJ et effacer tt donnees inutile

Rechercher des sujets similaires à "vba fonction norminv"