Les couleurs ds un flexgrid [Résolu]

Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
- - Dernière réponse : novicekiller
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
- 23 juil. 2006 à 22:15
voila, je veux mettre des couleurs suivant le chiffre ( +  = vert et - = rouge) seulement voila ca regarde le premier résultat et pas les autres

--------------------------------------------------------------------------------------------
For i = 1 To rs.RecordCount
If argen < 0 Then
Grille1.BackColor = vbRed
Grille1.Rows = Grille1.Rows + 1
Grille1.TextArray(faIndex(i, 0)) = rs.Fields("date")
Grille1.TextArray(faIndex(i, 1)) = rs.Fields("motif")
Grille1.TextArray(faIndex(i, 2)) = rs.Fields("argent")
rs.MoveNext
Else
Grille1.BackColor = vbGreen
Grille1.Rows = Grille1.Rows + 1
Grille1.TextArray(faIndex(i, 0)) = rs.Fields("date")
Grille1.TextArray(faIndex(i, 1)) = rs.Fields("motif")
Grille1.TextArray(faIndex(i, 2)) = rs.Fields("argent")
rs.MoveNext
End If

Next
----------------------------------------------------------------------------------
je pensais que a chaque tour ça allez vérifier mais aparemmen non ou alor je mis prend mal !

-=NoViCeKiLLeR=-
Afficher la suite 

15 réponses

Meilleure réponse
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
3
Merci
salut,

ton code est bourré d'erreurs.
tu ne testes pas la validité des dates saisies (peuvent ne pas l'être), ni de la présence de somme (donc erreur à la relecture) et j'en passe...

bref!!

pour la couleur, tu parles de somme depuis le départ. si tu avais dit que la valeur stoquée contenait un "+" ou "-" on aurait gagné du temps... (quelle idée de stoquée uen somme en string....)

chez moi çà marche, espérons que çà te convienne :

Public Sub Load() 
    Dim i As Long 
    conte =  Form1.cmb_compte.Text 
    frm_historique.Caption = "Historique du " & conte 

    Grille1.Rows = 1 
    Grille1.ColWidth(0) = 500 
    Grille1.TextArray(faIndex(0, 0)) = "Date de l'opération" 
    Grille1.TextArray(faIndex(0, 1)) = "Libellé" 
    Grille1.TextArray(faIndex(0, 2)) = "débit" 
    Grille1.ColWidth(0) = 1450 
    Grille1.ColWidth(1) = 2650 
    Grille1.ColWidth(2) = 650 

    Set db = OpenDatabase(App.Path & "\gestion_97.mdb") 
    sql = "SELECT * FROM tbl_gestion WHERE compte ='" & conte & "' ORDER BY id DESC" 
    Set rs = db.OpenRecordset(sql, dbOpenDynaset) 

    Dim argen As String 
    Dim lCol As Long   'variable pour la couleur
    For i = 1 To rs.RecordCount 
        argen = rs.Fields("argent") 

    '   on ajoute à la suite les 3 champs... c'est juste une autre syntaxe...
        Grille1.AddItem rs.Fields("date") & vbTab & rs.Fields("motif") & vbTab & argen 
        Grille1.row = Grille1.Rows - 1 

        lCol =  IIf (LeftB$(argen, 2)  = "+", vbGreen, vbRed) 

        Grille1.col =  1: Grille1.CellForeColor = lCol 
        Grille1.col = 2: Grille1.CellForeColor = lCol 

        rs.MoveNext 
    Next i 

    rs.Close 
End Sub

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
0
Merci
Il faut appliquer la couleur à la ligne courante.Pour celà il faut te positionner sur cette ligne.
Essaye plutôt:
Grille1.Rows = i+ 1
Grille1.Row=i
Grille1.TextArray(faIndex(i,0))=rs.Fields("date")
Grille1.TextArray(faIndex(i,1))=rs.Fields("motif")
Grille1.TextArray(faIndex(i,2))=rs.Fields("argent")

et c' est après qu'il faut appliquer le BackColor
Grille1.BackColor = vbRed ou VbGreen.
Si ça marche pas écris cette dernière instruction juste après Grille1.Row=i.
A+
Commenter la réponse de chaibat05
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
mais, ça fait toujours la meme chose !

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
salut,

çà donne quoi çà?

Dim lCol As Long 
For i =  1 To rs.RecordCount 
    Grille1.AddItem rs.Fields("date") & vbTab & rs.Fields("motif") & vbTab & rs.Fields("argent") 
    Grille1.Rows = Grille1.Rows + 1 

    lCol =  IIf (argen < 0, vbRed, vbGreen) 
    Grille1.Col  = 0: Grille1.CellForeColor =  lCol 
    Grille1.Col = 1: Grille1.CellForeColor = lCol 
    Grille1.Col = 2: Grille1.CellForeColor = lCol 

    rs.MoveNext 
Next i

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
ca me donne la première ligne ds la bonne couleur, puis ca saute une ligne avant de mettre la suivante et les autres lignes ne sont pas en couleur! et aussi en passant euh tu pourré un pti peu développé ton code stp (expliqué) parce que c'est pas que j'ai rien compris hein mais presque xD

merci

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
je te mets tout le code de la flexgrid

---------------------------------------------------------------------------------------------------------
conte = Form1.cmb_compte.Text
frm_historique.Caption = "Historique du " & conte
Dim argen As Integer
Dim i As Integer
Grille1.Rows = 1
Grille1.ColWidth(0) = 500
Grille1.TextArray(faIndex(0, 0)) = "Date de l'opération"
Grille1.TextArray(faIndex(0, 1)) = "Libellé"
Grille1.TextArray(faIndex(0, 2)) = "débit"
Grille1.ColWidth(0) = 1550
Grille1.ColWidth(1) = 2650
Grille1.ColWidth(2) = 650
i = 0

Set db = OpenDatabase(App.Path & "\gestion_97.mdb")sql "SELECT * FROM tbl_gestion WHERE compte'" & conte & "' ORDER BY id DESC"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)

Dim lCol As Long
argen = rs.Fields("argent")
For i = 1 To rs.RecordCount
    Grille1.AddItem rs.Fields("date") & vbTab & rs.Fields("motif") & vbTab & rs.Fields("argent")
    Grille1.Rows = Grille1.Rows + 1

    lCol = IIf(argen < 0, vbRed, vbGreen)    Grille1.col 0: Grille1.CellForeColor lCol    Grille1.col 1: Grille1.CellForeColor lCol    Grille1.col 2: Grille1.CellForeColor lCol

    rs.MoveNext
Next i

rs.Close
----------------------------------------------------------------------------------------------------

j'esper que ça t'aideras !!
-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
essai en enlevant cette ligne :
Grille1.Rows =  Grille1.Rows + 1

Dim lCol As Long  'variable pour la couleur
For i = 1 To rs.RecordCount 

'   on ajoute à la suite les 3 champs... c'est juste une autre syntaxe...
    Grille1.AddItem rs.Fields("date") & vbTab & rs.Fields("motif") & vbTab & rs.Fields("argent") 

'   se positionne sur la dernière ligne mais bon....., à dégager?
    'Grille1.Rows = Grille1.Rows + 1

'   iif (condition vrai, valeur vrai, sinon valeur fausse)
    lCol =  IIf (argen < 0, vbRed, vbGreen) 
'   autre syntaxe :
    'If argen < 0 Then lCol  = vbRed Else lCol =  vbGreen

'   on se positionne sur chaque colonne une a une et on change la couleur
'   de text de la cellule sélectionnée
    Grille1.Col = 0: Grille1.CellForeColor = lCol 
    Grille1.Col = 1: Grille1.CellForeColor = lCol 
    Grille1.Col = 2: Grille1.CellForeColor = lCol 

    rs.MoveNext 
Next i

<small> Coloration
syntaxique automatique [AFCK] </small>
       

<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
tu risques pas d'avoir beaucoup de résultats différents avec argen = rs.Fields("argent") avant la boucle... ;)

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
alors si je met argent ds la boucle, ben la couleur n'est pas la bonne! le problème de ligne est réglé mais ca n'affiche toujours la couleur que sur la première ligne !!

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
peut-être que ton champs "argent" dans la base n'est pas un numérique...

Grille1.Rows = Grille1.Rows + 1
Grille1.Row = Grille1.Rows - 1

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
non en effet il n'est pas numerique, c'est pour ca que j'ai rajouté plus haut : dim argen as integer

c'est pour faire quoi ça ? :
Grille1.Rows = Grille1.Rows + 1
Grille1.Row = Grille1.Rows - 1

merci merci :)
-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
j'ai mis un pti label pour voir ce que donnait la valeur argen, si on ne l'a met pas dans la boucle , ell donne lea première valeur de la bdd et si on la met dans la boucle, ca donne la dernière valeur de la bdd
en fait, ça ne vérifie pas ligne par ligne
je crois que je vais laisser tomber la coloration, meme si j'ai horreur de laissé tombé quelque chose! tant pis ! si jamais t'a une autre idée surtout tu fai partagé hein :D !!

merci de m'avoir aidé ;)

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
salut,
si tu veux héberge ton projet avec la base (zip) et donne le lien, je regarderai.

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Commenter la réponse de PCPT
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
je l'ai posté en source sur vbfrance ^^ [javascript:ol('http://www.vbfrance.com/code.aspx?ID=38718'); http://www.vbfrance.com/code.aspx?ID=38718]

merci ;)

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller
Messages postés
64
Date d'inscription
dimanche 17 août 2003
Statut
Membre
Dernière intervention
23 juillet 2006
0
Merci
ok ca marche ;) je te remerci pour les erreurs en effet j'ai rien vérifié mais j'ai fais ça dans la précipitation et ayant 2taff en ce momen je fé de grosse journée et je taff 7j/7 donc tant que ça marche ben ca me convient pour l'instant, tu peux meme voir que le logiciel est vraiment très simple !

voila merci encor a plaus tard

-=NoViCeKiLLeR=-
Commenter la réponse de novicekiller