Bonsoir,
une fonction personnalisé Tap (tirage aléatoire pondéré)
appel de la fonction
=tap(plage) ou plage est une matrice à 2 dimensions avec en première colonne le poids et en deuxième colonne la valeur à tirer
voir exemple dans fichier joint
Function Tap(matrice)
Application.Volatile
Dim r As Variant
Dim p As Variant
r = matrice
p = r
s = 0
For i = LBound(r, 1) To UBound(r, 1)
s = s + r(i, 1)
Next i
For i = LBound(r, 1) To UBound(r, 1)
If i = LBound(r, 1) Then p(i, 1) = 0 Else p(i, 1) = p(i - 1, 1) + r(i - 1, 1) / s
Next i
q = Rnd()
For i = UBound(p, 1) To LBound(p, 1) Step -1
If q >= p(i, 1) Then
Tap = p(i, 2)
Exit Function
End If
Next i
End Function