[VBA Excel] Je suis nul en VBA aidez-moi svp

Je suis nul en VBA aidez-moi svp [VBA Excel] - VB/VBA/VBS - Programmation

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é:
 

Citation :

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:
 

Citation :

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  :sweat: , j'ai aucune logique de programmation.
 
Merci d'avance
 

Reply

Marsh Posté le 09-01-2004 à 17:09:12   

Reply

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

Reply

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.

Reply

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...

Reply

Marsh Posté le 10-01-2004 à 04:39:11    

Rha merci ça marche :love:
 
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 :)

Reply

Marsh Posté le 10-01-2004 à 13:36:17    

schuit001 a écrit :

Rha merci ça marche :love:
 
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 :)


 
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.

Reply

Marsh Posté le 10-01-2004 à 15:52:47    

Bien vu ;), merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed