Générer aléatoirement des valeurs d'un tableau

Bonjour,
Quelqu'un aurait la possibilité de me résoudre ce problème sur VBA SVP ? Je suis débutant et j'ai eu du mal à avancer.
Merci d'avance img 1652 1

Bonjour,

je ne pense pas que te faire tes devoirs te rendrait service.
Sors tes cours...
eric

Bonjour,

Merci d'avoir répondu mais ce n'est pas un devoir, je me prépare pour l'examen final que j'ai dans 3 semaines et voici ce que j'ai fait mais je n'ai pas pu continuer, en n'étant même pas sûr si c'est juste:

'Etape 1.2
Dim c(15) As Integer

k = 0
For i = 1 To 15
c(i) = Int(52 * Rnd) + 1
If MsgBox("voulez-vous le nombre numéro " & c(i) & " ?", vbYesNo) = vbYes Then
MsgBox "vous avez marqué " & c(i) & " points"
k = k + 1
End If

If k = 5 Then
Exit For
End If
Next i

'Etape 1.3
Dim carte(13, 4) As Integer
k = 0

For i = 1 To 13
For j = 1 To 4
If MsgBox("voulez-vous la carte numéro " & i * j & " ?", vbYesNo) = vbYes Then
MsgBox "vous avez marqué " & i * j & " points"
k = k + 1
End If
If k = 5 Then
Exit For
End If
Next j
If k = 5 Then
Exit For
End If
Next i

'Etape 2.0
Dim cartee(13) As Integer
Dim couleur(4) As Integer

k = 0

For i = 1 To 13
For j = 1 To 4
If MsgBox("voulez-vous cette carte ? ", vbYesNo) = vbYes Then
k = k + 1
End If
If k = 5 Then
Exit For
End If
Next j
If k = 5 Then
Exit For
End If
Next i

couleur(1) = X
tot = 0
For j = 1 To k
For i = 2 To k
If couleur(j) = couleur(i) Then
tot = tot + 1
End If
Next i
Next j

If tot = 5 Then
MsgBox "vous avez marqué 15 points"
ElseIf tot = 4 Then
MsgBox "vous avez marqué 10 points"
ElseIf tot = 3 Then
MsgBox "vous avez marqué 5 points"
End If

End Sub

Salut usanas,
Salut Eriiic,

non seulement Eriiic a raison, et si on peut quand même t'aiguiller, il semblerait de plus que ce soit aussi trop dur de nous mettre ta feuille à l'endroit, histoire de ne pas nous tordre le cou !

Qu'as-tu appris comme fonctions ou instructions jusqu'ici ?


A+

Bonjour curulis57,

Désolé j'ai vraiment essayé de la faire pivoter mais ça n'a pas marché, j'ai essayé de le résoudre avec une boucle imbriquée et la fonction de tirage aléatoire, j'ai mis le code que j'ai commencé dans la réponse précédente.

Merci d'avance

Dans le premier exercice, peut-il y avoir des doublons de tirage puisque, apparemment, ce sont des cartes ?

Oui c'est un jeu de cartes

Salut Usanas,

je te fais le premier exercice. À toi à nous montrer ensuite que tu mérites d'être aidé plus avant.
- apprends à indenter tes lignes de codes : tu distingueras d'un coup d'oeil tes blocs logiques (IF...ENDIF, FOR...NEXT,...) ;
- une varianle déclarée par DIM a 0 comme valeur automatique : plus besoin de le spécifier dans le code ;
- dans les exercices suivants, tu boucles sur i et j ce qui n'est guère aléatoire !
- attention, tu déclares un tableau c(13,4) : ses index iront de 0 à 12 et 0 à 3.

Dim c(1 To 52) As Integer, iTot As Integer, k As Integer, iNb As Integer
'
For i = 1 To 15
    Do
        iNb = Int(52 * Rnd) + 1
    Loop Until c(iNb) = 0       'boucle jusqu'à (UNTIL) trouver une carte non tirée
    c(iNb) = 1                  'annulation de la carte
    If MsgBox("Voulez-vous le numéro " & iNb & " ?", vbYesNo) = vbYes Then
        k = k + 1
        iTot = iTot + iNb       'calcul du total
        MsgBox "(" & k & "/" & i & ") - Vous avez marqué " & iNb & " points." & Chr(10) & "Votre total : " & iTot       'chr(10) = ligne suivante
    End If
    If k = 5 Then Exit For
Next i
MsgBox "Bravo, vous avez obtenu " & iTot & " points !"


A+

Bonjour Curulis57,

Je vous remercie c'est super sympa, j'essaierai de comprendre votre programme et de résoudre ce qui suit. Merci beaucoup

bonne journée

Bonjour Curulis57

Est-ce possible de me dire pourquoi avez-vous cherché à trouver une carte non tirée surtout que juste après vous l'aviez annulé avec : c(iNb) = 1 ?

Merci d'avance

Salut Usanas,

l'exercice 1 demande de tirer un maximum de 15 cartes différentes !
Dès qu'une carte est tirée, je l'annule pour la boucle suivante...

Tu me joins quand tu veux : j'ai la nuit devant moi !

A+

Salut curulis57

c'est gentil merci, est-ce que ce serait possible de me dire si mon programme est bon pour la question 1.3, mais vraiment ce qui me bloque tjrs c'est la question 2.0, serait-il possible de me renseigner une astuce afin de pouvoir comparer les couleurs en sachant que c'est un tableau [ carte(i,j)=carte(numéro,couleur)] :

'Etape 1.3
Dim carte(20, 10) As Integer

For i = 1 To 13
For j = 1 To 4
carte(i, j) = i * j
If MsgBox("voulez-vous la carte numéro " & carte(i, j) & " ?", vbYesNo) = vbYes Then
l = l + 1
Tot2 = Tot2 + carte(i, j)
MsgBox " vous avez marqué " & carte(i, j) & "points " & Chr(10) & " votre total : " & Tot2
End If
If l = 5 Then
Exit For
End If
Next j
If l = 5 Then
Exit For
End If
Next i
MsgBox "Bravo, vous avez obtenu " & Tot2 & "points"

merci encore

Désolé enfaite c'est quand je colle mon programme ici dans la boite de message que les lignes s'alignent comme ça

Je regarde ton code tout de suite.
Pour coller un code dans un message, clique sur l'icône " </> " dans la barre d'outils.


A+

D'accord merci ^^

Tu as zappé :
- la boucle de 15 cartes maximum à tirer ;
- le côté aléatoire du tirage ;
- tu dois générer 2 nombres : 1 pour chaque dimension de ton tableau : ici tu prends les index de boucle !

Vous n'avez pas appris
- RND ?
- RandBetween ?

        Do
            iNb1 = Int(13 * Rnd) + 1
            iNb2 = Int(4 * Rnd) + 1
        Loop Until carte(iNb1, iNb2) = 0      'boucle jusqu'à (UNTIL) trouver une carte non tirée
        carte(iNb1, iNb2) = 1                 'annulation de la carte


A+

Salut Usana,

2e exercice :

    For i = 1 To 15
        Do
            iNb1 = Int(13 * Rnd) + 1
            iNb2 = Int(4 * Rnd) + 1
        Loop Until carte(iNb1, iNb2) = 0      'boucle jusqu'à (UNTIL) trouver une carte non tirée
        carte(iNb1, iNb2) = 1                 'annulation de la carte
        If MsgBox("Voulez-vous " & _
            IIf(iNb1 = 1, "cet ", _
            IIf(iNb1 < 11 Or iNb1 = 12, "cette ", "ce ")) & _
            IIf(iNb1 = 1, "As", _
            IIf(iNb1 < 11, "carte de " & iNb1, Choose(iNb1 - 10, "Valet", "Dame", "Roi"))) & _
            " de " & Choose(iNb2, "Coeur ", "Pique ", "Carreau ", "Trèfle ") & " ?", vbYesNo) = vbYes Then
                k = k + 1
                iTot = iTot + iNb1       'calcul du total
                MsgBox "(" & k & "/" & i & ") - Vous avez marqué " & iNb1 & " points." & Chr(10) & "Votre total : " & iTot       'chr(10) = ligne suivante
        End If
        If k = 5 Then Exit For
    Next i
    MsgBox "Bravo, vous avez obtenu " & iTot & " points !"

- déclarer le tableau carte(1 To 13, 1 To 4) As Integer : 4 jeux de 13 cartes de couleurs différentes ;
- boucle de 15 cartes ;
- DO...LOOP tirage de deux nombres aléatoires = iNb1 - iNb2...
- jusqu'à (Until) trouver une carte non encore tirée = carte(iNb1, iNb2) = 0 ;
- si carte trouvée, on sort donc automatiquement de la boucle DO...LOOP et on annule cette carte en prévision du tirage suivant carte(iNb1, iNb2) = 1 ;
- là, je fais joujou avec MsgBox mais tu as déjà toutes les infos nécessaires pour adapter le texte selon la carte :
* iNb1 = valeur de la carte : de l'As au Roi ;
* iNb2 = la couleur

Demain, si tu es toujours là, je te passe le fichier complet mais j'espère que tu auras fait l'effort pour le 3e exercice.
Petit truc quand même pour calculer facilement les couleurs tirées.
Tu crées un tableau tColor(2) As Integer et tu utilises iNb2 (1 to 4) en combinaison avec MOD(ulo) 2.
Réfléchis et tu comprendras pourquoi, dans cet exercice, l'ordre des couleurs est Coeur, Pique, Carreau, Trèfle (rouge-noir-rouge-noir).


A+

Bonjour Curulis57,

Merci énormément, RND enfaite on l'a vu mais pas randbetween, c'est super gentil, je reviendrai vers vous plus tard si jamais j'ai une petite question s'il y'a pas de gêne, merci encore.

bonne journée

Bonsoir curulis57,

j'espère que vous allez bien, enfaite je n'ai pas trop réussi à comprendre ce que vous aviez écrit ici :

        If MsgBox("Voulez-vous " & _
            IIf(iNb1 = 1, "cet ", _
            IIf(iNb1 < 11 Or iNb1 = 12, "cette ", "ce ")) & _
            IIf(iNb1 = 1, "As", _
            IIf(iNb1 < 11, "carte de " & iNb1, Choose(iNb1 - 10, "Valet", "Dame", "Roi"))) & _
            " de " & Choose(iNb2, "Coeur ", "Pique ", "Carreau ", "Trèfle ") & " ?", vbYesNo) = vbYes Then

est-ce que cela correspond à la partie où ils demandent d'attribuer des points de ( 5,10,15) selon si les cartes sont de la même couleur

merci d'avance

ah non c'est bon, je me suis trompé, je viens de relire votre dernier commentaire merci en tout cas

Rechercher des sujets similaires à "generer aleatoirement valeurs tableau"