Je suis nul en VBA aidez-moi svp [VBA Excel] - VB/VBA/VBS - Programmation
Marsh Posté le 09-01-2004 à 20:39:07
Hello. Tente donc ca :
Sub Lottosub()
Dim numero As Single
Dim resultat As Single
Dim gagneouperdu As String
Dim i As Integer
numero = Cells(1, 2)
gagneouperdu = "Perdu !"
For i = 1 To 2
Cells(i, 3).Value = Int(Rnd * 10 + 1)
If Cells(i, 3).Value = numero Then
gagneouperdu = "Gagné !"
End If
Next i
Cells(2, 2) = gagneouperdu
End Sub
Marsh Posté le 09-01-2004 à 20:45:59
Pour détailler un peu plus, les erreurs dans ton code :
- Ta ligne
resultat = Range("C1:C20" ).Value = Int(Rnd * 10 + 20)
est effectivement vachement hasardeuse. Et si tu vires le début, tu t'apercevras qu'il te remplit bien les 20 cases, mais avec 20 fois la même valeur. D'où le besoin d'une boucle. Un petit tour dans l'aide en ligne du VBA te dira tout ce que tu as besoin de savoir sur les différentes manières de goupiller une boucle (for..next, do..while, do..until).
- Tu lui dis :
gagneouperdu = Cells(2, 2)
avant même d'avoir déterminé ce que vaut gagneouperdu. Et tu écris ton égalité dans le mauvais ordre.
Marsh Posté le 09-01-2004 à 20:49:56
Merde. Forcément, à faire le malin comme ca, c'est clair que j'allais me bourrer. Pour la boucle, c'est For i=1 to 20, naturellement, et pas 2...
Marsh Posté le 10-01-2004 à 04:39:11
Rha merci ça marche
Cependant je pige pas pourquoi la ligne "gagneouperdu="Perdu!"" vient aussi tôt, j'aurais mis ça après un Else dans l'instruction If, ça peut marcher aussi non?
Mais je comprends la logique du reste, donc c nickel
Un grand merci
Marsh Posté le 10-01-2004 à 13:36:17
schuit001 a écrit : Rha merci ça marche |
Non, ca marcherait pas. Si tu mets ton if..then..else dans la boucle, ton gagneouperdu va être alternativement perdu ou gagné au fur et à mesure que i va croître de 1 à 20. Et au final, il ne te dira que si le dernier chiffre de la colonne C vaut la valeur "numero".
Là, on initialise gagneouperdu comme valant "perdu". Et si on tombe au moins une fois parmi les 20 chiffres aléatoires sur la bonne valeur, on lui dit "gagne". Sinon, il vaudra toujours "perdu" après la boucle.
Si tu veux voir la différence, tu n'as qu'à mettre le test if..then..else dans la boucle, puis tester pas à pas avec le débuggeur.
Marsh Posté le 09-01-2004 à 17:09:12
Voilà je dois faire un petit exercice dans le cadre de mon cours d'info dont voici l'énoncé:
Développez en VBA sous Excel, une nouvelle routine Loto. Cette routine regarde après un nombre entre 1 et 10 dans la cellule B1. Elle calcule alors 20 nombres aléatoires entre 1 et 10. Si le nombre fourni est parmi ces 20 nombres, alors c'est gagné et la fonction retourne le résultat Vrai. Sinon, elle retourne Faux.
Le résultat "Gagné" ou "Perdu" s'affiche dans la cellule B2. Les 20 nombres tirés s'affichent dans la plage C1:C20.
L'instruction VBA qui permet de calculer un nombre aléatoire entre 1 et 10 est :
Int (Rnd * 10 +1)
Et voici le code que j'ai fait:
Sub Lottosub()
Dim numero As Single
Dim resultat As Single
Dim gagneouperdu As String
numero = Cells(1, 2)
resultat = Range("C1:C20" ).Value = Int(Rnd * 10 + 20)
gagneouperdu = Cells(2, 2)
If (resultat Like numero) Then
gagneouperdu = "Gagné!"
Else
gagneouperdu = "Perdu!"
End If
End Sub
Je sais que mon erreur se situe au niveau de la ligne résultat, mon calcul n'est pas correct, mais je vois pas comment le corriger.
C'est sûrement pour vous l'enfance de l'art, mais je suis un newbie de chez newbie en info , j'ai aucune logique de programmation.
Merci d'avance