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 :

Symbole € et format monétaire dans datagridview [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut Symbole € et format monétaire dans datagridview
    Bonjour à tous,

    Afin d'améliorer mon DataGridview je souhaiterai savoir si il est possible d'intégrer automatiquement le symbole € dans ma colonne n°7 "Prix u" et ma colonne n°8 "Total" ?

    Je souhaiterai tout simplement avoir le Format "Monnaie" dans ces 2 colonnes.

    Dans Access je n'ai aucun problème : Mode création -> Type de donnée= Monétaire (je retrouve bien mon format souhaité)

    Mais dans Visual Basic :
    Je séléctionne mon datagridview
    -> "Columns"
    -> je séléctionne de "Prix u"
    -> DefailtCellStyle
    -> Format
    -> Monnaie (C2)

    Mais quand je débogue rien n'est pris en compte je ne retrouve aucun format monaitaire ni le symbole Euros.

    J'ai essayer ceci sans succés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub SetFormatting()
            With Me.DataGridView1
                .Columns("Prix u").DefaultCellStyle.Format = "c"
            End With
     
        End Sub
    ou encore ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            If DataGridView1.Columns(e.ColumnIndex).Name.Equals("Prix u") Then
                If e.Value > 0 Then
                    e.Value = CDec(e.Value).ToString("N2")
                End If
            End If
        End Sub
    Comment pourrais-je procéder pour obtenir cela ??

    Merci beaucoup

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Perso je conserverais le format par défaut dans les propriétés du design et j'appliquerais mon propre format à chaque validation de la cellule.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Private Sub Valider(col As Integer, row As Integer, valeur As Decimal)
            DataGridView1.Item(col, row).Value = FormatMonnaie(valeur)
        End Sub
     
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

  3. #3
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Comment puis-je intègrer ceci dans ma colonne 5 ?
    Merci pour ta réponse

  4. #4
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Je n'arrive pas l'intégrer je ne sais pas trop comment m'y prendre.
    Faut t'il que je le mette dans un évenement spécifique ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Désolé... je déjeunais.
    Formate en Euros les colonnes ayant pour Name "ColonnePrixUnit" et "ColonneTotal" :
    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
     
        Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "ColonnePrixUnit", "ColonneTotal"
                    If e.Value <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(e.Value))
                        Catch ex As Exception
                            e.Value = ""
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

  6. #6
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    bon ap !

    mdevaux62, je n'ai aucun changement malheureusement

    Voici mon code actuel :
    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
    Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "Prix u", "Total"
                    If e.Value <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(e.Value))
                        Catch ex As Exception
                            e.Value = ""
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function FormatMonnaie(ByVal valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

    Pense tu qu'il est possible de passer par les numéro de colonnes ??

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Au niveau du Design (de la création), pour les colonnes concernées, à DefaultSetStyle, ne mets rien dans Format (pas de C2 ou autre... RIEN) et rien dans NullValue.

    Ensuite, ben mon code marche chez moi (fais le test sur une Form à part avec un DataGridView de test).

    Ci-dessous, j'ai ajouté la gestion du séparateur décimal :
    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
        Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "ColonnePrixUnit", "ColonneTotal"
                    If e.Value <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(RectifierSeparateur(e.Value)))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function RectifierSeparateur(valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
     
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

  8. #8
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Effectivement je viens de créer rapidement une datagridview sans bindingsource et cela fonctionne parfaitement.

    Dans mon cas j'importe ma base de donnée en ajoutant un bindingsource et cela ne marche pas je ne comprend pas pourquoi.

    Je remarque aussi que "Prix u" n'est pas reconnu mais si je met "Prix" cela marche :
    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
    Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "Prix", "Total"
                    If e.Value <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(RectifierSeparateur(e.Value)))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function RectifierSeparateur(ByVal valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
     
        Private Function FormatMonnaie(ByVal valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Pour ton premier format, il faut voir le format en import (chaîne ou numérique).
    Faire un point d'arrêt dans la procédure _CellFormatting permettrait aussi d'analyser l'endroit où ça cloche (quitte à ajouter des variables intermédiaires juste pour le test).

    Pour l'histoire du nom de colonne, ça m'étonnait aussi qu'il accepte les espaces...

  10. #10
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Je ne fais que des anneries.... tu as raison !
    Je me suis trompé sur les nom des colonnes en question !

    Voici mon code actuelle :
    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
    Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "PrixUDataGridViewTextBoxColumn", "TotalDataGridViewTextBoxColumn"
                    If e.Value <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(RectifierSeparateur(e.Value)))
                        Catch ex As Exception
                            MessageBox.Show(ex.Message)
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function RectifierSeparateur(ByVal valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
     
        Private Function FormatMonnaie(ByVal valeur As Decimal) As String
            Return String.Format("{0:#.00} €", valeur)
        End Function

    J'ai une erreur : L'opérateur '<>' n'est pas défini pour type 'DBNull' et chaîne

    sur la ligne L'ensemble de mes colonnes sont en datatype= System.String est-ce que cela à une importance ??

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Essaie de remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If e.Value IsNot Nothing Then
    EDIT : A changer aussi dans FormatMonnaie (sinon le 0 avant la virgule n'apparaît pas. Ex : ,23 € au lieu de 0,23€)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:0.00} €", valeur)
        End Function

  12. #12
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Merci pour l'ensemble de tes réponses mdevaux62 car nous approchons du but !!

    je peux maintenant lancer le débogage mais à chaque saisie j'ai les messages suivant :

    -> La conversion de la chaine "" en type 'Decimal' n'est pas valide
    -> La consersion du type 'DBNull' en type 'String' n'est pas valide

    Voici mon code actuel sous tes conseil :
    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
     Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case "PrixUDataGridViewTextBoxColumn", "TotalDataGridViewTextBoxColumn"
                    If e.Value IsNot Nothing Then
                        Try
                            e.Value = FormatMonnaie(CDec(RectifierSeparateur(e.Value)))
                        Catch ex As Exception
                            MessageBox.Show(ex.Message)
                        End Try
                    End If
            End Select
        End Sub
     
        Private Function RectifierSeparateur(ByVal valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
     
        Private Function FormatMonnaie(ByVal valeur As Decimal) As String
            Return String.Format("{0:0.00} €", valeur)
        End Function
    as tu une idée sur la chose ?

    Merci beaucoup

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            Dim nomColonne As String = DataGridView1.Columns(e.ColumnIndex).Name
            Dim contenuCellule As String = CStr(e.Value)
            Select Case nomColonne
                Case "ColonnePrixUnit", "ColonneTotal"
                    If contenuCellule <> "" Then
                        Try
                            e.Value = FormatMonnaie(CDec(RectifierSeparateur(contenuCellule)))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub
    En cas d'erreur, mets un point d'arrêt au niveau du Select Case et examine le contenu de e.value (type, valeur, etc.)

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Bon en fait, en examinant bien le bidule, le code fait boucler l'évènement _CellFormatting.

    DONC, je t'ai fait un mix des 2 sujets récents en travaillant sur l'évènement _CellValueChanged.

    Ca donne ça (le total est calculé + le format monnaie est placé automatiquement). Il faut juste changer le nom des colonnes (en les remplaçant par les tiens)... je croise les doigts.

    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
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If e.ColumnIndex < 0 Or e.RowIndex < 0 Then
                Exit Sub
            End If
            'Obtenir le composant
            Dim grid As DataGridView = DirectCast(sender, DataGridView)
            'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
            Dim colonneQuantite As String = "ColonneQuantite"
            Dim colonnePrixUnit As String = "ColonnePrixUnit"
            Dim colonneTotal As String = "ColonneTotal"
            'Obtenir la cellule et son contenu
            Dim cellule As DataGridViewCell = grid.Item(e.ColumnIndex, e.RowIndex)
            Dim contenuCellule As String = CStr(cellule.Value)
            'En fonction de la colonne où se trouve la cellule
            Dim nomColonne As String = grid.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case colonneQuantite
                    Try
                        'Calculer le total
                        Dim celluleMultiplicande As DataGridViewCell = grid.Item(colonnePrixUnit, e.RowIndex)
                        Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                        If celluleMultiplicande.Value.ToString <> "" Then
                            Try
                                Dim multiplicateur As Decimal = CDec(RectifierSeparateur(contenuCellule))
                                Dim multiplicande As Decimal = CDec(RectifierSeparateur(celluleMultiplicande.Value.ToString))
                                celluleTotal.Value = (multiplicande * multiplicateur).tostring
                            Catch ex As Exception
                                MessageBox.Show(ex.Message)
                            End Try
                        End If
                    Catch ex As Exception
                        '
                    End Try
                Case colonnePrixUnit
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim mutiplicande As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(mutiplicande)
                            'Calculer le total
                            Dim celluleMultiplicateur As DataGridViewCell = grid.Item(colonneQuantite, e.RowIndex)
                            Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                            If celluleMultiplicateur.Value.ToString <> "" Then
                                Try
                                    Dim multiplicateur As Decimal = CDec(RectifierSeparateur(celluleMultiplicateur.Value.ToString))
                                    celluleTotal.Value = (mutiplicande * multiplicateur).ToString
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            End If
                        Catch ex As Exception
                            '
                        End Try
                    End If
                Case colonneTotal
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim total As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(total)
                        Catch ex As Exception
                            '
                        End Try
                    End If
     
            End Select
        End Sub
     
        Private Function RectifierSeparateur(valeur As String) As String
            Dim separateur As String = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
            valeur = valeur.Replace(".", separateur)
            valeur = valeur.Replace(",", separateur)
            Return valeur
        End Function
     
     
        Private Function FormatMonnaie(valeur As Decimal) As String
            Return String.Format("{0:0.00} €", valeur)
        End Function

  15. #15
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Piouffff

    Honnêtement chapeau bas !
    C'est exactement ce que je souhaitai

    Ton code fonctionne à merveille mdevaux62 et je t'en remercie grandement car je n'aurai jamais su faire cela !

    Problème résolu, mille merciiiiiiiiii

  16. #16
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    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
    Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If e.ColumnIndex < 0 Or e.RowIndex < 0 Then
                Exit Sub
            End If
     
            'Obtenir le composant
            Dim grid As DataGridView = DirectCast(sender, DataGridView)
            'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
            Dim colonneQuantite As String = "QuantitéDataGridViewTextBoxColumn"
            Dim colonnePrixUnit As String = "PrixUDataGridViewTextBoxColumn"
            Dim colonneTotal As String = "TotalDataGridViewTextBoxColumn"
            'Obtenir la cellule et son contenu
            Dim cellule As DataGridViewCell = grid.Item(e.ColumnIndex, e.RowIndex)
            Dim contenuCellule As String = CStr(cellule.Value)
     
            'En fonction de la colonne où se trouve la cellule
            Dim nomColonne As String = grid.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case colonneQuantite
                    Try
                        'Calculer le total
                        Dim celluleMultiplicande As DataGridViewCell = grid.Item(colonnePrixUnit, e.RowIndex)
                        Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                        If celluleMultiplicande.Value.ToString <> "" Then
                            Try
                                Dim multiplicateur As Decimal = CDec(RectifierSeparateur(contenuCellule))
                                Dim multiplicande As Decimal = CDec(RectifierSeparateur(celluleMultiplicande.Value.ToString))
                                celluleTotal.Value = (multiplicande * multiplicateur).ToString
                            Catch ex As Exception
                                MessageBox.Show(ex.Message)
                            End Try
                        End If
                    Catch ex As Exception
                        '
                    End Try
                Case colonnePrixUnit
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim mutiplicande As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(mutiplicande)
                            'Calculer le total
                            Dim celluleMultiplicateur As DataGridViewCell = grid.Item(colonneQuantite, e.RowIndex)
                            Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                            If celluleMultiplicateur.Value.ToString <> "" Then
                                Try
                                    Dim multiplicateur As Decimal = CDec(RectifierSeparateur(celluleMultiplicateur.Value.ToString))
                                    celluleTotal.Value = (mutiplicande * multiplicateur).ToString
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            End If
                        Catch ex As Exception
                            '
                        End Try
                    End If
                Case colonneTotal
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim total As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(total)
                            'Calculer la somme de la colonne Total et placer le résultat dans Label1
                            Label1.Text = FormatMonnaie(CalculSomme("TotalDataGridViewTextBoxColumn"))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub
    mdevaux62 je rencontre un petit soucis lors d'une manip :

    Quand je tape des donnée dans n'importe qu'elle cellule et puis que j'efface avec la touche "Retour" du clavier ce que je viens de saisir (il n'y a donc plus rien de saisi dans ma celulle), je valide par la touche "Entrer" ma cellule et bien j'ai une exeption sur la ligne 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim contenuCellule As String = CStr(cellule.Value)
    La conversion du type 'DBNull' en type 'String' n'est pas valide.

    Est-il possible de régler cela ou d'y ajouter un messagebox.show("Veuillez saisir des données") ??

    Merci beaucoup

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Rectifié !

    A noter en passant que le signe Euro a disparu du prix unitaire (c'est pas trop grave) du fait de la gestion des caractères en entrée (voir autre sujet).

    Le problème de ton programme c'est qu'il s'agit d'un ensemble de processus au service d'un TOUT, ton DataGridView lié à base de données, et que ce tout est difficilement gérable à partir d'un patchwork de fonctions et procédures récupérées au coup par coup.

    A un moment, tu seras obligé de mettre tout le code à plat et de la modifier toi-même pour assurer la cohérence de l'ensemble.


    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
     
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If e.ColumnIndex < 0 Or e.RowIndex < 0 Then
                Exit Sub
            End If
            'Récupérer le composant
            Dim grid As DataGridView = DirectCast(sender, DataGridView)
            'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
            Dim colonneQuantite As String = "ColonneQuantite"
            Dim colonnePrixUnit As String = "ColonnePrixUnit"
            Dim colonneTotal As String = "ColonneTotal"
            'Obtenir la cellule et son contenu
            Dim cellule As DataGridViewCell = grid.Item(e.ColumnIndex, e.RowIndex)
            Dim contenuCellule As String
            Try
                contenuCellule = CStr(cellule.Value)
            Catch ex As Exception
                contenuCellule = ""
            End Try
            'En fonction de la colonne où se trouve la cellule
            Dim nomColonne As String = grid.Columns(e.ColumnIndex).Name
            Select Case nomColonne
                Case colonneQuantite
                    If contenuCellule <> "" Then
                        Try
                            'Calculer le total
                            Dim celluleMultiplicande As DataGridViewCell = grid.Item(colonnePrixUnit, e.RowIndex)
                            Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                            If celluleMultiplicande.Value.ToString <> "" Then
                                Try
                                    Dim multiplicateur As Decimal = CDec(RectifierSeparateur(contenuCellule))
                                    Dim multiplicande As Decimal = CDec(RectifierSeparateur(celluleMultiplicande.Value.ToString))
                                    celluleTotal.Value = (multiplicande * multiplicateur).ToString
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            End If
                        Catch ex As Exception
                            '
                        End Try
                    Else
                        'La cellule validée est vide
                        grid.Item(colonneTotal, e.RowIndex).Value = ""
                    End If
                Case colonnePrixUnit
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim mutiplicande As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(mutiplicande)
                            'Calculer le total
                            Dim celluleMultiplicateur As DataGridViewCell = grid.Item(colonneQuantite, e.RowIndex)
                            Dim celluleTotal As DataGridViewCell = grid.Item(colonneTotal, e.RowIndex)
                            If celluleMultiplicateur.Value.ToString <> "" Then
                                Try
                                    Dim multiplicateur As Decimal = CDec(RectifierSeparateur(celluleMultiplicateur.Value.ToString))
                                    celluleTotal.Value = (mutiplicande * multiplicateur).ToString
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            End If
                        Catch ex As Exception
                            '
                        End Try
                    Else
                        'La cellule validée est vide
                        grid.Item(colonneTotal, e.RowIndex).Value = ""
                    End If
                Case colonneTotal
                    If contenuCellule <> "" Then
                        Try
                            'Appliquer le format
                            Dim total As Decimal = CDec(RectifierSeparateur(contenuCellule))
                            cellule.Value = FormatMonnaie(total)
                            'Calculer la somme de la colonne Total et placer le résultat dans Label1
                            Label1.Text = FormatMonnaie(CalculSomme("ColonneTotal"))
                        Catch ex As Exception
                            '
                        End Try
                    End If
            End Select
        End Sub

  18. #18
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    wahou

    Si je maitrisai un peu + la chose j'aurai aussi mis que si la celulle est vide alors contenucellule= ""

    Mais effectivement "il s'agit d'un ensemble de processus au service d'un TOUT" et j'avoue que c'est quand même sacrement compliqué pour une personne novice comme moi

    Celon ton exemple encore une fois tout fonctionne et étrangement, a mon grand bonheur le signe euros de ma colonne "Prix u" n'a pas disparu et est bien traité !


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

Discussions similaires

  1. [D6] Spécifier format monétaire dans Excel ?
    Par Lung dans le forum Delphi
    Réponses: 9
    Dernier message: 03/09/2019, 15h05
  2. Format Monétaire dans un gridView
    Par PatStan17 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/08/2009, 17h37
  3. Réponses: 10
    Dernier message: 22/06/2008, 17h12
  4. format monétaire dans une colone listview ?
    Par sauceaupistou dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/06/2007, 15h24
  5. Format monétaire dans un DBedit
    Par cdlr27 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/04/2004, 16h41

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