Compter nombre de couleurs sur plusieurs champs et mettre le résulat dans une no [Résolu]

Signaler
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009
-
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009
-
Bonjour, bonjour!!

je me permet de venir demander de l'aide car je ne sais vraiment pas quoi faire!

je vous explique mon problème :

je suis sous vs 2005 et j'ai une sélection de champs (XRECT1_0 à 6, et XVERS1 à 2) ou il y a des noms de couleurs tel que black, brown, yellow ou rien.

Ce que je voudrai faire c'est vérifier si les champs sont vides, et ce ligne par ligne,  et s'ils ne le sont pas ajouté 1 à un compteur par exemple, et enfin mettre le résultat dans une nouvelle colonne telle que :
oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"), "FonctionCalculNbCouleur(XRECT1_0 à 6, et XVERS1 à 2)").

Voila j'éspère que vous avez compris.

Merci d'avance de vos réponses, des idées m'intéresserai au plus haut point et ne vous inquiétez pas je ne veux pas de réponses toutes faite, mais me lancer ce serai vraiment cool!!

10 réponses

Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

Bon eh bien à force de patience et de détermination on trouve!!

je poste donc ma solution pas propre mais qui marche pour ceux qui auront un jour mon problème....

 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

'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
        ', ByVal XFONDCHQ As String

        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
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

Voila ce ke k'ai réussi à pondre en attendant :

FctCalculCouleur(Byval XRECT1 as string, ......, Byval XVERS2 as string, XFOND as String) as integer

Dim NbCoul as Integer
Dim cpt as Integer
cpt=0

If XRECT1=NOTNULL Then
   cpt = cpt + 1
   If XRECT2=NOTNULL Then

      cpt = cpt + 1
      If XRECT3=NOTNULL Then

         cpt = cpt + 1
         If XRECT4=NOTNULL Then

            cpt = cpt + 1
            If XRECT5=NOTNULL Then

               cpt = cpt + 1
               If XRECT6=NOTNULL Then

                    cpt = cpt + 1
                    If XVERS1=NOTNULL Then

                         cpt = cpt + 1
                         If XRECT2=NOTNULL Then

                         cpt = cpt + 1
                         End If
                     End If
                End If
             End If
          End If
       End If
    End If
End If

''''''XFOND = STD 5 Coul

XFOND = XFOND.Remove(0,3)
XFOND = XFOND.Remove(5,9)

NbCoul = CInt(XFOND) + cpt

Return NbCoul

End Function
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

Bonjour!!
je reviens car je n'arrive meme pas à tester si ma fonction marche....

j'utilise ceci :

oTable.Columns.Add("Nb Couleur", Type.GetType("System.SByte"), "FctCalcNbCoul(XRECT1_0, XRECT2_0, XRECT3_0, XRECT4_0, XRECT5_0, XRECT6_0, XVERS1_0, XVERS2_0, XFONDCHQ_0)")

et j'ai comme erreur :
l'expression contient un appel de fonction non défini FctCalcNbCoul()

Du coup je suis coincé...
           
Messages postés
106
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
16 juillet 2010
1
Salut !
Tu definis le fonction "FctCalculCouleur" mais celle que tu vas chercher s'appelle "FctCalcNbCoul".
Il faut qu'elles aient le meme nom, sans cela, il va continuer a chercher "FctCalcNbCoul" sans jamais la trouver puisqu'elle n'existe pas.

Et puis petit detail, au lieu de
If machin 1 then
   Action 1
   If machin 2 then
      Action 2
      ...
   End If
End If

tu peux ecrire :
If machin 1 then
   Action 1
ElseIf machin 2 Then
   Action 2
...
Endif

Tu pourrais aussi utiliser "Case" mais je ne me souviens plus de la synthaxe.

A+,
Tom.

Marin Marais
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

Tu n'as pas tort pour les if je vais le faire tisuite!!
Petite erreur de ma part sur le forum, autant pour moi, mais dans mon code j'appel bien la fonction avec le bon nom... et du coup ça ne marche toujours pas, il me retourne toujours le meme message d'erreur... à force de m'arracher les cheveux, va plus m'en rester...snif
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

du coup après quelque recherches je sais maintenant que ce n'était pas la bonne méthode pour remplir la datcolumn....

du coup maintenant je fais ceci :


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??
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

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...
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

je l'avais pas mis au bon endroit...

du coup cela me crée ma colonne et pis rien d'autre, niet....

que faire??
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

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...
Messages postés
38
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
4 mars 2009

du coup j'ai trouver une autre manière de faire ma fonction :

PublicFunction FctCalcNbCoul(ByVal XFONDCHQ AsString, ByValParamArray Couleurs()AsString)AsInteger

Dim NbCoul AsInteger
Dim Ctr AsInteger = 0
Dim X AsString
Dim W AsString
ForEach coul AsStringIn Couleurs
If coul <> ""Then
Ctr += 1
EndIf
Next
 
If XFONDCHQ <> ""Then
X = XFONDCHQ.Remove(0, 3)
W = X.Remove(5, 9)
Else
W = "0"
EndIf
 
NbCoul = CInt(W) + Ctr
NbCoul = Ctr
 
Return NbCoul
EndFunction

et mon tableau est déclaré comme ceci :

Dim Couleurs() As String = {"XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0"}

sachant que XRECT1_0, etc... sont les noms de colonnes de ma datatable...

mais j'ai une message pas cool... :

L'index et le compte doivent faire référence à un emplacement dans la chaîne