Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 :



@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

Réponses
3
Affichages
439
Réponses
6
Affichages
392
Réponses
6
Affichages
180
Réponses
4
Affichages
312
Réponses
3
Affichages
363
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…