On doit prendre 3 cellules qui ont des 1 dans les lignes 9 à 24, 3 qui ont des 1 dans les lignes 25 à 41 et 3 qui ont des 1 dans les lignes 42 à 59, sauf les cellules qui sont en rouges (en rouge sont les agents en congés) dans la feuille "compétences". On doit pouvoir les prendre aléatoirement.
Il faudrait ensuite afficher les 9 valeurs trouvées précédemment dans toutes les cellules non jaune de la ligne 4 à 34 dans la feuille "mois en cours"
Option Explicit
Sub test()
Dim i As Byte, y() As Variant, z() As Variant, x As Integer, c As New Collection
Dim p As Range, v As Byte, w(8) As String
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 And Cells(x, 3).Interior.ColorIndex <> 3 Then
On Error Resume Next
c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
If Err = 0 Then
On Error GoTo 0
w(v) = Cells(x, 1).Value
v = v + 1
End If
On Error GoTo 0
End If
Loop
Set c = Nothing
Next i
v = 0
For Each p In Sheets("Mois en cours").Range("F4:F34")
If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
p.Value = w(v)
v = IIf(v = 8, 0, v + 1)
End If
Next p
End Sub
cellule F4 : 9 valeurs
cellule F5 : 9 autres valeurs
If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
p.Value = w(v)
v = IIf(v = 8, 0, v + 1)
elseIf p.Interior.ColorIndex <> 6 Then
p.Value =p.value & "" & w(v)
v = IIf(v = 8, 0, v + 1)
End If
For Each p In Sheets("Mois en cours").Range("F4:F34")
If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
For v = 0 To 8
p.Value = w(v) & vbLf
Next v
End If
Next p
For Each p In Sheets("Mois en cours").Range("F4:F34")
If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
p.Value=w(0)
for v=1 to 8
p.Value =p.value & " " & w(v)
next v
End If
Next p