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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  un programme simple qui marche pas (en If et Else)

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

un programme simple qui marche pas (en If et Else)

n°1478003
yanhoupa
Posté le 19-11-2006 à 08:56:49  profilanswer
 

Voila je comprend pas trop :/
 
mon programme marche pas, le principe est qu'une boite de dialogue demande sa moyenne à l'élève et qu'en fonction de celle si, on lui donne sa mention.
 
j'ai fait ca :

Code :
  1. Sub passage()
  2. Dim Note As Single
  3. Note = InputBox("Quelle est votre moyenne ?" )
  4. If Note < 0 Or Note > 20 Then MsgBox ("Erreur !" )
  5. If Note <= 8 Then MsgBox ("Désolé, vous etes recalé" )
  6. ElseIf Note <= 10 Then MsgBox ("Ratrapage autorisé" )
  7. ElseIf Note <= 12 Then MsgBox ("Félicitation, vous etes accepté" )
  8. ElseIf Note <= 14 Then MsgBox ("Mention bien" )
  9. ElseIf Note <= 16 Then MsgBox ("Mention très bien" )
  10. ElseIf Note <= 18 Then MsgBox ("Excelent" )
  11. End Sub


désolé je suis nouveau :/ je vois pas où est l"erreur, exel me dit que il y a un Else sans if  (a la ligne 8) :??:  
 
merci


Message édité par yanhoupa le 19-11-2006 à 09:00:26
mood
Publicité
Posté le 19-11-2006 à 08:56:49  profilanswer
 

n°1478005
kiki29
Posté le 19-11-2006 à 09:13:43  profilanswer
 

Sélectionner ElseIf [F1] puis voir l'exemple


Message édité par kiki29 le 19-11-2006 à 09:54:20
n°1478008
seniorpapo​u
Posté le 19-11-2006 à 09:42:01  profilanswer
 

Bonjour,
 
 
Sub passage()
Dim Note As Single
 
Note = InputBox("Quelle est votre moyenne ?" )
If Note < 0 Or Note > 20 Then MsgBox ("Erreur !" )
 
If Note <= 8 Then
MsgBox ("Désolé, vous etes recalé" )
ElseIf Note <= 10 Then MsgBox ("Ratrapage autorisé" )
ElseIf Note <= 12 Then MsgBox ("Félicitation, vous etes accepté" )
ElseIf Note <= 14 Then MsgBox ("Mention bien" )
ElseIf Note <= 16 Then MsgBox ("Mention très bien" )
ElseIf Note <= 18 Then MsgBox ("Excelent" )
End If
 
End Sub
Par contre, si j'ai 19 je n'ai même pas de félicitations, je suis vexé.
Pour l’orthographe tu auras moins de 8 :
 
Rattrapage
Félicitations  
Excellent  
Vous êtes  
 
 
Cordialement


Message édité par seniorpapou le 19-11-2006 à 09:51:05
n°1478023
yanhoupa
Posté le 19-11-2006 à 11:22:10  profilanswer
 

lol merci bien seniorpapou, enfaite je comprend mieu comment marche les bloc en If :)
 
sinon oui je suis plutot mauvais en orthographe :/ en tout cas merci bien.
 
la je suis en train de coder un autre petit programme dit simple, mais il y a de fortes chances que j'y arrive pas donc, j'ai envi de dire a tte :)

n°1478488
Paul Hood
Posté le 20-11-2006 à 14:48:08  profilanswer
 

yanhoupa a écrit :

lol merci bien seniorpapou, enfaite je comprend mieu comment marche les bloc en If :)
 
sinon oui je suis plutot mauvais en orthographe :/ en tout cas merci bien.
 
la je suis en train de coder un autre petit programme dit simple, mais il y a de fortes chances que j'y arrive pas donc, j'ai envi de dire a tte :)


 
Bonjour,
Avec un CASE il me semble que c'est un peu plus lisible .
 
Select Case Note
    Case Is <= 10: MsgBox ("<10" )
    Case Is <= 12: MsgBox ("<12" )
End Select
 
mais ca marce aussi avec les ElseIf ...  :D

n°1479380
yanhoupa
Posté le 21-11-2006 à 16:10:05  profilanswer
 

Ah, ok merci, sinon me revoila  
 
Je dois ecrire un programme qui demande a l'utilsateur sa promotion (Qlio1 ou Qlio2) et lui repondre un truck
 
voila ce que j'ai fait (ca marche pas :/)
 

Code :
  1. Sub promo()
  2. Dim promotion As String
  3. promotion = InputBox("Quelle est votre promotion ?" )
  4. If promotion = qlio1 Then
  5.     MsgBox ("Encore un an à etudier !" )
  6.         ElseIf promotion = qlio2 Then
  7.             MsgBox ("Bravo, le diplôme est proche !" )
  8.                 Else
  9.                     MsgBox ("erreur" )
  10. End If
  11. End Sub

n°1479396
Paul Hood
Posté le 21-11-2006 à 16:16:11  profilanswer
 

Bonjour,
 
sub promo()
  dim Promotion as string
  promotion = Inputbox("Quelle est votre promotion ?" )
 
  select case promotion
   case "Qlio1" : MsgBox ("Encore un an à etudier !" )
   case "Qlio2" : MsgBox ("Bravo, le diplôme est proche !" )
   case else : MsgBox ("erreur" )
  end select
end sub
 
Ca doit fonctionner avec case et pitié... arrete les if else imbriqués à n'en plus finir... à la lecture c'est terrible.

n°1479403
yanhoupa
Posté le 21-11-2006 à 16:22:58  profilanswer
 

mais c'est mon prof qui a dit que ca permetter je suis plus trop quoi, il avait l'air d'aimer les elseif :spamafote:
 
sinon on a jamais vu le "truck" : case
ca consiste en quoi ?
 
sinon merci bien, mais tu pourais me dire où mon programme comportait une erreur ?

n°1479407
Paul Hood
Posté le 21-11-2006 à 16:25:40  profilanswer
 

Quand tu dis ca marche pas ca veut dire quoi ?
  un plantage ou ca fait pas ce que tu veux ?

n°1479413
yanhoupa
Posté le 21-11-2006 à 16:27:01  profilanswer
 

bah il me met toujours une MsgBox ("erreur" )

mood
Publicité
Posté le 21-11-2006 à 16:27:01  profilanswer
 

n°1479415
Paul Hood
Posté le 21-11-2006 à 16:28:02  profilanswer
 

il faut mettre Qlio1 et Qlio2 entre " puisqu'il s'agit de string.
Essaie avec ton code en ajoutant des "

n°1479420
yanhoupa
Posté le 21-11-2006 à 16:29:38  profilanswer
 

ahhhh oki merci bien Paul Hood, me disait bien que mon programme devait marcher :)
 
et surment a toute pour de nouvelles aventures...

n°1479584
yanhoupa
Posté le 21-11-2006 à 20:43:31  profilanswer
 

Alors me revoila :)
 
Donc je dois ecrire une procedure qui demande à l'utilisateur de rentrer des valeurs dans un tableau de 5 sur 5. Voila ce que j'ai fait :
 

Code :
  1. Sub prog_tableau()
  2. Dim tableau(5, 5) As Single
  3. Dim addition As Integer
  4. Range("A1" ).Select
  5. For i = 1 To 5
  6.     For j = 1 To 5
  7.         tableau(i, j) = InputBox("Entrer un nombre" )
  8.        
  9.     Next j
  10. Next i
  11. End Sub


 
bien sur il marche pas :/

n°1479588
-ThX-
Not here anymore
Posté le 21-11-2006 à 20:54:20  profilanswer
 

de mémoire ( mon VB remonte à loin )
 
InputBox() retourne une variable de type String. Pour la convertir en valeur Single ou Integer,  
 
tableau(i, j) = val ( InputBox("Entrer un nombre" ) )
 
Mais je ne suis sur de rien...
 
A savoir aussi, si tu as déclaré "Option base 0" ou "Option base 1" pour les indexations de tableau.

n°1479684
yanhoupa
Posté le 22-11-2006 à 06:20:53  profilanswer
 

merci, mais enfaite mon problème c'est pas ca, il me demande bien 25 valeurs, mais il les affiche pas :/ komenkonfé ?  :??:

n°1479685
seniorpapo​u
Posté le 22-11-2006 à 07:03:29  profilanswer
 

Bonjour,
Il ne les affiche pas où?
 
 
si c'est dans les cellules :
Sub prog_tableau()
For i = 1 To 5
    For j = 1 To 5
        Cells(i, j) = InputBox("Entrer le " & i * j & "e nombre" )
         
    Next j
Next i
 
End Sub
Cordialement


Message édité par seniorpapou le 22-11-2006 à 07:10:59
n°1479821
jpcheck
Pioupiou
Posté le 22-11-2006 à 11:54:01  profilanswer
 

Je complèterai même par

 


si c'est dans les cellules :
Sub prog_tableau()
For i = 1 To 5
    For j = 1 To 5
        Cells(i, j) = InputBox("Entrer le " & (i-1) *5 + j & "e nombre" )
       
    Next j
Next i

 

End Sub

 

;)


Message édité par jpcheck le 22-11-2006 à 11:54:34
n°1479858
seniorpapo​u
Posté le 22-11-2006 à 12:54:07  profilanswer
 

Bonjour,
Bien vu jpcheck, je n'avais même pas regardé ce que j'affichais lorsque j'ai testé.
Cordialement

n°1479875
FlorentG
Unité de Masse
Posté le 22-11-2006 à 13:17:17  profilanswer
 

J'croyais que l'aide aux devoirs était interdit [:dawak]

n°1479949
Paul Hood
Posté le 22-11-2006 à 14:48:26  profilanswer
 

FlorentG a écrit :

J'croyais que l'aide aux devoirs était interdit [:dawak]


 
Bonjour,
Il s'agit de l'aider ... pas de tout lui faire. :bounce:  
Il avait le code ... jusque un détail à revoir.

n°1480171
yanhoupa
Posté le 22-11-2006 à 18:22:40  profilanswer
 

absolument, j'ai encore quelque soucis avec la synthaxe et quelque lacunes techniques mais c'est pas comme je demandé les reponses sans avoir essayé de le faire et je trouve que je m'ameliore :)
 
Edit : encore merci a vous :jap:


Message édité par yanhoupa le 22-11-2006 à 18:30:46
n°1483113
yanhoupa
Posté le 28-11-2006 à 16:13:10  profilanswer
 

Bonjour,
 
Je dois ecrire un programme qui a un tableau de 8 par 8 vide pour representer un echequier. Sur cette echequier on demande a l'utilisateur l'emplacement d'une tour, et en fonction de la où elle est on colorie en rouge là où elle peut aller (il n'y a qu'elle sur l'echequier).
 
J'ai fait ceci :  
 

Code :
  1. Sub Tour()
  2. Dim place As Single
  3. Dim tableau(8, 8) As Single
  4. Dim i As Single
  5. Dim j As Single
  6. place = InputBox("Où se trouve votre Tour ?" )
  7. For i = 1 To 8
  8.     For j = 1 To 8
  9.         If tableau(i, j) = place Then
  10.         Selection.Cells.Index.Color = 3
  11.     Next j
  12. Next i
  13. MsgBox ("Votre Tour peut aller sur toutes les cases rouges de ce damier" )
  14. End Sub


 
J'explique ma logique (car pas forcement intuitive :)). L'utilisateur entre par exemple la case "B3" pour dire où est la tour, puis le progamme regarde si chaque case est égale avec ce que l'utilisateur a entré et si oui, alors on colorie en rouge la case.  
 
Mais enfaite jecomprend pas trop où ca déconne  :??:  
 
Merci d'avance

n°1483116
FlorentG
Unité de Masse
Posté le 28-11-2006 à 16:15:04  profilanswer
 

T'as au moins rempli ton tableau ?

n°1483120
yanhoupa
Posté le 28-11-2006 à 16:16:57  profilanswer
 

Non mais il n'y a rien sur le tableau, il est vide. On demande juste ou se trouve la Tour sur l'echequier et a partir de la on le colorie en rouge (enfin seulment les cases où la tour peut aller).

n°1483121
FlorentG
Unité de Masse
Posté le 28-11-2006 à 16:17:41  profilanswer
 

Ben c'est normal alors [:johneh]
 
Si tu testes :

Code :
  1. If tableau(i, j) = place Then


 
tableau(i, j) sera vide, donc jamais égal à place :(

n°1483124
yanhoupa
Posté le 28-11-2006 à 16:19:35  profilanswer
 

oui enfin je crois comprendre le problème...
 
comment on fait pour qu'il ne regarde pas la valeur de la case mais sa place...

n°1483125
FlorentG
Unité de Masse
Posté le 28-11-2006 à 16:21:10  profilanswer
 

Ca c'est à toi de le faire... Découper ce que l'utilisateur a entré (B d'un côté, et 3 de l'autre), convertir B en nombre (2), et regarder ensuite dans le tableau si y'a déjà quelque chose. Si c'est vide, y mettre une valeur spéciale

n°1483131
yanhoupa
Posté le 28-11-2006 à 16:24:35  profilanswer
 

ah ok merci, je vais essayer ça, merci.
 
enfaite, je lui demande la colone de la tour, puis je colorie toute cette colone et je fais pareil avec la ligne ?

n°1483152
yanhoupa
Posté le 28-11-2006 à 16:43:58  profilanswer
 

donc je laisse tomber, je comprend plus rien là, je verais la correction lundi prochain...
 
Mais merci quand meme

n°1483185
Paul Hood
Posté le 28-11-2006 à 17:14:03  profilanswer
 

Bonjour,
 
Tu peux garder ton code et initialiser ton tableau en mettant comme valeur le nom de la case
En supposant que les colonnes sont A, B et C (on va faire avec 3 pour commencer)
et les lignes 1 ,2 et 3
 
Initialisation de ton tableau :  
  dim Tableau(3,3) as string
  nbcol=3
  nblig=3
 for col=1 to nbcol
   for lig =1 to nblig
     tableau(col,lig)=Chr(64 + Col) & lig
   next
  next

n°1483925
yanhoupa
Posté le 29-11-2006 à 18:59:14  profilanswer
 

donc pour le tour aux echec c'est pas grave (pour le moment) je verais plus tard.
 
La j'essaye de rentrer des valeurs demander a l'utilisateur puis les enregistrer dans un tableau et faire la somme de chaque ligne comme ci dessous (c'est faux) :
 

Code :
  1. Sub entrer_valeur_tableau()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim somme As Single
  5. Dim tableau(5, 6) As Integer
  6. '6 colones et 5 lignes
  7. 'ecrire un tableau
  8. For i = 1 To 5
  9.     For j = 1 To 6
  10.    
  11. Cells(i, j) = InputBox("entrer nombre" )
  12.    
  13.     Next j
  14. Next i
  15. 'enregistrer le tableau
  16. For i = 1 To 5
  17.     For j = 1 To 6
  18. tableau(i, j) = Cells(i, j)
  19.     Next j
  20. Next i
  21. ' calcule des sommes de chaques ligne
  22. For i = 1 To 5
  23.     For j = 1 To 6
  24.     somme = somme + tableau(i, j)
  25.     Cells(i, 7) = somme
  26.    
  27.     Next j
  28. Next i
  29. End Sub


 
Enfaite le soucis c'est qu'il semble cumuler toutes les valeurs :/


Message édité par yanhoupa le 29-11-2006 à 18:59:33
n°1483934
FlorentG
Unité de Masse
Posté le 29-11-2006 à 19:21:46  profilanswer
 

Il sert à quoi ton Cells ligne 16 ? Pourquoi tu remplis pas "tableau" directement ? [:johneh]

n°1483936
yanhoupa
Posté le 29-11-2006 à 19:28:05  profilanswer
 

oui non mais c'est pareil, dison qu'il est guidé, mais c'est pas la le probleme, ca c'est un detail mais j'ai reussi a compater le tout :
 

Code :
  1. Sub entrer_valeur_tableau()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim somme As Single
  5. Dim tableau(5, 6) As Integer
  6. For i = 1 To 5
  7.     For j = 1 To 6
  8.    
  9. Cells(i, j) = InputBox("entrer nombre" )
  10. tableau(i, j) = Cells(i, j)
  11. somme = somme + tableau(i, j)
  12. Cells(i, 8) = somme
  13.     Next j
  14. Next i
  15. End Sub


 
mon problème c'est qu'il cumule les sommes des ligne, enfaite il me faudrait trouver un moyen de remettre somme = 0 a chaque retour a la ligne

n°1483937
FlorentG
Unité de Masse
Posté le 29-11-2006 à 19:29:10  profilanswer
 

Ben entre les deux next, tu rajoutes un somme = 0 [:petrus dei]

n°1483939
yanhoupa
Posté le 29-11-2006 à 19:39:22  profilanswer
 

je me disais bien que ca devais pas etre sorcier, mais merci bien a toi

n°1484309
yanhoupa
Posté le 30-11-2006 à 14:08:36  profilanswer
 

Bon je revien avec mon echequier :)

Paul Hood a écrit :

Bonjour,
 
Tu peux garder ton code et initialiser ton tableau en mettant comme valeur le nom de la case
En supposant que les colonnes sont A, B et C (on va faire avec 3 pour commencer)
et les lignes 1 ,2 et 3
 
Initialisation de ton tableau :  
  dim Tableau(3,3) as string
  nbcol=3
  nblig=3
 for col=1 to nbcol
   for lig =1 to nblig
     tableau(col,lig)=Chr(64 + Col) & lig
   next lig
  next col


 
 
mais enfaite ca sert a quoi de faire ca ? a mettre des valeur dans le tableau non ? mais le 64 sert ? et le chr ?

n°1484312
yanhoupa
Posté le 30-11-2006 à 14:14:16  profilanswer
 

Après correction et mise en forme ca donne cela :
 

Code :
  1. Sub tour()
  2. Dim Tableau(8, 8) As String
  3. Dim nbcol As Single
  4. Dim nblig As Single
  5. Dim col As Integer
  6. Dim lig As Integer
  7. place = InputBox("Où est votre tour ?" )
  8. nbcol = 8
  9. nblig = 8
  10. For col = 1 To nbcol
  11.     For lig = 1 To nblig
  12.         Tableau(col, lig) = Chr(64 + col) & lig
  13.     Next lig
  14. Next col
  15. End Sub


 
bien sur ca marche pas :/ mais je là met où la variable "place" ?


Message édité par yanhoupa le 30-11-2006 à 14:14:55
n°1484370
Paul Hood
Posté le 30-11-2006 à 15:21:04  profilanswer
 

Bonjour,
Tu colles ce code dans une feuille. Tu ajoutes un bouton dans la feuille
 
Private Sub CommandButton1_Click()
    Dim tableau(8, 8) As String
    Dim MonChoix As String
    For Col = 1 To 8
        For lig = 1 To 8
         tableau(Col, lig) = Chr(64 + Col) & lig
        Next
    Next
     
    MonChoix = InputBox("Quelle case ?" )
     
    For Col = 1 To 8
        For lig = 1 To 8
         If tableau(Col, lig) = MonChoix Then
            Range(MonChoix).Interior.ColorIndex = 3
         End If
        Next
    Next
End Sub
 
Quand tu clic sur le bouton, tu renseignes une case "A1", "C3", etc... (il n'y a pas de test sur la validité de la saisie)
Et quand tu valides ta saisie la case apparaît en rouge sur ta feuille.
 
Je ne sais pas si c'est ca que tu veux faire mais ca dervait t'aider.


Message édité par Paul Hood le 30-11-2006 à 15:27:26
n°1484382
Paul Hood
Posté le 30-11-2006 à 15:31:44  profilanswer
 

J'ai pas repondu à tes questions donc voilà :
Dans le tableau je mets les adresses des cellules.
le chr(i) me permet de convertir un nombre en caractére oùù i est le caractére ascii du caractère.
Et le 64 c'est parceque le "A" est en 65 (asc(A)=65) donc chr(65)=A

n°1484420
yanhoupa
Posté le 30-11-2006 à 16:14:14  profilanswer
 

A ok, c'est assez complex mais je vois mieux maintenant, merci.
 
Tu as mi cela :
If tableau(col, lig) = MonChoix Then
           Range(MonChoix).Interior.ColorIndex = 3

 
et cela ne colorie que la case où est la tour, et enfaite moi mon but est de colorier toute les cases où la tour peut se déplacer (en clair toute la ligne et toute la colone ou elle se trouve) sauf la ou elle est.
 
Moi j'ai pensé a cela mais ca marche pas :
 
If tableau(col, lig) = MonChoix Then
            Columns("col:col" ).Interior.ColorIndex = 3
            Rows("lig:lig" ).Interior.ColorIndex = 3
            Range(MonChoix).Interior.ColorIndex = 0


Message édité par yanhoupa le 30-11-2006 à 16:14:41
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  un programme simple qui marche pas (en If et Else)

 

Sujets relatifs
[C++]Factorisation Cholesky qui marche pasFormulaire mailto ne marche pas sur IE
[PHP] Marche sous Easyphp mais pas sous wamp?[SED] Remplacement simple d'une chaine avec espace
[ C ] erreur dans mon programme ?[processing] programmer un jeu simple
Programme pour algorithmeCompiler ce petit programme
Titre avec ligne (tout simple mais IE ne veut pas)Question tres simple : cloner un tableau
Plus de sujets relatifs à : un programme simple qui marche pas (en If et Else)


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