Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1094 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°606621
schuit001
Posté le 09-01-2004 à 17:09:12  profilanswer
 

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
 

mood
Publicité
Posté le 09-01-2004 à 17:09:12  profilanswer
 

n°606749
jebb
pacman -S fantomes
Posté le 09-01-2004 à 20:39:07  profilanswer
 

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

n°606753
jebb
pacman -S fantomes
Posté le 09-01-2004 à 20:45:59  profilanswer
 

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.

n°606756
jebb
pacman -S fantomes
Posté le 09-01-2004 à 20:49:56  profilanswer
 

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

n°606913
schuit001
Posté le 10-01-2004 à 04:39:11  profilanswer
 

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

n°607016
jebb
pacman -S fantomes
Posté le 10-01-2004 à 13:36:17  profilanswer
 

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.

n°607112
schuit001
Posté le 10-01-2004 à 15:52:47  profilanswer
 

Bien vu ;), merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[VB] remplir base access à partir d'un tableau excel[VBA] Définir la couleur d'une cellule à aucun remplissage RESOLU
[excel] :D utiliser des variables dans une macroVBA : commande saveas d'un doc word depuis une appli access
[VBA] Comment déclencher le traitement à la sortie d'une celluleVBA; parcourir dynamiqument un type..end type
asp modifier cellule excelComment exécuter une macro Excel avec paramètres depuis Word ?
Visual Basic - programme à part ou Excel ?Excel Property Range( cell1, cell2).select
Plus de sujets relatifs à : [VBA Excel] Je suis nul en VBA aidez-moi svp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR