Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Visual Basic 6.0] - Heure...

    18 octobre 2006 à 18:50:29

    Bonjour, je suis en train de créé un programme qui me servira pour Ogame (que vous connaissez pour la plupart je pense ;) )

    Le but du programme est simple. Vous entrez le nombre de ressource que vous avez (Métal, etc...), vous entrez combien vous en voulez et enfin la production par heure. Et mon programme vous dit dans combien d'heures vous aurez vos ressources.

    J'ai réussit à entrer les calculs etc... MAIS :o !
    J'aimerais que le résultat s'exprime en heures réelles, par exemple, si j'entre des données quelquonque, j'ai par exemple, 2,15445 heures.


    C'est pas génial dans la comprehension. En cherchant un peu, je sais que le résultat obtenu se multiplie par 60 et on a le nombre de minutes... Mais bon quand on a un résultat supérieur à 60, bah ca va plus non plus...

    J'aimerais que vous m'aidez à trouver le bon calcul permettant de convertir en heure... ou que vous me disiez s'il y a des commandes servant a ca.


    Merci !!!


    PS : Pour voir le logiciel, Téléchargez le ICI.

    S'il vous manque une DLL, prenez CECI
    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2006 à 0:53:37

      Citation : Hord Fast

      En cherchant un peu, je sais que le résultat obtenu se multiplie par 60 et on a le nombre de minutes... Mais bon quand on a un résultat supérieur à 60, bah ca va plus non plus...


      Tu ne peux pas avoir de résultat supérieur à 60, puisque les minutes se calculent à partir de ton nombre réel auquel tu retranches sa partie entière qui représente les heures (ex : 2,15445 - 2 = 0,15445). Le résultat est toujours inférieur à 1 (forcément), donc ce résultat multiplié par 60 est toujours inférieur à 60...

      Un bout de code pour effectuer ton calcul :

      Préalable : je suppose ton réel (le 2,15445 que tu donnes en exemple) stocké dans une variable nommée "temps"... Les jours, heures, minutes, secondes seront stockées dans des entiers "jours", "heures", "minutes", "secondes"... Int(nombre) prend la partie entière d'un nombre...

      Dim jours, heures, minutes, secondes as Integer

      If Int(temps) >= 24 Then
         jours = Int (Int(temps) / 24)
         temps = temps - (24*jours)
      End If

      heures = Int(temps)
      temps = 60*(temps - heures)
      minutes = Int(temps)
      temps = 60*(temps - minutes)
      secondes = Int(temps)

      Normalement, cela devrait fonctionner... Tu excuseras les éventuelles erreurs de syntaxe : cela fait longtemps que je n'ai pas fait de vb6...
      Il y a peut être aussi plus élégant pour faire ce calcul, m'enfin...
      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2006 à 16:01:30

        si ton chiffre ( 2,15445 ) est un nombre d'heures, (c pas top mais bon): il suffit de le diviser par 24 puis utiliser la fonction Cdate() :) ! et pour l'afficher:
        format(cdate(2.15445/24 ), "hh:mm:ss")

        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2006 à 17:35:14

          Citation : pifou25

          si ton chiffre ( 2,15445 ) est un nombre d'heures, (c pas top mais bon): il suffit de le diviser par 24 puis utiliser la fonction Cdate() :) ! et pour l'afficher:

          format(cdate(2.15445/24 ), "hh:mm:ss")



          J'avais pensé à Cdate... Mais je n'étais pas sûr que ça marche (jamais utilisé, à vrai dire)...

          Citation

          CDate Function

          CDate(expression)

          Converts the value of expression to a Date data type. The argument expression must be a valid date expression


          Ceci dit, je ne peux pas tester ton code... Mais très intéressé de savoir si ça marche...

          Enfin, à défaut d'être élégante, ma solution aura peut être permis à l'auteur de ce post de comprendre la manière de convertir un réel en date...
          • Partager sur Facebook
          • Partager sur Twitter
            19 octobre 2006 à 18:39:00

            Merci, ca marche à merveille !!!!

            Nouveau Probleme :p


            J'aimerais faire en sorte qu'une boite de dialogue (je connais la commande msgbox) s'ouvre lorsque un champs, ou plusieurs n'est pas remplis. Et qu'il ne quitte pas le programme et ne trouve donc pas de bug. Je sais pas comment faire ca.

            J'ai essayé ca par exemple :

            If text1.text = "" or text2.text = "" or text3.text = "" then msgbox "Veuillez remplir tout les champs"


            Mais ca ne fait rien, il dit qu'il y a un bug, et dans le "rapport de bug" il me surligne :

            act = text1.text
            sou = text2.text
            prodh = text3.text


            Parce que justement il n'a pas trouvé ces valeurs et ne peux pas faire le calcul. Et moi, je veux pas qu'il entame le calcul si ya rien d'écrit.




            Citation : Coolsteph


            Enfin, à défaut d'être élégante, ma solution aura peut être permis à l'auteur de ce post de comprendre la manière de convertir un réel en date...



            Dans OGame, les joueurs ont le temps sous le format hh:mm:ss, donc niveau compréhension y'aura pas de problèmes pour eux ;)
            • Partager sur Facebook
            • Partager sur Twitter
              19 octobre 2006 à 18:41:18

              Si tu montrais ton Code en Entier ou dumoins cette partie ? ca serait mieux non ???
              il doit te manquer un else quelque part ;)
              • Partager sur Facebook
              • Partager sur Twitter
                19 octobre 2006 à 18:43:36

                Voici le code, par exemple pour la page où l'ont calcul le Deutérium.


                Private Sub Command4_Click()
                act = Text1.Text
                sou = Text2.Text
                prodh = Text3.Text
                h = (sou - act) / prodh
                If sou < act Then MsgBox "Vous avez déjà " & sou & " Deutériums"
                If sou > act Then Label2.Caption = "Vous aurez " & sou & " Deutériums dans " & Format(CDate(h / 24), "hh:mm:ss")
                End Sub


                Et j'ai essayé ca :

                Private Sub Command4_Click()
                act = Text1.Text
                sou = Text2.Text
                prodh = Text3.Text
                h = (sou - act) / prodh
                If text1.text = "" or text2.text = "" or text3.text = "" then msgbox "Veuillez remplir tout les champs"
                If sou < act Then MsgBox "Vous avez déjà " & sou & " Deutériums"
                If sou > act Then Label2.Caption = "Vous aurez " & sou & " Deutériums dans " & Format(CDate(h / 24), "hh:mm:ss")
                End Sub
                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2006 à 23:25:56

                  Citation : Hord Fast

                  Citation : Coolsteph


                  Enfin, à défaut d'être élégante, ma solution aura peut être permis à l'auteur de ce post de comprendre la manière de convertir un réel en date...



                  Dans OGame, les joueurs ont le temps sous le format hh:mm:ss, donc niveau compréhension y'aura pas de problèmes pour eux ;)


                  Ce n'est pas ça que je voulais dire... Je pensais à ton premier post et ta façon d'aborder le problème... La multiplication par 60 et, plus généralement, la méthode mathématique pour convertir un nombre en date (soustraire la partie entière, multiplier par 60, etc...)...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 octobre 2006 à 18:25:53

                    Petit UP,

                    Citation : Hord Fast

                    J'aimerais faire en sorte qu'une boite de dialogue (je connais la commande msgbox) s'ouvre lorsque un champs, ou plusieurs n'est pas remplis. Et qu'il ne quitte pas le programme et ne trouve donc pas de bug. Je sais pas comment faire ca.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 octobre 2006 à 9:29:13

                      Private Sub Command4_Click()
                      If text1.text = "" or text2.text = "" or text3.text = "" then
                          Msgbox "Veuillez remplir tout les champs"
                      Else
                          act = Text1.Text
                          sou = Text2.Text
                          prodh = Text3.Text

                          h = (sou - act) / prodh
                          If sou < act Then MsgBox "Vous avez déjà " & sou & " Deutériums"
                          If sou > act Then Label2.Caption = "Vous aurez " & sou & " Deutériums dans " & Format(CDate(h / 24), "hh:mm:ss")
                      End If
                      End Sub


                      Essaye comme ceci ;) [je ne te garanti pas que celà fonctionne ca doit faire 3 ans que j'ai pas fait de Vb :-°
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 octobre 2006 à 11:59:45

                        Il y a un petit problème dans ton programme, lorsque tu cliques sur retour, la fenêtre ne se ferme pas (sauf pour le métal).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 octobre 2006 à 12:23:56

                          Problème de page résolu. Ca marche pour tous. :)

                          Télécharger la Version 3.8 du programme.

                          Par contre pour les champs vide, je cherche encore point de vue de ton code RedoX

                          EDIT : Ca marche !!!!!!! :D:D:D:D

                          Merci de l'aide

                          Télécharger la Version 4.0 du programme.



                          Merci de me signaler s'il existe d'autres bug.

                          Désormait... J'ai eu d'autres idées d'optimisation mais je sais pas trop comment m'y prendre.

                          Idée 1 : Le temps qui s'affiche après le calcul réagit comme un compte à rebours.

                          Idée 2 : Si la personne entre autre chose que des chiffres, on a un message : "Entrez des valeurs convenables"



                          Merci

                          EDIT2 : Il existe (encore) une nouvelle version du programme. Le plus ? Si on veux savoir par exemple quand est-ce que l'on aura 2000 Deu alors qu'on en à déjà 3000 ont a un message d'erreur disant que l'on en a déjà 2000.
                          Ahem... Voila qu'intervient un nouvel Edit. De la version 4.5 on passe à la 5.0 ==> Impossible d'avoir une production par heure = 0 :D
                          Ré-edit : Version 5.5



                          Mais n'oublions pas !
                          J'aimerais faire ceci :

                          Citation : Hord Fast

                          Idée 1 : Le temps qui s'affiche après le calcul réagit comme un compte à rebours.


                          Idée 2 : Si la personne entre autre chose que des chiffres, on a un message : "Entrez des valeurs convenables"

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 octobre 2006 à 0:25:03

                            Aller hop...
                            Un petit UP, afin d'éviter que mon sujet en se retrouve Page 500² et que j'ai pas de réponse. :-°


                            Merci de votre aimable aide :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 octobre 2006 à 17:07:55

                              Désolé... Mais je me sens encore obligé de faire un petit UP (C'est autorisé !!! Toutes les 12 heures... :-° )

                              Nan mais sérieux je cherche à mettre mes idées sur mon programme mais je trouve vraiment pas.


                              Merci... (de m'aider :euh: )


                              EDIT : Encore une nouvelle version du logiciel. Elle comprend une aide et une amélioration de l'apparence.

                              Télécharger la version 6.8
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 octobre 2006 à 19:27:29

                                Arf ! :o

                                Toujours personne qui pourrais m'aider à réaliser mon "projet" ??? :-°



                                Le mec à peine Chiant
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 octobre 2006 à 11:33:51

                                  Bon j'Up une nouvelle fois, j'ai essayé de pas abusé sur le coup des 12 heures mais voila quoi

                                  HELP :euh:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 octobre 2006 à 20:49:00

                                    le champs vide il vaut pas "" à mon avis, il est null! essaye avec des test du type
                                    If isnull(text1.text) and isnull(text2.text) and isnull(text3.text) then
                                        Msgbox "Veuillez remplir tout les champs"


                                    edit : Veuillez remplir tout les champs ==> j'en conclu que tu dois utiliser AND et pas OR :)
                                    et si 'isnull' n'est pas assez restrictif, essaye aussi 'isnumeric' comme fonction.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      25 octobre 2006 à 21:09:18

                                      Merci, mais ca marche très bien comme j'ai fait ;)



                                      J'ai repéré un nouveau problème... Que j'ai du mal à expliquer alors je vais faire de mon mieux.

                                      En fait, le programme nous dit dans combien d'heures on aura nos ressources, mais si le nombre d'heures est supérieur à 24... et bien on a une sorte de retour à 0.

                                      Comme si 24 heures <=> 0 heure.

                                      Exemple si on aura nos ressources dans 26 heures, le programme n'indiquera pas "26 : 00 : 00" mais "02:00:00"

                                      Comment puis-je résoudre ca ?


                                      Voici une partie du code source :


                                      ...
                                      act = Text1.Text
                                      sou = Text2.Text
                                      prodh = Text3.Text
                                      If sou > act Then
                                      h = (sou - act) / prodh
                                      Label2.Caption = Format(CDate(h / 24), "hh : mm : ss")
                                      Else
                                      ...



                                      Voici la sortie de la version 8.5 ! Là, une fois que vous avez entrer toutes les données et que le temps éstimé est affiché, il réagit comme un compte a rebours. Vous savez donc dans combien de temps plus précisement vous aurez vos ressources. Et j'ai en plus incluer l'impossibilité de mettre autre chose que des chiffres dans les cases.



                                      Dernier, des derniers problème, c'est celui des heures trop grandes que j'ai énoncé juste au dessus. Plus que ca et mon programme sera terminé (plus une petite surprise pour tout ceux qui m'ont aidé ;) )
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        26 octobre 2006 à 11:31:09

                                        Aller, Svp, juste ce petit problème a résoudre et sera parfait, je ne vous embeterais plus (avec ce programme :D )

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          27 octobre 2006 à 11:20:57

                                          youpi je t'ai pondu LA fonction de tes rêves ! Enfin j'espère pcq sinon je jette l'éponge ^^
                                          Public Function ConvertHeure(h As Double) As String
                                            Dim heure As String, minsec As String
                                            ' partie entière conservée, ça correspond à l'heure
                                            heure = Int(h)
                                            ' conversion au format hh:mm:ss classique
                                            minsec = Format(CDate(h / 24), "hh : mm : ss")
                                            ' concaténation: l'heure + la partie mm:ss convertie
                                            ConvertHeure = heure & " " & Mid(minsec, InStr(minsec, ":"))
                                          End Function

                                          ' utilisation :
                                          Label2.caption = ConvertHeure(h)


                                          edit: comme on en parlait l'autre jour sur msn, la propriété pour les fenetres non dimensionables c'est 'BorderStyle' (tu la met à Fixed...)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            27 octobre 2006 à 19:31:00

                                            Citation : pifou25


                                            edit: comme on en parlait l'autre jour sur msn, la propriété pour les fenetres non dimensionables c'est 'BorderStyle' (tu la met à Fixed...)



                                            Bon bah on à le droit à une nouvelle version :p

                                            Télécharger la nouvelle version

                                            Pour ce qui est de ton code source, je sui en train de le mettre dans le code source de mon programme.

                                            Merci, je vous tiens au courant.

                                            La version finale de mon programme est pour trèèèès bientôt (comme ma conclusion avec une certaine personne :-° )
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            [Visual Basic 6.0] - Heure...

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown