IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

IF/ElseIf et Unités arrondis


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut IF/ElseIf et Unités arrondis
    Salutations à vous tous. Je ne crois pas que les problemes ci-dessous vous causeront d'énormes problemes. Merci de votre aide:



    Voici une image du programme (très basique, je peux l'avouer)

    Je vous explique un peu la fonction. En haut, tu dois écrire trois chiffres. (bois-mana-minerais). Lorsque ceci est fait, vous devez cliquez sur "Calculer". C'est la que tout ce passe. Un Loup de Fenris, par exemple, coute 3 de bois, 1 mana et 1 de minerais. Je veux que le programme calcule le nombre de Loup de Fenris (avec les couts) que je peux faire, avec les unités de bois/mana/minerais que j'ai entré plus haut. En gros, je veux que le programme fasse: (Si j'inscrit que je possède 50 de bois, 50 de mana et 50 de minerais)

    =50 / par le cout (3)
    =50/3
    =17(environ)
    Ensuite
    =50(mana) / 1

    Voilà.. J'ai fais un minimum de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub cmdCalculer_Click()
     
    lblH1_bois.Caption = Val(txtBois.Text) / 3
    lblH1_mana.Caption = Val(txtMana.Text) / 1
    lblH1_minerais.Caption = Val(txtMinerais.Text) / 1
     
    If Val(lblH1_bois.Caption) <= Val(lblH1_mana.Caption) <= Val(lblH1_minerais.Caption) Then
    lblH1.Caption = Val(lblH1_bois.Caption)
    End If
     
    If Val(lblH1_bois.Caption) <= Val(lblH1_minerais.Caption) <= Val(lblH1_mana.Caption) Then
    lblH1.Caption = Val(lblH1_bois.Caption)
    End If
     
    If Val(lblH1_minerais.Caption) <= Val(lblH1_mana.Caption) <= Val(lblH1_bois.Caption) Then
    lblH1.Caption = Val(lblH1_minerais.Caption)
    End If
     
    If Val(lblH1_mana.Caption) <= Val(lblH1_bois.Caption) <= Val(lblH1_minerais.Caption) Then
    lblH1.Caption = Val(lblH1_mana.Caption)
    End If
     
    If Val(lblH1_minerais.Caption) <= Val(lblH1_bois.Caption) <= Val(lblH1_mana.Caption) Then
    lblH1.Caption = Val(lblH1_minerais.Caption)
    End If
     
    If Val(lblH1_bois.Caption) <= Val(lblH1_minerais.Caption) <= Val(lblH1_mana.Caption) Then
    lblH1.Caption = Val(lblH1_bois.Caption)
    End If
     
    If Val(lblH1_mana.Caption) <= Val(lblH1_minerais.Caption) <= Val(lblH1_bois.Caption) Then
    lblH1.Caption = Val(lblH1_mana.Caption)
    End If
     
    End Sub
    Private Sub cmdCalculer2_Click()
    txtFerme = Val(txtpourcentageFerme.Text) * (txtcout.Text) / 200
    txtMaison = Val(txtpourcentageMaison.Text) * (txtcout.Text) / 200
    End Sub
    Private Sub cmdQuitter_Click()
    End
    End Sub
    Ne faites pas attention au "Calculer2". C'est une fonction que j'ai rajouté dernièrement.

    (PS. Biensûr, le IF ne fonctionne pas, la est mon probleme)



    Donc dans la zone de texte blanche, je veux que le programme inscrit le plus bas chiffre des trois réponses. Ici, ça ce trouve à être lblH1_bois, mais les trois diviseur de base ( 3, 1 et 1) vont toujours être modifiée.

    Je ne sais pas si j'ai bien été compris, mais bon.

    Premier label rouge: lblH1_bois
    Deuxième label rouge: lblH1_mana
    Troisième label rouge: lblH1_minerais
    Label blanc: lblh1

    Deuxième probleme:
    Si par exemple, j'inscris 85. Le programme fera: 85 / 3 donc = 28.33333

    Il y a une manière de rendre la réponse juste et net à 23? (Sans modifier le 85 ou le 3) Comme en arrondissant.


    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    Pour faire une division entière faut utiliser \ au lieu de / je crois.
    Ensuite dans un if je crois pas aue tu peux faire direct a < b < c, faut faire if a < b and b < c il me semble. Ecris une fonction minimum sinon genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function Min (A As Integer, B As Integer, C As Integer) As Integer
    Dim Temp As Integer
    Temp = IIf (A > B, A, B)
    Temp = IIf (Temp > C, Temp, C)
    Min = Temp
    End Function
    Ensuite pour remplir ton lblH1.Caption (le blanc) tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblH1.Caption = Min (lblH1_Bois.caption \ 3, lblH1_Mana.caption, lblH1_Minerais.caption)

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Je confirme la réponse de Gaetch, les if ne supportent pas les comparaisont multiple de la façon que tu l'écrit.

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (A < E and X > B) or (V > A and H < Z) then
    ....
    elseif E=2 or I=5 then
    .....
    else
    ....
    end if

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Voici ce que j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub cmdCalculer_Click()
    lblH1_bois.Caption = Val(txtBois.Text) \ 3
    lblH1_mana.Caption = Val(txtMana.Text) \ 1
    lblH1_minerais.Caption = Val(txtMinerais.Text) \ 1
    Function Min(A As Integer, B As Integer, C As Integer) As Integer
    Dim Temp As Integer
    Temp = IIf(A > B, A, B)
    Temp = IIf(Temp > C, Temp, C)
    Min = Temp
    End Function
    lblH1.Caption = Min(lblH1_bois.Caption \ 3, lblH1_mana.Caption \ 1, lblH1_minerais.Caption \ 1)
    End Sub
     
    Private Sub cmdCalculer2_Click()
    txtFerme = Val(txtpourcentageFerme.Text) * (txtcout.Text) / 200
    txtMaison = Val(txtpourcentageMaison.Text) * (txtcout.Text) / 200
    End Sub
     
    Private Sub cmdQuitter_Click()
    End
    End Sub
    Pourtant ça ne fonctionnne pas. L'erreur: Expected End Sub.

    Il est pourtant bien la...

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Dit donc..... relit un peu ton code,
    tu imbrique une fonction dans une sub

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Aie, ou j'avais la tête héhé.

    Cependant ça ne résous pas mon probleme. Si j,entre 12/12/12 dans txtBois/txtMana/txtMinerais.

    Ça lance les réponse
    1. 4 dans lblh1_bois
    2. 12 dans lblh1_mana
    3. 12 dans lblh1_minerais

    Et pourtant, dans lblh1 (le label blanc) il me sort le chiffre "12" alors que C'est senser donner "4".

    Désolé si je vous dérange, mais bon. Je ne vois aucune erreure nul-part...

  7. #7
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Ton erreur (L'erreur: Expected End Sub.), viens de la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub cmdCalculer_Click()
    lblH1_bois.Caption = Val(txtBois.Text) \ 3
    lblH1_mana.Caption = Val(txtMana.Text) \ 1
    lblH1_minerais.Caption = Val(txtMinerais.Text) \ 1
    Function Min(A As Integer, B As Integer, C As Integer) As Integer
    Dim Temp As Integer
    Temp = IIf(A > B, A, B)
    Temp = IIf(Temp > C, Temp, C)
    Min = Temp
    End Function
    lblH1.Caption = Min(lblH1_bois.Caption \ 3, lblH1_mana.Caption \ 1, lblH1_minerais.Caption \ 1)
    End Sub
    Tu as mis une fonction dans une procedure, En VB c'est pas possible, tu doit faire ressortir la fonction de la definition de la procedure comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub cmdCalculer_Click()
    lblH1_bois.Caption = Val(txtBois.Text) \ 3
    lblH1_mana.Caption = Val(txtMana.Text) \ 1
    lblH1_minerais.Caption = Val(txtMinerais.Text) \ 1
    lblH1.Caption = Min(lblH1_bois.Caption \ 3, lblH1_mana.Caption \ 1, lblH1_minerais.Caption \ 1)
    End Sub
     
    Private Function Min(A As Integer, B As Integer, C As Integer) As Integer
    Dim Temp As Integer
    Temp = IIf(A > B, A, B)
    Temp = IIf(Temp > C, Temp, C)
    Min = Temp
    End Function
    La comme ca tu ne devrais plus avoir ce genre d'erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ETAT] Access arrondi à la 10aine au lieu de l'unité
    Par Alain Rivet dans le forum IHM
    Réponses: 10
    Dernier message: 20/01/2006, 18h02
  2. [Turbo Pascal] [Windows XP] Problème avec l'unité GRAPH
    Par themofleur dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 29/03/2003, 22h43
  3. TTreeView -> Comment ouvrir une unité ?
    Par DaLove dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2002, 11h30
  4. [VB6] Racine carrée + arrondi
    Par Krys29 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/10/2002, 13h19
  5. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo