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

XL 2016 sélection aléatoire de 5% d'une liste

lplv

XLDnaute Nouveau
Bonjour à tous,

Je viens d'arriver sur le forum et me tourne donc vers vous car je suis bloquée face à une sélection aléatoire. Je voudrais en effet savoir s'il est possible sur excel de tirer au sort (donc aléatoirement) - et sans doublon - 5% d'une liste avec un minimum de 3 items sélectionnés.

Je m'explique si la liste est de 150 alors il y aura 8 items sélectionnés (on arrondit au supérieur)
Si la liste n'est que de 35 alors il y aura tout de même 3 items sélectionnés (35/0.05=1.75 mais minimum de 3)

Je vous remercie d'avance pour votre aide
 

lplv

XLDnaute Nouveau
Bonjour,

Je vous remercie pour votre aide. Il faudrait que ça ressemble à cela.

Peut on automatiser la chose si je change le nombre de projet dans la liste ?
 

Pièces jointes

  • Nouveau Feuille de calcul Microsoft Excel.xlsx
    10.6 KB · Affichages: 7

lplv

XLDnaute Nouveau
Bonjour @pierrejean ,

je vous remercie grandement, par contre concernant votre fichier je vois qu'il y a une liste de 292 mais que 13 sélectionnés. Or 292x0.05=14.6 donc il faudrait 15 sélectionnés. Comment puis-je corriger cela ?

Merci encore,

Merci également @CHALET53 cela me fais une autre alternative
 

patricktoulon

XLDnaute Barbatruc
si je reprend l'exemple de PierreJean sans dictionnaire ca donne ceci
VB:
Sub test2()
    Dim tablo, t, x&, i&, q&
    Randomize
    tablo = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    q = Int(UBound(tablo) * Range("F1"))
    ReDim t(1 To q, 1 To 1)
    Do While i < q
        x = 1 + Round(Rnd * (UBound(tablo) - 1))
        If IsError(Application.Match(tablo(x, 1), t, 0)) Then i = i + 1: t(i, 1) = tablo(x, 1)
    Loop
    Range("C1:C" & q).Value = (t)
End Sub

ca peut être intéressant pour Mac qui n'ont pas le dico a dispo ou ceux qui ne veulent pas se servir des objets scripting...

pour l'arrondi supperieur
Code:
q = Int(UBound(tablo) * Range("F1"))+1
 

patricktoulon

XLDnaute Barbatruc
re
regarde le code tu dois trouver le même ligne sans le "-1" .. ben tu la remplace
ensuite j'ai zappé le 3 minimum voila qui est corrigé
donc le code sans dico et arrondi sup avec condition 3 minimum ca donne ceci
VB:
Sub test2()
    Dim tablo, t, x&, i&, q&
    Randomize
    tablo = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    q = Application.Max(Int(UBound(tablo) * Range("F1")) + 1, 3)
    ReDim t(1 To q, 1 To 1)
    Do While i < q
        x = 1 + Round(Rnd * (UBound(tablo) - 1))
        If IsError(Application.Match(tablo(x, 1), t, 0)) Then i = i + 1: t(i, 1) = tablo(x, 1)
    Loop
    Range("C1:C" & q).Value = (t)
End Sub
 

Dranreb

XLDnaute Barbatruc
Je re-joins mon classeur avec un paramètre de plus dans ma fonction ListeAl pour ne plus confondre le nombre de résultats souhaités avec le numéro maxi sélectionnable.
 

Pièces jointes

  • Temp.xlsm
    22.6 KB · Affichages: 6

lplv

XLDnaute Nouveau
ouhla déjà de retour, on revient au point de départ je viens de faire un autre test en proposant une liste de 146 mais cela me met 7 sélectionnés au lieu de 8 (146*0.05=7.25 donc 8 à l'arrondi supérieur)
 

Discussions similaires

Réponses
20
Affichages
556
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…