Choix d'une ligne et d'une colonne aléatoirement

Bonjour,

Pour un projet je dois faire un démineur en VBA. Petit problème pour moi je ne sais pas bien utiliser la fonction Rnd().

Je voudrais donc savoir comment je peux faire en sorte de choisir une ligne et une colonne d'un tableau à deux dimensions et vérifié que cette combinaison n'a pas déjà été choisit. Je dois faire cela pour placer les mines.

Merci beaucoup de votre aide.

Bonjour,

Et si vous commenciez par partager un fichier exemple. On aurait déjà une petite idée.

Là on ne sait même pas commence les coordonnées ou cellules sont sélectionnées ?

Salut Student,
Salut Xmenpl,

j'ai justement fait un truc du genre il y a quelques jours pour un autre étudiant.
Il devait pouvoir tirer aléatoirement 15 cartes à jouer.

Dim carte(1 To 13, 1 To 4) As Integer
'
For x = 1 to 15
    Do
        iNb1 = Int(13 * Rnd) + 1            'tirage du n° de carte
        iNb2 = Int(4 * Rnd) + 1             'tirage de la couleur (1-3 = rouge, 2-4 = noir)...
    Loop Until carte(iNb1, iNb2) = 0      'boucle jusqu'à (UNTIL) trouver une carte non tirée
    carte(iNb1, iNb2) = 1                    'la carte est annulée puisque tirée
Next

Si tu n'y arrives pas avec ceci, rappelle-nous...


A+

Bonjour,

Merci beaucoup pour votre aide je pense avoir trouver comment faire.

Voilà ce que j'ai fait.

image

Avec M le nombre de mines donnés par le joueur, Nbl et Nbc le nombre de ligne et de colonne donnés également par le joueur et 8 pour la mine (je ne savais pas quoi mettre, pour l'instant vu que ce doit mettre un nombre j'en ai mis un dont je ne me sers pas).

Ca à l'air de marcher donc merci de votre aide.^^

Salut Student,

c'est à peu près cela, oui.
Ton tableau TM(Li,Co) représente ton champ de mines. Le marqueur "8" est là pour signaler que ce carré est miné donc 1 ou 8, c'est pareil...

Deux choses :
- si tu as déclaré, par exemple, ton tableau :
* TM(8,8) : cela représente en fait (de 0 à 7, de 0 à 7) et que (RND * Nbl) +1 ne contiendra JAMAIS 0 ;
* TM(1 TO 8, 1 to 8) : ta formule RND() va sortir des... 9 et planter le code !! (voir le fichier) : j'inscris les valeur RND en [I:J]

- tu utilises FOR...NEXT pour ton nombre de mines.
Attention : même si il y a peu de chances statistiques que tu tombes 2 fois sur les mêmes coordonnées iLig et iCol, cela peut arriver !

Ton code démarre sur un double-clic, à volonté.
Mon code démarre sur un clic droit, à volonté.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'
Dim TM(1 To 8, 1 To 8), iCol%, iRow%
'
Cancel = True
Cells.Delete
'
For x = 1 To 5
    Do
        iRow = Int(Rnd * 8) + 1
        iCol = Int(Rnd * 8) + 1
        Range("I" & x).Value = iRow: Range("J" & x).Value = iCol
    Loop Until TM(iRow, iCol) = 0
    TM(iRow, iCol) = 1
    Cells(iRow, iCol).Interior.Color = RGB(255, 0, 0)
Next
'
End Sub

...
Et m..., encore une fois impossible de joindre le fichier!
Je le joindrai plus tard.
...

Bon travail !


A+

Le fichier..


A+

3student.xlsm (16.02 Ko)
Rechercher des sujets similaires à "choix ligne colonne aleatoirement"