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 :

Faire une boucle pour sommer des textbox


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Faire une boucle pour sommer des textbox
    Bonjour,

    Je voudrais faire la somme de plusieurs textbox (nommé Cel avec un indice 1 à 100 ex : Cel001, Cel002 à Cel100).

    J'ai essayé de faire des boucles types, mais j'ai un bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim somme As Decimal
    Dim cellule As String
     
     
                For i = 1 To 100
     
                    cellule = "Cel" & CStr(i)
                    somme = somme + cellule.Text
     
     
                Next
    je bloque...

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonsoir,

    vous vous rendez compte de ce que vous essayer de faire là? Vous essayez d’additionner une variable de type string avec une variable de type decimal.

    Avez-vous déjà placé les 1000 textBox sur la form? Si oui comment?

    P.S. : c'est aberrant de mettre autant de textBox...

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oui, je sais qu'il y a un problème dans le code d'où ma question.

    J'ai 100 textbox car j'ai des données à rentrer, 5 niveaux, 5 jours et 4 répétitions...c'est pour faire des stats...

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim name As String = "Cel"
     
    For i As Int32 = 1 To 100
     
        if isNumeric(CType(Me.Controls(name + i.ToString), TextBox).Text) then
            somme = somme + decimal(CType(Me.Controls(name + i.ToString), TextBox).Text)
        end if
     
    Next

  5. #5
    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
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par crocket51 Voir le message
    J'ai 100 textbox car j'ai des données à rentrer, 5 niveaux, 5 jours et 4 répétitions...c'est pour faire des stats...
    5 niveaux X 5 jours X 4 répétitions = 100 d'ou ton nombre de TextBox

    Il faut peut être voir s'il est possible de modifier cette fonctionnalité de ton application en quelques chose de plus simple.
    Ne serait-il pas plus judicieux d'effectuer les saisies par journée. (Cela serait moins pénible pour l'utilisateur) Ce qui limiterait le nombre de TextBox à : 5 niveaux X 4 répétitions = 20
    Après saisie de la journée (20 TextBox), vous sauvegardez les données dans une Base de données.

    Au bout des 5 jours, vous pouvez faire une requête sur la BDD pour afficher les stats. (En plus vous pourrez faire des stats sur différentes périodes. 2 semaines, 1 mois, ...)

    Après c'est juste une suggestion.

    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Non, ce n'est pas possible, il s'agit d'une validation de méthode d'analyse.
    Les données doivent être visible dans l'ensemble....

    Merci pour vos réponses

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim name As String = "Cel"
     
    For i As Int32 = 1 To 100
     
        if isNumeric(CType(Me.Controls(name + i.ToString), TextBox).Text) then
            somme = somme + decimal(CType(Me.Controls(name + i.ToString), TextBox).Text)
        end if
     
    Next
    plusieurs détails ; pour respecter le format des noms il faudrait utiliser i.ToString("000") de plus le cast en TextBox est a priori inutile (Control possède la propriété Text) après je suis pas fan du IsNumeric (mais ça c'est un peu plus subjectif) enfin si un Controls(name) renvoie Nothing ça va planter [mais comme on compte déjà sur le nommage des controles pour faire le boulot on est plus à ça près]

    Voici ce qu'on pourrait faire, même si dans l'idéal je serais plutôt de l'avis de rvt [ou au moins utiliser un controle adapté par exemple un DataGridView pour la présentation tabulaire qu'il offre]
    Avantage, ne dépend pas du nom des controles donc réduit les risques d'exception)
    Inconvénient (en l'état) tous les controles concernés doivent être dans le même conteneur et uniquement eux (pour ce type)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim somme1 = Controls.OfType(Of TextBox).
        Sum(Function(tb)
                Dim value As Decimal
                Decimal.TryParse(tb.Text, value)
                Return value
            End Function)
     
    'ou bien (en jouant sur les "side-effect")
    Dim somme2 = Aggregate tb In Controls.OfType(Of TextBox)()
                 Let value = 0D
                 Where Decimal.TryParse(tb.Text, value)
                 Into Sum(value)
    Au pire on peut facilement palier aux "inconvénients", si les noms étaient si importants/discriminants (exemple d'autres Textbox sont dans le même conteneur et ne doivent pas participer) on pourrait toujours ajouter une clause Where avec un Like (souvent négligé ) du style (selon la syntaxe utilisée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .Where(Function(tb) tb.Name Like "Cel###")
     
    'ou bien
    Where tb.Name Like "Cel###"
    Cordialement !

    Edit: Si l'on est absolument persuadé que les entrées sont des nombres (pour la culture courante) on pourrait remplacer les Decimal.TryParse par des Decimal.Parse ce qui allègerait l'écriture.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

Discussions similaires

  1. [PHP 5.0] Faire une boucle pour des noms de variable
    Par lonyc dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2009, 17h19
  2. Faire une Boucle pour lire dans Settings.settinge
    Par totoen dans le forum Windows Forms
    Réponses: 0
    Dernier message: 27/10/2008, 10h44
  3. Faire une boucle pour l'alphabet
    Par El-Diablo- dans le forum Langage
    Réponses: 2
    Dernier message: 08/04/2008, 23h11
  4. réaliser une boucle pour afficher des sources
    Par cloridriks dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2008, 15h21
  5. Réponses: 21
    Dernier message: 23/05/2007, 16h16

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