Autres Formule

maart

XLDnaute Junior
Bonjour,

Je voudrais écrire une formule en Q1 qui tienne compte des mes %.

Je joins un exemple commenté.

Merci de votre aide.
 

Pièces jointes

  • fichier.xlsm
    62 KB · Affichages: 37

soan

XLDnaute Barbatruc
Inactif
Bonsoir JHA, maart,

aurais-tu un clone invisible ? tu es le seul à avoir répondu à maart, et pourtant :

Image.jpg


@maart : même si on est le week-end, faut pas trop forcer sur la bouteille, hein ? 😄

le whisky à forte dose, ça fait voir double ! 🤪 😂 🤣



mais peut-être qu'il y a eu un autre contributeur qui a posté un message, puis qui l'a supprimé ? 🤔

soan
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Une formule alea directement dans la formule index(grande.valeur))
VB:
=INDEX($K$9:$K$28;EQUIV(GRANDE.VALEUR($S$9:$S$28;ALEA.ENTRE.BORNES(1;2));$S$9:$S$28;0))

JHA
 

Pièces jointes

  • fichier alea (rev2).xlsm
    67.8 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour maart, JHA, soan,

Une solution VBA dans le fichier joint :
VB:
Dim colSimul%, tirage&, ub&, tablo 'mémorise les variables

Private Sub Worksheet_Calculate()
Dim dest As Range, col1%, col2%, derlig&, P As Range, Q As Range, i&, v, j&, n&
Set dest = [Q1]
col1 = 11 'colonne K
col2 = 19 'colonne S
derlig = Cells(Rows.Count, col2).End(xlUp).Row
Application.EnableEvents = False 'désactive les évènements
If derlig < 9 Then dest = "": GoTo 1 'si le tableau source est vide
Set P = Cells(1, col1).Resize(derlig)
Set Q = Cells(1, col2).Resize(derlig)
If colSimul = 0 Or tirage = 1 Then
    ub = Evaluate("SUM(ROUND(1000*IF(ISNUMBER(" & Q.Address & ")," & Q.Address & "),0))")
    ReDim tablo(1 To ub)
    For i = 9 To Q.Count
        If IsNumeric(CStr(Q(i))) Then
            v = P(i)
            For j = 1 To Round(1000 * Q(i))
                n = n + 1
                tablo(n) = v
            Next j
        End If
    Next i
End If
Randomize
dest = tablo(Application.RandBetween(1, ub)) 'tirage
If colSimul Then
    i = Application.Match(dest, P, 0)
    Cells(i, colSimul) = Cells(i, colSimul) + 1
End If
1 Application.EnableEvents = True 'réactive les évènements
End Sub

Sub Simulation()
Dim t#, n&
t = Timer
colSimul = 21 'colonne U
n = 50000 'à adapter
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Cells(9, colSimul).Resize(Rows.Count - 8).ClearContents 'RAZ
For tirage = 1 To n
    Worksheet_Calculate 'lance la macro
Next
colSimul = 0 'RAZ
tirage = 0
Application.Calculation = xlCalculationAutomatic
MsgBox Format(n, "#,##0") & " tirages en " & Format(Timer - t, "0.00 \sec"), , "Durée"
End Sub
La macro Simulation effectue 50 000 tirages qui permettent de vérifier les fréquences.

Elle s'exécute chez moi en [Edit] 5,9 secondes.

A+
 

Pièces jointes

  • fichier(1).xlsm
    25.5 KB · Affichages: 5
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 296
Messages
2 086 962
Membres
103 409
dernier inscrit
Dave56