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.NET Discussion :

Divers Calcul dans une classe [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut Divers Calcul dans une classe
    Bonjour à tous,

    je rencontre un gros soucis ...

    Je souhaite faire plusieurs calcul en entrant juste une donnée ...

    Voici ma classe :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Public Class pavs
     
     
        Public Nombre_Habitant_Logement As Single = 4.5
        Public prod_journalier_déchet_Ord_men As Single = 6.5
        Public prod_journalier_déchet_PCA As Integer = 2
        Public prod_journalier_déchet_verre As Integer = 1
        Public Marge_jour_Ferie As Integer = 20
        Public freq_collecte As Integer = 1
        Public vol_borne_verre As Integer = 3000
        Public vol_borne_ord_PCA As Integer = 5000
     
     
        ' Variable vide
        Public Nombre_Logements As Integer
        Public Nb_pavs_ord As Double
        Public nb_pavs_PCA As Double
        Public nb_pavs_verre As Double
        Public NombretotalHab As Single
        Public Vol_prod_ord As Double
        Public Vol_prod_PCA As Double
        Public Vol_prod_verre As Double
     
     
        'Tous les calculs a faire
     
        Public Function Calcnbhabtotal(ByVal nblgt As Integer) As Single 'Calcule le nombre total d'habitant
            Return nblgt * Nombre_Habitant_Logement
        End Function
     
        Public Function Calcvolprodord(ByVal nbtotalhb As Single) As Double ' Calcule la production les ordures ménagés total
            Return Math.Ceiling(prod_journalier_déchet_Ord_men * (1 + Marge_jour_Ferie / 100) * 7 * nbtotalhb) / freq_collecte
        End Function
     
        Public Function CalcvolprodPCA(ByVal nbtotalhb As Single) As Double ' Calcule la production les PCA total
            Return Math.Ceiling(prod_journalier_déchet_PCA * (1 + Marge_jour_Ferie / 100) * 7 * nbtotalhb) / freq_collecte
        End Function
     
        Public Function Calcvolprodverre(ByVal nbtotalhb As Single) As Double ' Calcule la production de verre total
            Return Math.Ceiling(prod_journalier_déchet_PCA * (1 + Marge_jour_Ferie / 100) * 7 * nbtotalhb) / freq_collecte
        End Function
     
        Public Function Calcnbpavord() As Double ' Calcule le nombre de PAVs pour les ordures ménagés
            Return Math.Ceiling(Vol_prod_ord / Vol_prod_ord)
        End Function
     
        Public Function CalcnbPCA() As Double ' Calcule le nombre de PAVs pour le PCA
            Return Math.Ceiling(Vol_prod_PCA / vol_borne_ord_PCA)
        End Function
     
        Public Function Calcnbverre() As Double ' Calcule le nombre de PAVs pour le verre
            Return Math.Ceiling(Vol_prod_verre / vol_borne_verre)
        End Function
     
    End Class
    et ma form

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Imports Clsspavs
    Public Class DimPAVs
        Dim Pavs As New Clsspavs.pavs
        Private Sub Button_Calculer_Click(sender As Object, e As EventArgs) Handles Button_Calculer.Click
            Lestextboxs() ' Affiche les résultat des toutes les textboxs
        End Sub
     
        Private Sub Lestextboxs()
     
            Pavs.Nombre_Logements = CInt(TextBox_Nblgts1.Text) ' Récupere le nombre de longements
            'TextBox_Nblgts1.Text = TextBox_Nblgts1.Text & " Lgts" 'Affiche le nombre de logements
            TextBox_Nblgts2.Text = Pavs.Nombre_Logements & " Lgts" 'Affiche le nombre de logements
            TextBox_Nblgts3.Text = Pavs.Nombre_Logements & " Lgts" 'Affiche le nombre de logements
     
            TextBoxNbhbLgts1.Text = Pavs.Nombre_Habitant_Logement & " Hbts" 'Affiche le nombre d'habitants par logements
            TextBoxNbhbLgts2.Text = Pavs.Nombre_Habitant_Logement & " Hbts" 'Affiche le nombre d'habitants par logements
            TextBoxNbhbLgts3.Text = Pavs.Nombre_Habitant_Logement & " Hbts" 'Affiche le nombre d'habitants par logements
     
            TextBox_NbtlHbts1.Text = CStr(Pavs.Calcnbhabtotal(Pavs.Nombre_Logements)) & " Hbts" 'Affiche le nombre d'habitants
            TextBox_NbtlHbts2.Text = CStr(Pavs.Calcnbhabtotal(Pavs.Nombre_Logements)) & " Hbts" 'Affiche le nombre d'habitants
            TextBox_NbtlHbts3.Text = CStr(Pavs.Calcnbhabtotal(Pavs.Nombre_Logements)) & " Hbts" 'Affiche le nombre d'habitants
     
            TextBox_PdctDchHb1.Text = CStr(Pavs.prod_journalier_déchet_Ord_men) & " Litres" 'Affiche la production d'ordure ménagé a la journée
            TextBox_PdctDchHb2.Text = CStr(Pavs.prod_journalier_déchet_PCA) & " Litres" 'Affiche la production de PCA a la journée
            TextBox_PdctDchHb3.Text = CStr(Pavs.prod_journalier_déchet_verre) & " Litres" 'Affiche la production de verre a la journée
     
            TextBox_MgJrFr1.Text = CStr(Pavs.Marge_jour_Ferie) & "%" ' Affiche la marge des jours ferriés en ordures ménagers
            TextBox_MgJrFr2.Text = CStr(Pavs.Marge_jour_Ferie) & "%" ' Affiche la marge des jours ferriés en PCA
            TextBox_MgJrFr3.Text = CStr(Pavs.Marge_jour_Ferie) & "%" ' Affiche la marge des jours ferriés en verres
     
            TextBox_JrCltHbd1.Text = CStr(Pavs.freq_collecte) & " par semaine" ' Affiche la fréquence hebdo en ordures ménagers
            TextBox_JrCltHbd2.Text = CStr(Pavs.freq_collecte) & " par semaine" ' Affiche la fréquence hebdo en PCA
            TextBox_JrCltHbd3.Text = CStr(Pavs.freq_collecte) & " par semaine" ' Affiche la fréquence hebdo en verres
     
            TextBox_VolNc1.Text = Pavs.Calcvolprodord(Pavs.Calcnbhabtotal(Pavs.Nombre_Logements)) ' Affiche le litrage hebdo de tous les hbts en ordures ménagers
            'TextBox_VolNc2.Text ' Affiche le litrage hebdo de tous les hbts en PCA
            'TextBox_VolNc1.Text' Affiche le litrage hebdo de tous les hbts en overre
     
            TextBox_VolBrnPrec1.Text = CStr(Pavs.vol_borne_ord_PCA) & " litres" ' Affiche le litrage d'un conteneurs max en ordures ménagers
            TextBox_VolBrnPrec2.Text = CStr(Pavs.vol_borne_ord_PCA) & " litres" ' Affiche le litrage d'un conteneurs max en PCA
            TextBox_VolBrnPrec3.Text = CStr(Pavs.vol_borne_verre) & " litres" ' Affiche le litrage d'un conteneurs max en verres
     
            TextBox_Nbcont1.Text = CStr(Pavs.Nb_pavs_ord) ' Affiche le nombre de PAVS pour ordure ménagers
            TextBox_Nbcont2.Text = CStr(Pavs.nb_pavs_PCA) ' Affiche le nombre de PAVS pour PCA
            TextBox_Nbcont3.Text = CStr(Pavs.nb_pavs_verre) ' Affiche le nombre de PAVS pour verres
     
        End Sub
     
        Private Sub Button_Femer_Click(sender As Object, e As EventArgs) Handles Button_Femer.Click
            Me.Close()
            Page_SemOutils.Show()
        End Sub
    End Class
    Pour faire simple, je rentre le nombre de logement dans ma form. Celle ci est récupéré dans ma classe "Class pavs"

    elle fait un premier calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function Calcnbhabtotal(ByVal nblgt As Integer) As Single 'Calcule le nombre total d'habitant
            Return nblgt * Nombre_Habitant_Logement
        End Function
    pour l'instant tout va bien.

    A partir de maintenant tout se complique : Ayant récupérer le nombre d'habitant total, je souhaite calculer en litage la produire d'ordure ménager a la journée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function Calcvolprodord(ByVal nbtotalhb As Single) As Double ' Calcule la production les ordures ménagés total
            Return Math.Ceiling(prod_journalier_déchet_Ord_men * (1 + Marge_jour_Ferie / 100) * 7 * nbtotalhb) / freq_collecte
        End Function
    J'ai fait comme cela pour faire le calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox_VolNc1.Text = Pavs.Calcvolprodord(Pavs.Calcnbhabtotal(Pavs.Nombre_Logements))
    Ce qui veux dire que je lance le calcul de production mais juste avant il recalcule une deuxième fois le nombre total d'habitant...

    y a t'il un moyen d'éviter ceci ? calculer 2 fois la meme chose?

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    SAlut

    et créer une autre fonction qui prend le nombre de logements en param et qui fait le calcul comme une grande directement ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Personnellement, je suis tombé amoureux des accesseurs plutôt que d'utiliser des méthodes sans paramètres !

    Ca rendra votre code plus clair.

    Aussi les données constantes devraient être déclarées comme telles.
    Et les "nombres magiques" remplacés par des constantes explicites !

    Un truc du genre :
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Property Nbhabtotal() As Single
       Get
            Return Nombre_Logements * Nombre_Habitant_Logement
       End Get
    End Property
     
    Public Property Volprodord() As Double
       Get
          Return Math.Ceiling(prod_journalier_déchet_Ord_men * (1 + Marge_jour_Ferie / 100) * 7 * Nbhabtotal) / freq_collecte
       End Get
    End Property

    Puis :

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Pavs.Nombre_Logements = CInt(TextBox_Nblgts1.Text)
     
    ' ...
     
    TextBox_VolNc1.Text = Pavs.Volprodord
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre du Club
    Homme Profil pro
    Dessinateur vrd
    Inscrit en
    Janvier 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Dessinateur vrd
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2015
    Messages : 46
    Points : 53
    Points
    53
    Par défaut
    Sa marche très bien !! Merci.

    je ne connaissais pas le GET / SET

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

Discussions similaires

  1. Lancer un calcul en tâche de fond dans une classe PyQt4
    Par Takezoshi dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 08/05/2016, 16h23
  2. Réponses: 8
    Dernier message: 09/07/2005, 23h10
  3. Thread dans une classe ?
    Par Sephi dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 07/03/2004, 18h16
  4. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42
  5. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 10h31

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