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 :

adapter formules et calculs


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut adapter formules et calculs
    Bonjour, je travaille actuellement sur la création d'un logiciel d'hydraulique se basant sur la formule de Caquot. Je veux justement appliquer cette formule dans le cas de deux canalisations en série. Dans une de mes formes, j'ai créé un DataGridView1 que je remplie (ValeurST, ValeurL, etc) je le fait pour plusieurs lignes de tableaux (chaque ligne correspond à une branche du réseau de canalisations). Dans une autre forme (Form4), j'ai créé 2 combobox (cbx_branches1 et 2), me permettant de choisir les deux branches que je veux mettre en série. Pour l'instant j'ai réussi à le faire pour 2 branches, les branches 1 et 2.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Public Class Form4
        Private Sub Form4_Load1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            cbx_branches1.Items.Add("branche 1")
            cbx_branches1.Items.Add("branche 2")
            cbx_branches1.Items.Add("branche 3")
            cbx_branches1.Items.Add("branche 4")
            cbx_branches1.Items.Add("branche 5")
            cbx_branches1.Items.Add("branche 6")
            cbx_branches1.Items.Add("branche 7")
            cbx_branches1.Items.Add("branche 8")
            cbx_branches1.Items.Add("branche 9")
            cbx_branches1.Items.Add("branche 10")
            cbx_branches1.Items.Add("branche 11")
            cbx_branches1.Items.Add("branche 12")
            cbx_branches1.Items.Add("branche 13")
            cbx_branches1.Items.Add("branche 14")
            cbx_branches1.Items.Add("branche 15")
            cbx_branches1.Items.Add("branche 16")
            cbx_branches1.Items.Add("branche 17")
            cbx_branches1.Items.Add("branche 18")
            cbx_branches1.Items.Add("branche 19")
            cbx_branches1.Items.Add("branche 20")
        End Sub
     
        Private Sub Form4_Load2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            cbx_branches2.Items.Add("branche 1")
            cbx_branches2.Items.Add("branche 2")
            cbx_branches2.Items.Add("branche 3")
            cbx_branches2.Items.Add("branche 4")
            cbx_branches2.Items.Add("branche 5")
            cbx_branches2.Items.Add("branche 6")
            cbx_branches2.Items.Add("branche 7")
            cbx_branches2.Items.Add("branche 8")
            cbx_branches2.Items.Add("branche 9")
            cbx_branches2.Items.Add("branche 10")
            cbx_branches2.Items.Add("branche 11")
            cbx_branches2.Items.Add("branche 12")
            cbx_branches2.Items.Add("branche 13")
            cbx_branches2.Items.Add("branche 14")
            cbx_branches2.Items.Add("branche 15")
            cbx_branches2.Items.Add("branche 16")
            cbx_branches2.Items.Add("branche 17")
            cbx_branches2.Items.Add("branche 18")
            cbx_branches2.Items.Add("branche 19")
            cbx_branches2.Items.Add("branche 20")
        End Sub
     
        Private Sub cbx_branches1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_branches1.SelectedIndexChanged
            If cbx_branches1.Text = "branche 1" Then
                Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Surfacetotale").Value)
                Dim ValeurL1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("longueur").Value)
                Dim ValeurCI1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Coefficientimpermeabilisation").Value)
                Dim ValeurP1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("pente").Value)
            End If
            If cbx_branches1.Text = "branche 2" Then
                Dim ValeurST2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("Surfacetotale").Value)
                Dim ValeurL2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("longueur").Value)
                Dim ValeurCI2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("Coefficientimpermeabilisation").Value)
                Dim ValeurP2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("pente").Value)
            End If
                End Sub
     
        Private Sub but_calcser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles but_calcser.Click
            Me.LabelQserie.Text = "Qserie = " & CalculCaquotSerie().ToString("0.0#") & " l/s"
        End Sub
     
        Function CalculCaquotSerie() As Double
            Dim a2 As Double = Convert.ToDouble(Form3.Labela2.Text)
            Dim b2 As Double = Convert.ToDouble(Form3.Labelb2.Text)
            Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Surfacetotale").Value)
            Dim ValeurST2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("Surfacetotale").Value)
            Dim ValeurL1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("longueur").Value)
            Dim ValeurL2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("longueur").Value)
            Dim ValeurCI1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Coefficientimpermeabilisation").Value)
            Dim ValeurCI2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("Coefficientimpermeabilisation").Value)
                   Dim ValeurP1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("pente").Value)
            Dim ValeurP2 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(1).Cells("pente").Value)
            Dim ValeurSTserie As Double
            Dim ValeurLserie As Double
            Dim ValeurCIserie As Double
            Dim ValeurPserie As Double
     
            ValeurSTserie = ValeurST1 + ValeurST2
     
            ValeurLserie = ValeurL1 + ValeurL2
     
            ValeurCIserie = (ValeurCI1 * ValeurST1 + ValeurCI2 * ValeurST2) / (ValeurST1 + ValeurST2)
     
            ValeurPserie = ((ValeurL1 + ValeurL2) / ((ValeurL1 / (ValeurP1) ^ (1 / 2)) + (ValeurL2 / (ValeurP2) ^ (1 / 2)))) ^ 2
     
     
            Return ((((a2 / 60) / 6.6) * (0.28 * (ValeurLserie / 100) ^ 0.84 * (ValeurSTserie / 10000) ^ -0.42) ^ -b2) ^ (1 / (1 - 0.287 * b2))) * _
                   (ValeurCIserie ^ (1 / (1 - 0.287 * b2))) * _
                   ((ValeurPserie / 100) ^ (0.41 * b2 / (1 - 0.287 * b2))) * _
                   ((ValeurSTserie / 10000) ^ ((0.95 - 0.507 * b2) / (1 - 0.287 * b2))) * 1000
        End Function
     
    End Class

    Mais j'aimerais adapter ce calcul à l'ensemble du système et ainsi pouvoir le faire avec toutes les branches existantes (3, 4, 5, etc). Mais je ne vois pas comment faire sans que cela soit très long.

    Pouvez-vous m'aider?
    Merci.

    PS: desolé pour le titre, c'est pas très évident à trouver

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,


    Voici dans un premier temps une simplification du remplissage des combobox
    L'utilisation de classe permet de simplifier

    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
        Public Class Form4
     
        Const K_NB_BRANCHES As Integer = 20
     
        ' Pour une utilisation élaborée des comboBox 
        Public Class Branche
            Public Property Valeur As Integer       ' Valeur récupérable : dans notre cas représente l'index  (Note: est défini en entier pour nos besoins; mais pourrait être défini de type string dans d'autres cas de figures) 
            Public Property BrancheNum As String    ' Element d'affichage pour l'utilisateur
            Sub New(ByVal sVal As Integer, ByVal sAff As String)
                Me.Valeur = sVal
                Me.BrancheNum = sAff
            End Sub
        End Class
     
        Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Call RempliCboBranche(cbx_branches1, K_NB_BRANCHES)
            Call RempliCboBranche(cbx_branches2, K_NB_BRANCHES)
     
        End Sub
     
        Private Sub RempliCboBranche(ByVal cboBranches As ComboBox, ByVal iNbBranches As Integer)
            ' définition d'une liste de branches
            Dim Branches As New List(Of Branche)
     
            ' ajout des branches
            For i = 1 To iNbBranches
                Branches.Add(New Branche(i - 1, "branche " & i.ToString)) ' -1 pour obtenir la valeur directement utilisable dans le datagridview
            Next
     
            ' lien
            cboBranches.DataSource = Branches
            cboBranches.DisplayMember = "BrancheNum"
            cboBranches.ValueMember = "Valeur"
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox(cbx_branches1.SelectedValue)        ' visualisation de la valeur de l'élément sélectionné 
        End Sub
     
    ... 
     
    End Class
    Quelques points ont besoin d'être éclaircis.
    Le nombre de branches est-il fixe ? Le nombre de combo ?
    Dans le calcul, elles seront toutes systèmatiquement utilisées ? Ou existera-t-il la possibilité de n'utiliser que quelques-une ?

    Je ne vois pas l'intérêt de "cbx_branches1_SelectedIndexChanged" puisque les variables sont définies en local. et ne sont pas exploitées

    A quoi servent les combobox puisque dans "CalculCaquotSerie" le calcul est fait en direct avec le datagridview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Surfacetotale").Value)
    ...
    Peut-être souhaitiez-vous faire le calcul de "ValeurST1" avec le numéro de la branche sélectionnée dans le combobox cbx_branches1.
    Ce qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(cbx_branches1.SelectedValue).Cells("Surfacetotale").Value)
    ...
    Il faut réfléchir sur la structuration de vos variables de travail "ValeurST", "ValeurL", "ValeurCI", "ValeurP" afin de faire les calculs. (tableau peut-être) Et quel est le lien avec les différents combobox?

    PS:Si le sujet "incrémentation boucle while" est opérationnel merci de le marquer comme "Résolu"

    A+ , Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    Il n'y a que 2 combobox permettant de selectionner les deux branches qu'on veut mettre en série:

    exemple:

    dans la combobox1 je choisis la branche 3 et dans la combobox2 je choisis la branche 5, il faut donc que j'arrive à faire ce calcul pour toutes les branches possibles.

    On n'utilisera à chaque calcul que deux branches, la personne devra refaire la manip à chaque fois, sachant que parfois, le résultat obtenu sera réutilisé et attribué à une nouvelle branche qu'on appellera branche35 (dans le cas des branches 3 et 5) qu'on pourra réutiliser.

    En effet il n'y a aucun interet à utiliser:
    "cbx_branches1_SelectedIndexChanged", c'est une erreur de ma part.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    le remplissage des combobox foctionne très bien, par contre je ne comprend pas ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox(cbx_branches1.SelectedValue)        ' visualisation de la valeur de l'élément sélectionné 
        End Sub
    je n'en vois pas l'interet. Ou alors je n'est pas du tout compris.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    J'ai un nouveau problème, dans ma form3 j'ai créé un DataGridView1 dans lequel je rentre le numéro de la branche, ValeurST, ValeurL, ValeurP et ValeurCI. Dans ma Form4 j'utilise les lignes du tableaux comme référence afin d'utiliser ces différentes valeurs.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Surfacetotale").Value)
    Le problème, c'est que dans ce cas je suis obligé de faire correspondre la branche 1 avec la ligne 1, la branche 2 avec la ligne 2. Mais j'aimerais que l'utilisateur puisse être plus libre et puisse mettre la branche 12 (qui serait par exemple le résultat en série des branches 1 et 2 ) dans la ligne 3 du DataGridView1.

    Je ne vois pas du tout comment il faudrait faire. Mais la personne qui supervise mon projet me l'impose pour que ce soit plus simple et surtout plus pratique car un réseau d'assainissement peut contenir de nombreuses canalisations.

    Je ne sais pas si je suis suffisament clair.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par babass-77 Voir le message
    J'ai un nouveau problème, dans ma form3 j'ai créé un DataGridView1 dans lequel je rentre le numéro de la branche, ValeurST, ValeurL, ValeurP et ValeurCI. Dans ma Form4 j'utilise les lignes du tableaux comme référence afin d'utiliser ces différentes valeurs.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ValeurST1 As Double = Convert.ToDouble(Form3.DataGridView1.Rows(0).Cells("Surfacetotale").Value)
    Le problème, c'est que dans ce cas je suis obligé de faire correspondre la branche 1 avec la ligne 1, la branche 2 avec la ligne 2. Mais j'aimerais que l'utilisateur puisse être plus libre et puisse mettre la branche 12 (qui serait par exemple le résultat en série des branches 1 et 2 ) dans la ligne 3 du DataGridView1.

    Je ne vois pas du tout comment il faudrait faire. Mais la personne qui supervise mon projet me l'impose pour que ce soit plus simple et surtout plus pratique car un réseau d'assainissement peut contenir de nombreuses canalisations.

    Je ne sais pas si je suis suffisament clair.
    Vu que "cbx_branches1" vous permet de récupérer la ligne de valeur a traiter (de 1 à 20) si vous insérez des lignes plus rien ne correspondra.

    Il faut séparer toutes les données de bases ainsi que les méthodes qui effectuerons vos calcul et la partie affichage. (Le datagridview ne servant que d'affichage.)
    L'utilisation d'une classe est une solution pour résoudre ce problème.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par babass-77 Voir le message
    ... dans ma form3 j'ai créé un DataGridView1 dans lequel je rentre le numéro de la branche, ValeurST, ValeurL, ValeurP et ValeurCI. Dans ma Form4 j'utilise les lignes du tableaux comme référence afin d'utiliser ces différentes valeurs.

    Citation Envoyé par babass-77 Voir le message
    Le problème c(est que je ne vois pas du tout comment faire pour faire référence à ces cases de DataGridView
    Il faut rechercher le numéro de la branche saisie par l'utilisateur (txb_branches1) dans le datagridview1 pour connaître la ligne a traiter.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par babass-77 Voir le message
    le remplissage des combobox foctionne très bien, par contre je ne comprend pas ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox(cbx_branches1.SelectedValue)        ' visualisation de la valeur de l'élément sélectionné 
        End Sub
    je n'en vois pas l'interet. Ou alors je n'est pas du tout compris.
    C'est juste pour voir le fonctionnement.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/01/2006, 22h13
  2. [VBA-E] Copier une formule de calcul dans toute la ligne
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2005, 18h18
  3. Réponses: 1
    Dernier message: 05/09/2005, 19h18
  4. formule de calcul du TRI avec PL/SQL
    Par mongilotti dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 30/07/2005, 20h23
  5. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12

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