un programme simple qui marche pas (en If et Else) - VB/VBA/VBS - Programmation
Marsh Posté le 19-11-2006 à 09:13:43
Sélectionner ElseIf [F1] puis voir l'exemple
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 lorthographe tu auras moins de 8 :
Rattrapage
Félicitations
Excellent
Vous êtes
Cordialement
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
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 |
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 ...
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 :
|
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.
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
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 ?
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 ?
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 "
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...
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 :
|
bien sur il marche pas
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.
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é ?
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
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
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
Marsh Posté le 22-11-2006 à 13:17:17
ReplyMarsh Posté le 22-11-2006 à 14:48:26
FlorentG a écrit : J'croyais que l'aide aux devoirs était interdit |
Bonjour,
Il s'agit de l'aider ... pas de tout lui faire.
Il avait le code ... jusque un détail à revoir.
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
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 :
|
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
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).
Marsh Posté le 28-11-2006 à 16:17:41
Ben c'est normal alors
Si tu testes :
Code :
|
tableau(i, j) sera vide, donc jamais égal à place
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...
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
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 ?
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
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
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 :
|
Enfaite le soucis c'est qu'il semble cumuler toutes les valeurs
Marsh Posté le 29-11-2006 à 19:21:46
Il sert à quoi ton Cells ligne 16 ? Pourquoi tu remplis pas "tableau" directement ?
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 :
|
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
Marsh Posté le 29-11-2006 à 19:39:22
je me disais bien que ca devais pas etre sorcier, mais merci bien a toi
Marsh Posté le 30-11-2006 à 14:08:36
Bon je revien avec mon echequier
Paul Hood a écrit : Bonjour, |
mais enfaite ca sert a quoi de faire ca ? a mettre des valeur dans le tableau non ? mais le 64 sert ? et le chr ?
Marsh Posté le 30-11-2006 à 14:14:16
Après correction et mise en forme ca donne cela :
Code :
|
bien sur ca marche pas mais je là met où la variable "place" ?
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.
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
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
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 :
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