Option Explicit
Sub Test()
Dim x As Integer, c As New Collection
Randomize
Do While c.Count < 3
x = Int(51 * Rnd + 9)
If Cells(x, 3) = 1 Then
On Error Resume Next
c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
If Err = 0 Then Cells(x, 3).Interior.ColorIndex = 3
End If
Loop
On Error GoTo 0
End Sub
Option Explicit
Sub Test()
Dim x As Integer, c As New Collection
'Initialise le générateur de nombres aléatoires
Randomize
'boucle, tant que le nombre d'item de la collection est inférieur à 3
Do While c.Count < 3
'détermination d'un nombre aléatoire de 9 à 59
x = Int(51 * Rnd + 9)
'test si la cellule de la ligne déterminée par x est égale à 1
If Cells(x, 3) = 1 Then
'empêche message d'erreur si la cellule à déjà été trouvé
On Error Resume Next
'utilisation d'une collection pour stocker les cellules trouvées
c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
'si pas d'erreur, on pourrait d'ailleurs se passe de ce test, coloriage de la cellule
If Err = 0 Then Cells(x, 3).Interior.ColorIndex = 3
End If
Loop
'réinitialisation du gestionnaire d'erreur
On Error GoTo 0
End Sub
Option Explicit
Sub Test()
Dim x As Integer, c As New Collection
Randomize
Do While c.Count < 3
x = Int(51 * Rnd + 9)
If Cells(x, 3) = 1 Then
On Error Resume Next
c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
If Err = 0 Then
With Sheets("Mois en cours").Range("F4")
.Value = .Value & Cells(x, 3).Address(0, 0) & vbLf
End With
End If
End If
Loop
On Error GoTo 0
End Sub
x = Int(51 * Rnd + 9)
'24 - 9 + 1, te donne 16
x = Int(16 * Rnd + 9)
Option Explicit
Sub Test()
Dim i As Byte, y() As Variant, z() As Variant, x As Integer, c As New Collection
Randomize
y = Array(16, 17, 18)
z = Array(9, 25, 42)
For i = 0 To 2
Do While c.Count < 3
x = Int(y(i) * Rnd + z(i))
If Cells(x, 3) = 1 Then
On Error Resume Next
c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
If Err = 0 Then
With Sheets("Mois en cours").Range("F4")
.Value = .Value & Cells(x, 3).Address(0, 0) & vbLf
End With
End If
On Error GoTo 0
End If
Loop
Set c = Nothing
Next i
End Sub