Bonjour Michael !
C'est juste un rappel de penser objet … En traduisant mon code en langage courant, la logique est vraiment simple !
Avant d'entreprendre un code, visualiser ce qui doit être fait au niveau objet : cela le réduira à l'essentiel …
Une variante laissant de l'espace entre chaque élément : en y changeant l'approche - passage d'une plage fixe
à une plage variable selon la taille de l'élément, l'empêchant ainsi de sortir de la grille - la procédure, allégée
d'un test et se passant d'une variable objet, s'avère encore plus efficace ! Code à coller dans le module du classeur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Sub Demo()
Const L% = 11
Application.ScreenUpdating = False: Feuil1.Cells(1).Resize(L - 1, L - 1).ClearContents
For Each C In [{5,4,3,3,2}]
H% = Rnd Mod 2: V% = V% + 1
With Feuil1.Cells(1).Resize(L - C, L - C)
Do
With .Cells(Fix(Rnd * .Count) + 1).Resize(1 + (C - 1) * (1 - H), 1 + (C - 1) * H)
If Application.Sum(.Cells) = 0 Then .Value = V: _
If .CurrentRegion.Count = C Then Exit Do Else .ClearContents
End With
Loop
End With
Next
End Sub
Private Sub Workbook_Open()
Randomize
End Sub |
_________________________________________________________________________________________________
Merci de cliquer sur

pour chaque message ayant aidé …
Partager