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

Windows Forms Discussion :

DataTable - Ajout d'une colonne calculée


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut DataTable - Ajout d'une colonne calculée
    Bonjour à tous!!
    ceci est mon premier message et ça commence bien!!

    Voila en fait je suis sous vs 2005 et je crée une application winform.

    J'ai creer une fonction afin de me calculer le nombre de couleurs sur plusieurs champs sachant qu'ils sont tous typé string :

    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    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
    Public Function FctCalcNbCoul(ByVal XRECT1 As String, ByVal XRECT2 As String, ByVal XRECT3 As String, ByVal XRECT4 As String, ByVal XRECT5 As String, ByVal XRECT6 As String, ByVal XVERS1 As String, ByVal XVERS2 As String, ByVal XFONDCHQ As String) As Integer
     
            Dim NbCoul As Integer
            Dim cpt As Integer
            cpt = 0
     
            If XRECT1 <> " " Then    '''j'ajoute 1 au compteur si champ pas vide   
                cpt = cpt + 1
                If XRECT2 <> " " Then
                    cpt = cpt + 1
                    If XRECT3 <> " " Then
                        cpt = cpt + 1
                        If XRECT4 <> " " Then
                            cpt = cpt + 1
                            If XRECT5 <> " " Then
                                cpt = cpt + 1
                                If XRECT6 <> " " Then
                                    cpt = cpt + 1
                                    If XVERS1 <> " " Then
                                        cpt = cpt + 1
                                        If XVERS2 <> " " Then
                                            cpt = cpt + 1
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
     
            XFONDCHQ = XFONDCHQ.Remove(0, 3)
            XFONDCHQ = XFONDCHQ.Remove(5, 9)
     
            NbCoul = CInt(XFONDCHQ) + cpt
     
            Return NbCoul
     
        End Function
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    ensuite j'ajoute une nouvelle colonne à ma datatable et j'utilise la fonction de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTable.Columns.Add("Nb Couleur", Type.GetType("System.Int32"), "FctCalcNbCoul(XRECT1_0, XRECT2_0, XRECT3_0, XRECT4_0, XRECT5_0, XRECT6_0, XVERS1_0, XVERS2_0, XFONDCHQ_0)")
    Mais ô problème de mer noire un message d'erreur trop cool apparait :
    ----------------
    L'expression contient un appel de fonction non défini FctCalcNbCoul()
    ---------------

    Merci d'avance pour votre aide!

  2. #2
    Membre actif Avatar de yroubag
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 224
    Points
    224
    Par défaut
    Salut et bienvenue.

    L'expression (3e param) doit être une expression de calcul de type SQL. ex: une colonne "Total" dont l'expression va être "prix * quantite", où [prix] et [quatite] sont des colonnes de la requête.
    http://msdn.microsoft.com/en-us/library/632cdz7z.aspx

    Pour ton problème, tu es mieux de créer une colonne vide, sans expression et ensuite de boucler sur chaque Row et affecter ta valeur obtenue de ta fonction dans celle-ci.

    Suggestion: Pourquoi ne pas utiliser un tableau de paramètres plutôt que d'un paquet de variables?
    Voir section ParamArray: http://plasserre.developpez.com/v1-12.htm
    Yroubag
    Bien poser les questions, c’est tout un art.
    Où tout dépend, bien sûr, de la réponse que l’on veut obtenir. -André Frossard

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Merci de ton attention!
    Je vais suivre tes conseils et essayer de suite!
    et merci pour l'expplication!

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    mais du coup de quelle manière devrais-je m'y prendre pour faire un tableau de paramètre???
    Car chaque ligne est soit vide soit à une couleur en string??

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut changement
    Du coup j'ai suivi ton conseil et j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oTable.Columns.Add("Nb Couleur", Type.GetType("System.SByte"), " ")
     
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                    FctCalcNbCoul("XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0", "XFONDCHQ_0")
                Next myRow
    mais comment faire pour lui spécifier que c'est dans la datacolumn "Nb Couleur"
    qu'il faut mettre les résultats??

    Merci d'avance!

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    j'ai trouvé comment spécifier la datacolumn :

    myRow("Nb Couleur") = FctCalcNbCoul(...)

    Mais j'ai un message d'erreur :

    l'index et le compte doivent faire référence à un emplacement situé dans la chaine.
    Nom du paramètre : count.

    je ne comprend vraiment pas...

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    je l'avais pas mis au bon endroit...
    du coup cela me crée ma colonne et pis rien d'autre, niet....
    que faire??

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut up!
    un pti up pour ceux qui ont eu le courage de lire jusqu'ici!!
    si vous avez des idées je suis preneur meme si vous etes pas sûr...

  9. #9
    Membre actif Avatar de yroubag
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 224
    Points
    224
    Par défaut
    OK, avec tous ces messages je ne sais plus trop sur quoi tu bloques.

    Pour le ParamArray, tu lui passe un tableau de String puisque tous tes paramètres étaient de ce type. Ça devrait donner de quoi dans le genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function FctCalcNbCoul(ByVal XFONDCHQ As String, ByVal ParamArray Couleurs() as String) As Integer
     
    Dim Ctr as Integer
    For each coul as string in Couleurs
      If coul <> "" Then
        Ctr += 1
      End if
    Next
     
    ...
    Yroubag
    Bien poser les questions, c’est tout un art.
    Où tout dépend, bien sûr, de la réponse que l’on veut obtenir. -André Frossard

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Du coup ma fonction est nickel, mais rien ne se rempli sur ma colonne en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"), " ")
     
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                myRow("NbCouleur") = FctCalcNbCoul("XFONDCHQ_0", Couleurs(7))
                Next myRow
    dsl pour les message précédents je n'avais pas vu comment insérer le code dans les balises!!

  11. #11
    Membre actif Avatar de yroubag
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 224
    Points
    224
    Par défaut
    1. Tu peux enlever ton paramètre vide à la fin, car il y a surcharge de la méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"))
    2. Pour ton tableau Couleurs(), tu dois le déclarer avant et lui affecter les valeurs pour chaque cellule AVANT de le passer à ta fonction. C'est peut-être déjà fait, mais je ne le vois pas dans ton bout de code.

    3. Lorsque tu passes ton tableau Couleurs() à ta fonction, tu dois passer Couleurs() et non Couleurs(7) car ce dernier n'envoie que le 7e élément du tableau et non le tableau en entier.
    Yroubag
    Bien poser les questions, c’est tout un art.
    Où tout dépend, bien sûr, de la réponse que l’on veut obtenir. -André Frossard

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Bonjour, et encore merci de vous pencher sur mon cas.

    il ne me reste plus que ça à régler et j'ai finis mon petit programme!

    En suivant vos conseil j'ai ceci :
    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
    Public Couleurs() As String = {"XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0"}
    
    Public Function FctCalcNbCoul(ByVal XFONDCHQ As String, ByVal ParamArray Couleurs() As String) As Integer
    
            Dim NbCoul As Integer
            Dim Ctr As Integer
            For Each coul As String In Couleurs
                If coul <> "" Then
                    Ctr += 1
                End If
            Next
    
            XFONDCHQ = XFONDCHQ.Remove(0, 3)
            XFONDCHQ = XFONDCHQ.Remove(5, 9)
    
            NbCoul = CInt(XFONDCHQ) + Ctr
    
            Return NbCoul
        End Function
    
    oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"))
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                    myRow("NbCouleur") = FctCalcNbCoul("XFONDCHQ_0", Couleurs())
                    oTable.Rows.Add(myRow("NbCouleur"))
                Next myRow
    le problème est qu'il n'y a pas de message d'erreur à part sur le couleur() qui est en bleu et qui me renvoi en mode design : "le nombre d'indices est inférieur au nombre de dimensions du tableau indéxé"
    Et le seul moyen d'enlever cette erreur est d'y mettre le chiffre 7 : Couleur(7)
    mais ça ne marche pas...

    Honnêtement, je sèche, je ne vois pas quoi faire de plus...

    Pour information voila mon code complet :
    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
    99
    Dim oDataset As DataSet = New DataSet("oDataset")
     
            Dim DateDebV As String
            DateDebV = ReportAutoBq.ComboBoxVisual.SelectedItem
     
     
            Try
     
                Dim oConnection As OracleConnection = New OracleConnection()
                oConnection.ConnectionString = "Server=OraOLEDB.Oracle; Data Source=X3_X32CLIP.clip-sa.local ;USER ID=odbc; PASSWORD=odbc"
     
                oConnection.Open()
     
                'CLIP.XDOSCLI2.XRECT1_0, CLIP.XDOSCLI2.XRECT2_0, CLIP.XDOSCLI2.XRECT3_0, CLIP.XDOSCLI2.XRECT4_0, CLIP.XDOSCLI2.XRECT5_0, CLIP.XDOSCLI2.XRECT6_0, CLIP.XDOSCLI2.XVERS1_0, CLIP.XDOSCLI2.XVERS2_0, CLIP.XDOSCLI2.XFONDCHQ_0
                'FctCalcNbCoul(XRECT1_0, XRECT2_0, XRECT3_0, XRECT4_0, XRECT5_0, XRECT6_0, XVERS1_0, XVERS2_0, XFONDCHQ_0) as Nb Couleur , 
                Dim oAdapt As New OracleDataAdapter("SELECT XBQABR_0, XCODBANK_0, XBQNAM_0, XCODPRO_0, CLIP.XDOSCLI.XCOMDAT_0, CLIP.XDOSCLI.XDCNUM_0, CLIP.XDOSCLI2.XRECT1_0, CLIP.XDOSCLI2.XRECT2_0, CLIP.XDOSCLI2.XRECT3_0, CLIP.XDOSCLI2.XRECT4_0, CLIP.XDOSCLI2.XRECT5_0, CLIP.XDOSCLI2.XRECT6_0, CLIP.XDOSCLI2.XVERS1_0, CLIP.XDOSCLI2.XVERS2_0, CLIP.XDOSCLI2.XFONDCHQ_0, " & _
                "XREFCLI_0, XDLIVDEM_0, DLVDAT_0, XBATDRET_0, SHIDAT_0, XQTEDEM_0, (QTY_0 * 1000) AS QTY_0, cast(XMONTANT_0 As Decimal (15,2)) As XMONTANT_0, NETWEI_0, CLIP.SDELIVERY.SDHNUM_0 FROM CLIP.XBANQUE, CLIP.SDELIVERY, CLIP.SINVOICED, CLIP.XDOSCLI, CLIP.XDOSCLI2 " & _
                "WHERE CLIP.XBANQUE.XBQNUM_0=CLIP.SDELIVERY.XBQNUM_0 " & _
                "AND CLIP.SDELIVERY.XDCNUM_0=CLIP.XDOSCLI.XDCNUM_0 " & _
                "AND CLIP.SDELIVERY.XDCNUM_0=CLIP.XDOSCLI2.XDCNUM_0 " & _
                "AND CLIP.SINVOICED.XDCNUM_0=CLIP.XDOSCLI.XDCNUM_0 " & _
                "AND CLIP.SDELIVERY.SDHNUM_0=CLIP.SINVOICED.SDHNUM_0 " & _
                "AND SHIDAT_0 > To_Date('31/12/2005', 'DD/MM/YYYY')", oConnection)
                'ComboBoxVisual.Text            'contient la valeur affichée correspondant à la ligne sélectionnée et déterminée par la propriété .DisplayMember
                'ComboBoxVisual.SelectedValue.ToString()   'réf d'objet non instancié...    'contient la valeur réelle qui sera utilisée en cas de bind et déterminée par la propriété .ValueMember
                'ComboBoxVisual.SelectedItem.ToString       'réf d'objet non instancié...   'contient l'item correspondant à la ligne sélectionnée.
                'SelectedIndex => la valeur numérique de la ligne
                'SelectedText => le texte qui apparait
                'SelectedValue => la valeur (cachée)
                'SelectedItem => l'objet ligne de la structure
     
                'Création d'une table contenat tous les champs requis
                Dim oTable As DataTable = New DataTable()
     
                'Remplissage de la datatable à partir de la requete sql
                oAdapt.Fill(oTable)
     
               oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"))
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                    myRow("NbCouleur") = FctCalcNbCoul("XFONDCHQ_0", Couleurs())
                    oTable.Rows.Add(myRow("NbCouleur"))
                Next myRow
     
                'Fermeture de la connexion afin de ne pas monopoliser les ressources
                oConnection.Close()
     
                Dim oDataview As DataView = New DataView()
                oDataview.Table = oDataset.Tables("oTable")
                oDataview = oTable.DefaultView
                oDataview.Sort = "SHIDAT_0"
                'oDataview.RowFilter = "SHIDAT_0 > '" & ReportAutoBq.ComboBoxVisual.SelectedItem & "' AND SHIDAT_0 < '" & ReportAutoBq.ComboBoxVisual2.SelectedItem & "'"
                'oDataset.AcceptChanges()
                'oDataview.RowFilter = "SHIDAT_0 > '" & DateDebV & "' AND SHIDAT_0 < '" & DateFinV & "'"
                oDataview.RowFilter = "SHIDAT_0 >= '01/01/" & DateDebV & "' AND SHIDAT_0 <= '31/12/" & DateDebV & "'"
     
                'Masquer certaines colonnes
                oDataview.Table.Columns("XRECT1_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XRECT2_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XRECT3_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XRECT4_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XRECT5_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XRECT6_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XVERS1_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XVERS2_0").ColumnMapping = MappingType.Hidden
                oDataview.Table.Columns("XFONDCHQ_0").ColumnMapping = MappingType.Hidden
     
                DataGridViewVisual.DataSource = oDataview
     
     
                ' Vérif si erreur
            Catch ex As Exception
                MsgBox("Erreur !!! " & ex.Message)
            End Try
     
        End Sub
     
     
        Public Couleurs() As String = {"XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0"}
     
     
     
        Public Function FctCalcNbCoul(ByVal XFONDCHQ As String, ByVal ParamArray Couleurs() As String) As Integer
     
            Dim NbCoul As Integer
            Dim Ctr As Integer
            For Each coul As String In Couleurs
                If coul <> "" Then
                    Ctr += 1
                End If
            Next
     
            XFONDCHQ = XFONDCHQ.Remove(0, 3)
            XFONDCHQ = XFONDCHQ.Remove(5, 9)
     
            NbCoul = CInt(XFONDCHQ) + Ctr
     
            Return NbCoul
        End Function

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    j'ai trouver une autre erreur, il s'agit de mon XFONCHQ qui peut être vide lui aussi donc ma fonction est celle-ci dorénavant :

    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
    Public Function FctCalcNbCoul(ByVal XFONDCHQ As String, ByVal ParamArray Couleurs() As String) As Integer
     
            Dim NbCoul As Integer
            Dim Ctr As Integer = 0
            Dim X As String
            Dim W As String
            For Each coul As String In Couleurs
                If coul <> "" Then
                    Ctr += 1
                End If
            Next
     
            If XFONDCHQ <> "" Then
                X = XFONDCHQ.Remove(0, 3)
                W = X.Remove(5, 9)
            Else
                W = "0"
            End If
     
            NbCoul = CInt(W) + Ctr
            NbCoul = Ctr
     
            Return NbCoul
        End Function
    et le message d'erreur de la mort :

    L'index et le compte doivent faire référence à un emplacement dans la chaîne
    Nom du paramètre : Count

    Ce message est lié à :


    et si j'enlève la partie avec XFONDCHQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function FctCalcNbCoul(ByVal XFONDCHQ As String, ByVal ParamArray Couleurs() As String) As Integer
     
            Dim NbCoul As Integer
            Dim Ctr As Integer = 0
            Dim X As String
            Dim W As String
            For Each coul As String In Couleurs
                If coul <> "" Then
                    Ctr += 1
                End If
            Next
     
           Return NbCoul
        End Function
    la fonction passe mais bloque au niveau du next row :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim myRow As DataRow
    
                Dim Couleurs() As String = {"XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0"}
    
                For Each myRow In oTable.Rows
                    myRow("NbCouleur") = FctCalcNbCoul(Couleurs(7))
                    oTable.Rows.Add(myRow("NbCouleur"))
               Next myRow
    et le message d'erreur :
    la collection a été modifiée, l'opération d'énumération risque de ne pas s'éxécuter
    Que faire??

    j'ai trouver la solution pour ce message d'erreur, il suffit de supprimer la ligne:
    oTable.Rows.Add(myRow("NbCouleur"))
    j'ai maintenant un résultat retourné, toujours zéro mais c'est déja une avancée...

  14. #14
    Membre actif Avatar de yroubag
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 224
    Points
    224
    Par défaut
    1. Aucune parathèse lors de l'appel. Ça résoud : «le nombre d'indices est inférieur au nombre de dimensions du tableau indéxé»
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each myRow In oTable.Rows
                    myRow("NbCouleur") = FctCalcNbCoul(Couleurs)
                    oTable.Rows.Add(myRow("NbCouleur"))
    2. Problème logique: Si j'ai bien compris les "XRECT1_0", "XRECT2_0" et ... était le NOM de tes paramètres d'entrée, mais le tableau Couleurs doit contenir les VALEURS de ces paramètres. Dans ta fonction, tu vérifies si la cellule est vide, mais dans le cas présent elle ne le sera jamais en raison des "XRECT1_0", "XRECT2_0" et ... stockés. Exemple: La valeur de XRECT1_0 va être dans l'index 0, la valeur de XRECT2_0 dans l'index 1 et ...
    Yroubag
    Bien poser les questions, c’est tout un art.
    Où tout dépend, bien sûr, de la réponse que l’on veut obtenir. -André Frossard

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Finalement j'ai réussi à faire marcher ma 1ère fonction, pas très propre mais fonctionnelle.
    Voici donc ce qu'il faut faire de A à Z :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"))
                Dim myRow As DataRow
     
                'Dim Couleurs() As String = {"XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0"}
     
                For Each myRow In oTable.Rows
                    'myRow("NbCouleur") = FctCalcNbCoul(myRow("XFONDCHQ_0"), Couleurs(7))
                    'myRow("NbCouleur") = FctCalcNbCoul(Couleurs(0))
                    myRow("NbCouleur") = FctCalcNbCoul(myRow("XRECT1_0"), myRow("XRECT2_0"), myRow("XRECT3_0"), myRow("XRECT4_0"), myRow("XRECT5_0"), myRow("XRECT6_0"), myRow("XVERS1_0"), myRow("XVERS2_0"), myRow("XFONDCHQ_0"))
                    'oTable.Rows.Add(myRow("NbCouleur"))
                Next myRow
    Ne pas oublier les myRow()
    et enfin la fonction pas proppre mais qui 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
    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
     
        'Fonction calculant le nombre de couleur
        Public Function FctCalcNbCoul(ByRef XRECT1 As String, ByRef XRECT2 As String, ByRef XRECT3 As String, ByRef XRECT4 As String, ByRef XRECT5 As String, ByRef XRECT6 As String, ByRef XVERS1 As String, ByRef XVERS2 As String, ByRef XFONDCHQ As String) As Integer
     
     
            Dim NbCoul As Integer
            Dim cpt As Integer
            cpt = 0
     
            If XRECT1 = " " Then
                cpt = cpt
            Else
                cpt = cpt + 1
                If XRECT2 = " " Then
                    cpt = cpt
                Else
                    cpt = cpt + 1
                    If XRECT3 = " " Then
                        cpt = cpt
                    Else
                        cpt = cpt + 1
                        If XRECT4 = " " Then
                            cpt = cpt
                        Else
                            cpt = cpt + 1
                            If XRECT5 = " " Then
                                cpt = cpt
                            Else
                                cpt = cpt + 1
                                If XRECT6 = " " Then
                                    cpt = cpt
                                Else
                                    cpt = cpt + 1
                                    If XVERS1 = " " Then
                                        cpt = cpt
                                    Else
                                        cpt = cpt + 1
                                        If XVERS2 = " " Then
                                            cpt = cpt
                                        Else
                                            cpt = cpt + 1
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
     
     
            Dim W As String
     
            If XFONDCHQ <> "" Then
                W = Mid(XFONDCHQ, 5, 1)
                If Len(W) = 9 Then
                    W = Mid(XFONDCHQ, 4, 1)
                End If
                If W <> "1" And W <> "2" And W <> "3" And W <> "4" And W <> "5" And W <> "6" And W <> "7" And W <> "8" And W <> "9" Then
                    W = "0"
                End If
            Else
                W = "0"
            End If
     
     
            NbCoul = CUInt(W) + cpt
     
            Return NbCoul
     
        End Function
    lorsque j'aurais fini ce que j'ai à faire, j'essairerai en utilisant un tableau...

    Sur ce, Merci beaucoup de ta patience ainsi que de tes réponses cela m'a
    fais grandement plaisir!!

    eh bienj au plaisir par ma foi!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2013, 14h23
  2. Réponses: 3
    Dernier message: 24/08/2012, 14h51
  3. d'un fichier xml à des tables Access : ajout d'une colonne calculée
    Par scribreiz dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 16/10/2009, 11h48
  4. DataTable - Ajout d'une colonne calculée
    Par dequi dans le forum JSF
    Réponses: 5
    Dernier message: 11/07/2007, 15h59

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