C'est un peu moins facile que cela, car tirages forcément sans doublon. Et retirer si déjà tiré (jusqu'à ce que pas déjà tiré) est lourd et peu orthodoxe.
-4- Si la cellule désignée contient déjà un 'x', refaire -3-
Private Sub CommandButton1_Click() Static tablo() As String, lazone As Range, nb As Integer '===>> de sorte à garder cela en mémoire Dim ou As Integer, temp As String, i As Integer If lazone Is Nothing Then ' ====>>____________ Set lazone = Range("B7:K16") ' | ReDim tablo(lazone.Count - 1) ' | ou = 0 ' | For Each C In lazone ' |On ne fait ceci qu'une seule fois tablo(ou) = C.Address(False, False) ' | ou = ou + 1 ' | Next ' | nb = UBound(tablo) ' | End If '-------------------------------------- lazone.ClearContents Randomize For i = 0 To nb \ 2 '__________________________ ou = Int(((nb - i) * Rnd)) ' | temp = tablo(ou) ' | tablo(ou) = tablo(nb - i) ' | 'on touille/retouille à chaque clic, par contre tablo(nb - i) = temp ' | Next '________________________________________ | For i 0 To 14 '>> on ne prend que les 15 premiers Range(tablo(i)) = "x" '===>> et on met un "x" à l'adresse qu'ils contiennent Next End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDim lazone As Range, ou as integer Set lazone = Range("B7:K16") ReDim tablo(lazone.Count - 1) ou = 0 For Each C In lazone tablo(ou) = C.Address(False, False) ou = ou + 1 Next '===================== et cette partie-là n'est que pour que tu voies ce que '=========== contient le tableau (on ne s'en servira pas dans ce qui va suivre For ou = 0 To UBound(tablo) MsgBox tablo(ou) Next
par contre il y a plein de mots que je ne connais pas comme Set, ReDim, et For Each ... In ; je vais aller voir ce que tout ça signifie
Personnellement je l'aurais fait sur une UserForm avec des petits boutons (histoire de ressembler un peu au démineur de windows)
aller à la pêche, etc ... plutôt que de faire de tels jeux (ou même d'y jouer)