Bonjour!
Je suis nouvelle sur le forum, également en VBA (j'ai mis pour la première fois mon nez dedans il y a quelques heures), et j'admet être un peu perdue sur la façon de procéder pour arriver au résultat que je veux.
En bref, je fais un jeu sur Excel, et pour celui-ci j'ai besoin de générer aléatoirement 5 chiffres différent 5,4,3,3 et 2 fois dans une plage. J'ai cependant quelques contraintes.
- Les chiffres doivent apparaître côte à côte
- Ils doivent être vertical ou horizontal
- Ils ne doivent pas dépasser une ligne ou colonne (ne doit pas continuer à la suite de la prochaine ligne ou colonne)
J'ai commencé avec comme base un code que j'ai trouvé sur un forum qui permettait de générer aléatoirement des "x" sur une plage (dans mon cas 10x10). J'ai réussi à l'adapter pour qu'il génère plutôt des "1" le nombre de fois que j'avais besoin.
Là par contre pour que ces "1" soient chacun côte à côte horizontalement OU verticalement je ne sais plus trop. J'ai réussi à les coller en ajoutant +1 à i mais ça ne le génère que horizontalement dans ce cas.
De plus, j'ai également le problème que si le nombre aléatoire arrive vers la fin de la ligne de la plage, il continu à la suite de la prochaine, alors que dans mon cas c'est important qu'ils restent groupé.
Comme j'ai dis plus tôt, je n'ai jamais touché au VBA, je sais que mon code est probablement très moche à voir (haha) mais j'y vais beaucoup par essai erreur pour apprendre en ce moment :p.
Si vous pouvez me donner une bonne piste ou une solution à mon problème je vous serais éternellement reconnaissante!
Merci!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub Test() RemplissageAleatoire Range("F9:O18"), 20 End Sub Sub RemplissageAleatoire(Plage As Range, Bateau As Integer) Dim Tableau As Collection Dim Cell As Range Dim i As Integer, j As Integer If Plage.Cells.Count < Bateau Then Exit Sub 'suppression des anciennes données Plage.Cells.Clear Set Tableau = New Collection For Each Cell In Plage Tableau.Add Cell.Address Next Cell 'For j = 1 To 1 Randomize DoEvents i = Int((Tableau.Count * Rnd) - 5) Range(Tableau(i)) = "1" Range(Tableau(i + 1)) = "1" Range(Tableau(i + 2)) = "1" Range(Tableau(i + 3)) = "1" Range(Tableau(i + 4)) = "1" Tableau.Remove i DoEvents 'Next j End Sub
Partager