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

un programme simple qui marche pas (en If et Else) - VB/VBA/VBS - Programmation

Marsh Posté le 19-11-2006 à 08:56:49    

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
Reply

Marsh Posté le 19-11-2006 à 08:56:49   

Reply

Marsh Posté le 19-11-2006 à 09:13:43    

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


Message édité par kiki29 le 19-11-2006 à 09:54:20
Reply

Marsh Posté le 19-11-2006 à 09:42:01    

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
Reply

Marsh Posté le 19-11-2006 à 11:22:10    

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

Reply

Marsh Posté le 20-11-2006 à 14:48:08    

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

Reply

Marsh Posté le 21-11-2006 à 16:10:05    

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

Reply

Marsh Posté le 21-11-2006 à 16:16:11    

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.

Reply

Marsh Posté le 21-11-2006 à 16:22:58    

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 ?

Reply

Marsh Posté le 21-11-2006 à 16:25:40    

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

Reply

Marsh Posté le 21-11-2006 à 16:27:01    

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

Reply

Marsh Posté le 21-11-2006 à 16:27:01   

Reply

Marsh Posté le 21-11-2006 à 16:28:02    

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

Reply

Marsh Posté le 21-11-2006 à 16:29:38    

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

Reply

Marsh Posté le 21-11-2006 à 20:43:31    

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

Reply

Marsh Posté le 21-11-2006 à 20:54:20    

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.

Reply

Marsh Posté le 22-11-2006 à 06:20:53    

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

Reply

Marsh Posté le 22-11-2006 à 07:03:29    

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
Reply

Marsh Posté le 22-11-2006 à 11:54:01    

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
Reply

Marsh Posté le 22-11-2006 à 12:54:07    

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

Reply

Marsh Posté le 22-11-2006 à 13:17:17    

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

Reply

Marsh Posté le 22-11-2006 à 14:48:26    

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.

Reply

Marsh Posté le 22-11-2006 à 18:22:40    

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
Reply

Marsh Posté le 28-11-2006 à 16:13:10    

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

Reply

Marsh Posté le 28-11-2006 à 16:15:04    

T'as au moins rempli ton tableau ?

Reply

Marsh Posté le 28-11-2006 à 16:16:57    

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

Reply

Marsh Posté le 28-11-2006 à 16:17:41    

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

Reply

Marsh Posté le 28-11-2006 à 16:19:35    

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

Reply

Marsh Posté le 28-11-2006 à 16:21:10    

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

Reply

Marsh Posté le 28-11-2006 à 16:24:35    

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 ?

Reply

Marsh Posté le 28-11-2006 à 16:43:58    

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

Reply

Marsh Posté le 28-11-2006 à 17:14:03    

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

Reply

Marsh Posté le 29-11-2006 à 18:59:14    

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
Reply

Marsh Posté le 29-11-2006 à 19:21:46    

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

Reply

Marsh Posté le 29-11-2006 à 19:28:05    

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

Reply

Marsh Posté le 29-11-2006 à 19:29:10    

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

Reply

Marsh Posté le 29-11-2006 à 19:39:22    

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

Reply

Marsh Posté le 30-11-2006 à 14:08:36    

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 ?

Reply

Marsh Posté le 30-11-2006 à 14:14:16    

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
Reply

Marsh Posté le 30-11-2006 à 15:21:04    

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
Reply

Marsh Posté le 30-11-2006 à 15:31:44    

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

Reply

Marsh Posté le 30-11-2006 à 16:14:14    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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