Besoin d'aide pour un projet

Jamroller Messages postés 13 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 24 mars 2013 - 13 mai 2011 à 15:04
Jamroller Messages postés 13 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 24 mars 2013 - 14 mai 2011 à 07:51
Bonjour,
J'ai un projet de programmation en VB6 et j'ai vraiment bien des problèmes à le réussir, je suis débutant.

Le programme doit aller prendre dans un document texte des prix et le nombre de calories, en valeure indexées lorsqu'on l'ouvre. Dans le programme il y a plusieurs boutons d'options, quand on clic dessus une inputbox doit apparaître pour demander la quantité qu'on veut prendre (C'est un programme de restaurant) et ensuite calculer le prix puis les calories. C'est un projet pour un cour, je ne sais pas du tout comment je peux le faire puique nous venons tout juste de commencer, nous avons droit à toute l'aide disponible.

Mon problème actuel est d'aller chercher le nombre de calories dans le fichiers (Le fichier comporte la liste de prix, puis de calories), je dois donc prendre les deux en même temps dans 2 variables différentes, pour afficher le prix total et le nombre de calories total.

Je ne sais pas si vous comprenez, mais bon, voici mon code dans le form_load pour aller chercher les variables... (Et ça ne marche pas pour les calories, mais ça marche pour le prix)
Private Sub Form_Load()
X = 0
Y = 0
'On va a la gestion des erreur
On Error GoTo gesterreur
'Faire apparraitre la fenetre d'ouverture des fichiers
dlgouvrir.ShowOpen
Open dlgouvrir.FileName For Input As #1

'On met les données du document dans une variable
Do Until X = 24
    Input #1, sngNombre(X)
    If X <= 12 Then
        lblPrix(X) = sngNombre(X)
    Else
        'lblCal(Y) = sngNombre(X)
        'Y = Y + 1
    End If
    X = X + 1
Loop
Exit Sub
'Gestion des erreur
gesterreur:
    MsgBox ("Vous devez choisir un fichier")
    Call Form_Load
Close #1
End Sub


Voici également le fichier à ouvrir.
8.95, 11.25, 13.75, 14.95, 9.65, 8.55
3.95, 4.25, 2.75, 2.75
4.25, 6.25
1150.00, 850.00, 2050.00, 905.00, 785.00, 690.00
10.00, 45.00, 15.00, 110.00
635.00, 1265.00


J'ai également un autre problème, mais je vais attendre de régler celui ci avant.

Merci si quelqu'un veut bien m'aider :)

6 réponses

Jamroller Messages postés 13 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 24 mars 2013
13 mai 2011 à 15:31
Ah non, j'ai trouvé juste en y pensant un peu! J'avais un problème avec mon label, maintenant ça marche je peux aller chercher le prix et les calories sans problèmeé.

Mais malheureusement, mon deuxième problème je ne sais vraiment pas comment l'arranger, nous n'avons jamais utilisé de Input Box et nous devons en faire une.

intPrix(X) = InputBox("Veuillez choisir une quantité", "Quantité")
lblSousTotal1 = intPrix(X) * sngNombre(X)

Cette Input Box sert à choisir le nombre voulu pour le repas (par exemple une pizza), puis il doit l'ajouter au prix total qui est dans le label : lblSousTotal1

Quand je fais un test, j'obtiens l'erreur "Indice en dehors de plage", je ne sais pas comment le résoudre.

Si quelqu'un voudrait bien m'aider avec ceci j'apprécierais beaucoup.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
13 mai 2011 à 15:37
bonjour,

La valeur de retour d'un inputbox est un string, cela n'a donc pas de sens de multiplier une chaine, il te faut la convertir avec Cint.


L'expérience, c'est une connerie par jour, mais jamais la même..
0
Jamroller Messages postés 13 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 24 mars 2013
13 mai 2011 à 16:24
Ah, merci bien ça fonctionne maintenant, je vais garder ce sujet si jamais j'ai d'autres problèmes avec mon projet.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 mai 2011 à 17:17
J'ai vu que tu avais solutionné ton premier problème, mais je me demande comment, vu le nombre de difficultés.
J'avais préparé ça. Ça me ferait suer de le jeter.

Salut

D'après l'extrait de fichier montré, on voit (devine) que les prix sont les 12 premières valeurs et les calories, les douze suivantes.
Déjà, ce fichier est très mal foutu et peu pratique.
Vois s'il est possible de modifier l'ordre des données. Il serait en effet plus pratique de lire un prix, puis une calorie et recommencer prix-calorie jusqu'à ce qu'il n'y ait plus de données à lire.
Parce là, tu es obligé de dire dans ton programme qu'il y a 6 données. Le jour où tu vas vouloir en ajouter une 7ème, tu vas rigoler pour modifier ton programme !
"très mal foutu et peu pratique" : je répète et confirme.
Tes 6 premières données de prix sont séparées par des virgules, mais la 7ème se trouve à la ligne et n'a pas de séparateur virgule. Idem pour les suivantes.
C'est complètement con, passe moi le mot, parce que cela va t'obliger à faire du bidouillage de chaine, et le jour où le format du fichier change, tu peux jeter le programme avec !

Ensuite, d'après ton code, l'indexation de ton tableau commence à 0. Si tu dois lire 12 valeurs, il faut t'arrêter à 11, c'est à dire de 0 à 11 = 12 valeurs.
Par contre, la limite supérieure de ta boucle Until est 24, ce qui est correct puisque tu incrémentes ton X à la fin et qu'il n'y aura plus de données à lire après avoir lu la n°23 (de 0 à 23), donc le Until ne répètera pas la boucle. Ok.

Donc, il te faut lire la ligne entière et sous forme de texte, de toute façon.
Tu pourrais les lire avec des Single si le fichier avait été enregistré en Binaire, mais là, les chiffres sont un texte comme un autre.

    Dim sTemp           As String
    Dim r               As Long
    Dim ff              As Integer
    Dim mIndex          As Integer
    Dim aTemp()         As String
    
    Dim aPoids(0 To 11) As Single
    Dim aCalor(0 To 11) As Single
    
    ff = FreeFile
    Open monFichier For Input As #ff
        mIndex = 0
        Do While Not EOF(ff)
            ' Lit toute la ligne
            Line Input #ff, sTemp
            ' Eclate la ligne en données
            aTemp = Split(sTemp, ",", , vbTextCompare)
            For r = 0 To UBound(aTemp)
                aTemp(r) = Trim$(aTemp(r))
                If mIndex <= UBound(aPoids) Then
                    ' On est toujours dans les poids
                    ' Récupère les données
                    On Error Resume Next
                    aPoids(mIndex) = CSng(aTemp(r))
                    If Err.Number <> 0 Then
                        MsgBox "La donnée lue n'est pas un chiffre : " & aTemp(r)
                        On Error GoTo 0
                        Exit Do
                    End If
                    On Error GoTo 0
                Else
                    ' On n'est plus dans les poids, mais dans les calories
                    ' Récupère les données
                    On Error Resume Next
                    aCalor(mIndex) = CSng(Trim$(aTemp(r - UBound(aPoids) - 1)))
                    If Err.Number <> 0 Then
                        MsgBox "La donnée lue n'est pas un chiffre : " & aTemp(r - UBound(aPoids) - 1)
                        On Error GoTo 0
                        Exit Do
                    End If
                    On Error GoTo 0
                End If
                ' Notre index augmente
                mIndex = mIndex + 1
            Next r
            DoEvents
            If mIndex > UBound(aPoids) + UBound(aCalor) + 1 Then
                ' Plus la peine de lire, on ne saurait pas où les ranger (précaution)
                Exit Do
            End If
        Loop
        ' Si on est là, c'est que tout s'est bien passé
        mIndex = -1
    Close #ff

    If mIndex <> -1 Then
        ' Ici, que faire en cas d'erreur de lecture/conversion
        
    End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 mai 2011 à 17:18
Oups
Gestion du mIndex = -1 à la fin ne marchera pas.
A supprimer
0
Jamroller Messages postés 13 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 24 mars 2013
14 mai 2011 à 07:51
Bonjour, je ne peut pas lire tout le message ce soir, mais quant à ta question de prendre les 12 prix puis les 12 calories, c'est une des conditions données par notre professeur, il veut qu'on utilise le fichier tel qu'il nous l'a donné :/
0
Rejoignez-nous