[VBA] Sub Randomize([Number])

  • Auteur de la discussion hoegarden31
  • Date de début

hoegarden31

Expert
bonjour
j'arrive pas a utiliser randomize quelqu'un peut m'aider ?
 

hoegarden31

Expert
bon regardez ce programme et critiquez a volonter
Code:
Sub Jeu()
Dim nombre, chances, fl, nombre1
chances = 1
MsgBox "Trouver un nombre entre 0 et 100 en 7 coups"
nombre1 = RandomNumber(100)
For i = 1 To 7
nombre = CLng(InputBox("Entrer un nombre : ", "Nombre", "nombre entre 0 et 100"))
If nombre > 100 Then
Exit Sub
Else
If nombre < nombre1 Then
MsgBox "c'est trop petit "
End If
If nombre > nombre1 Then
MsgBox "c'est trop grand"
End If
If nombre = nombre1 Then
MsgBox "Bravo tu a trouver le nombre en " & i & " coup(s)."
Exit Sub
End If
End If
Next i
MsgBox "desoler mais vous n'avez pas trouver le nombre. le nombre est : " & c
End Sub
Function RandomNumber(lr As Integer)
Randomize
RandomNumber = CLng(Rnd * lr)
End Function
 

zeb

Modérateur
:)

■ Pas d'indentation.
■ Les variables et la fonction sont déclarées sans type.
■ Il y a plein de fautes d'orthographe dans les messages.
■ La valeur 100 ne peut pas être renvoyée par RandomNumber.
Rnd renvoye un nombre dans l'intervalle [0; 1[
L'aide d'Excel est explicite et propose cette exemple :
[fixed]Int((upperbound - lowerbound + 1) * Rnd + lowerbound)[/fixed]Où lowerbound et upperbound sont respectivement la borne inférieure et supérieure.

■ Tu fais trop de tests. Utilise Else. (En passant voilà un exemple avec ElseIf, mot-clef pratiquement inutile. Mais c'est l'occasion de le présenter).
Code:
If nombre < nombre1 Then
    MsgBox "C'est trop petit !"
ElseIf nombre > nombre1 Then
    MsgBox "C'est trop grand !"
Else 'Il ne reste qu'un seul cas possible
    MsgBox "Bravo ! Tu as trouvé le nombre en " & i & " coup" & IIf(i > 1, "s", "") & "."
    Exit Sub
End If
Connaissais-tu la fonction IIf ?

Ca va comme critique ou en veux-tu plus ?
 

hoegarden31

Expert
lol il y en a beaucoup pour un programme tout simple car en fait je voufrai creer un sorte de jeu ou tu choisi ton perso puis tu te promenne dans un monde et tu te bats contre des monstres mais tout seul sa va etre dur
sinon je ne connaissais pas la fonction IIF et j'avais essayer avec les elseif mais le compilateur ne l'acceptai pas (je pense l'avoir mis comme il faut mais apparament non )
 

batchy

Grand Maître
je propose la chose suivante :
Code:
if nombre <> nombre1 then
     msgbox "C'est trop " & IIf(nombre>nombre1,"grand","petit") & " !"
Else
     msgbox "bravo !.....
end if
 

zeb

Modérateur
Sympa comme projet. :)
Et tu comptes le faire en VB ?

Bon quand tu auras piqué 80% des parts de marché à Blizzard Enternment, je raconterai que c'est moi qui t'ai tout appris, y compris la fonction IIf :lol:

C'est juste histoire de chambrer, je ne cherche pas à briser, ni tes rêves, ni un avenir que je te souhaite brillant.
 

hoegarden31

Expert
oui je compte le faire en VB comme sa je peux utiliser execl ou access pour les monstres et les personnages et merci pour le IIf je dormirai moins bete ce soir ^^
 

hoegarden31

Expert
donc apres modif :
Code:
Sub Jeu()
Dim nombre As Long, nombre1 As Long
MsgBox "Trouver un nombre entre 0 et 100 en 7 coups"
nombre1 = RandomNumber(0, 100)
For i = 1 To 7
nombre = CLng(InputBox("Entrez un nombre : ", "Nombre", "nombre entre 0 et 100"))
If nombre <> nombre1 Then
    MsgBox "C'est trop " & IIf(nombre > nombre1, "grand", "petit") & " !"
Else 'Il ne reste qu'un seul cas possible
    MsgBox "Bravo ! Tu as trouvé le nombre en " & i & " coup" & IIf(i > 1, "s", "") & "."
    Exit Sub
End If

Next i
MsgBox "désolé mais vous n'avez pas trouvé le bon nombre. le nombre est : " & nombre1
End Sub
Function RandomNumber(lowerbound As Integer, upperbound As Integer) As Long
Randomize
RandomNumber = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
End Function
 

hoegarden31

Expert
normal c ton idee :p sinon pourquoi mettre
Code:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
car comme upperbound = 100 et lowerbound = 0 alors on a
(100 - 0 + 1 ) * Rnd + 0 (donc il y a des trucs inutile non ?)
(si tu pense que je dis des conneries dis le )
 

boub popsyteam

Grand Maître
Pour garder la fonction le plus générique possible ? :)
 

zeb

Modérateur
Je ne fais que citer l'aide d'Excel.
Faire des fonctions génériques, c'est le bien :ange:

Aujourd'hui, pour un petit jeu de devinette, tu as besoin de RandomNumber. Demain, pour faire WoW-II La suite by Houg', tu auras sans doute besoin de cette même fonction, mais entre 1 et 7 ou entre 50 et 200. Tu seras content de la trouver. D'ailleurs, je t'invite à la mettre dans un module spécial où tu regrouperas toutes cette petites fonctions gérériques.
Tiens, un peu de vocabulaire : on appelle primitive ce genre de fonctions.
 

zeb

Modérateur
Oups, j'oublais une critique.

Cela ne se voit pas dans ton programme, mais par principe, Randomize ne doit être appelé qu'une fois par programme, et ce avant le premier Rnd.

Dans un programme qui à besoin de hasard, on appelle l'initialisation du générateur d'aléas au début du programme, une bonne fois pour toutes.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 117
Membres
1 586 397
Dernier membre
Chachabidou
Partager cette page
Haut