Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 16h32   #1
Membre actif
 
Inscription : juillet 2006
Messages : 295
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 295
Points : 191
Points : 191
Par défaut Aléa sans remise

Bonjour,

C'est mon premier post ici, j'espère qu'il sera utile à certains !

J'ai eu besoin d'utiliser un aléa sans remise et toutes mes recherches n'ayant pas abouti à ce que je souhaitais exactement, je m'y suis collé et voici le code qui en est issu. Il n'est surement pas optimal...


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub Alea()
' Macro pour calculer un aléa sans remise
 
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim n As Integer ' Nombre de participants
 
    Dim trouve As Integer
    Dim trouve2 As Integer
 
    Dim feuilleAModifier As Worksheet
    Set feuilleAModifier = Worksheets("Bonus aléa")
 
    Dim a As Double
 
    n = feuilleAModifier.Range("A65536").End(xlUp).Row - 1
    feuilleAModifier.Range("C2:C1000").ClearContents
    feuilleAModifier.Range("D2:D1000").ClearContents
 
    ' Initialisations
    i = 1
    j = 0
    k = 1
    trouve = 0
    trouve2 = 0
 
    Do While (i < n + 1) ' tant que tous les participants n'ont pas eu leur aléa
        Randomize
        a = Rnd() ' nombre aléatoire entre 0 et 1
        j = 0
        trouve = 0
        Do While trouve = 0 ' vérification de la valeur de l'aléa par rapport à la tranche dépendant du nombre de participants
            If a < j / n Then
                feuilleAModifier.Cells(i + 1, 3) = j    ' affectation dans la cellule
                trouve = 1    ' sortie de la boucle do while
            Else
                j = j + 1 ' incrémentation du compteur
                feuilleAModifier.Cells(i + 1, 4) = a
            End If
        Loop
 
        Do While (trouve2 = 0 And k < i) ' Vérification que l'on n'a pas déjà pris ce nombre
            If (feuilleAModifier.Cells(k + 1, 3).Value <> j) Then
                k = k + 1
            Else
                trouve2 = 1
            End If
        Loop
 
        If trouve2 = 0 Then
            i = i + 1 ' Si on a un nouveau nombre alors on l'affecte
        Else
            feuilleAModifier.Cells(i + 1, 3).ClearContents ' Sinon on efface et on repart
        End If
 
        k = 1
        trouve2 = 0
 
    Loop
 
End Sub
A noter que j'aurais pu utiliser des Boolean et non des Integer pour les deux variables trouve et trouve2...
Alqualonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h11.


 
 
 
 
Partenaires

Hébergement Web