changer couleur listview

news

XLDnaute Impliqué
Bonjour à tous du forum, :)

j'essaie de développer un listview que pour chaque date est affichée une autre couleur
et que dans la 3e colonne figure le format # ###,00

J'utilise le code suivant mais ne fonctionne pas, comme avec les variables je ne comprends pas trop.
Est-ce qu'il n'y a pas un vba code plus facile que d'indiquer pour chaque case :

Private Sub Sub UserForm_Initialize()
Dim t As Byte, x As Byte, j As Byte
Dim c As Range
Dim couleur As Long

With Me.ListView05
.ListItems.Clear
For Each c In Sheets("dépenses").Range("a3:a" & Range("a65536").End(xlUp).Row)
x = x + 1
Select Case c.Offset(0, 1)
Case DateIs = Sheets("ref.").Range("A3").Value '=01/10/2009
couleur = vbRed
Case DateIs > Sheets("ref.").Range("A4").Value '=02/10/2009
couleur = vbGreen
Case DateIs > Sheets("ref.").Range("A5").Value '=03/10/2009
couleur = vbYellow
...
End Select
.ListItems.Add , , c
.ListItems(x).ForeColor = couleur
For j = 1 To 3
.ListItems(x).ListSubItems.Add , , c.Offset(0, j)
'.ListItems(x).ListSubItems(j).ForeColor = c.Offset(0, j).Font.Color
.ListItems(x).ListSubItems(j).ForeColor = couleur
Next j
Next c
End With
End Sub

merci d'astuces éventuels
 

Pièces jointes

  • listview.xls
    141.5 KB · Affichages: 297
  • listview.xls
    141.5 KB · Affichages: 303
  • listview.xls
    141.5 KB · Affichages: 361
Dernière édition:

klin89

XLDnaute Accro
Re : changer couleur listview

Bonsoir le forum,
bonsoir bebere, news

Si tu n'as pas changé la structure initiale de ton tableau dans la feuille "dépenses", le code fonctionne parfaitement même si tu rajoutes des lignes :cool:

Tu n'as pas à rajouter de nouvelles instructions non plus.

Pour ce qui est d'adapter ce code à la procédure événementielle de ta listview, je ne sais pas faire. Je laisse la place aux spécialistes sur sur ce forum, ils se reconnaitront ;)

Amicalement klin89
 

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du forum,

Re Bebere:
Merci pour réponse. J'ai essayé avec ton vba code et le fichier joint, mais cela ne fonctionne pas entièrement comme que les 4 premières dates étaient avec autre couleur, mais pour les suivantes dates aucune couleur est affichée.

Re: klin89
Merci d'avoir pris le temps pour proposer des codes vba ou des solutions pour résoudre. Mais je n'arrive pas complètement à afficher les couleurs dans listview, comme je ne me retrouve pas tellement avec les boucles et les variables.

Dans l'exemple de fil posté, les données de la feuille sont sans couleur. Lorsque les données sont mis dans listview que dans listview la couleur change avec chaque autre date.

Je relance ce fil suivant Bebere.
J'ai recherché sur ce forum sur couleur lsitview, mais les exemples ne résoud pas entièrement.

Ci-dessous vba code que j'essaie d'utiliser, mais ne fait pas colorer chaque différente date dans listview.

With Listview05
.ListItems.Clear
For Each c In Sheets("dépenses").Range("A3:A" & Range("A65536").End(xlUp).Row)
Set LI = .ListItems.Add(, , c.Value)
LI.ForeColor = &HFF&
For j = 1 To 2
Set LSI = LI.ListSubItems.Add(, , c.Offset(0, j).Value)
LSI.ForeColor = &HFF&
Next j
Set LSI = LI.ListSubItems.Add(, , Format(c.Offset(0, 3).Value, "#,###.00"))
LSI.ForeColor = &HFF&
Next c

For Each cel In Sheets("dépenses").Range("B3:B" & Range("B65536").End(xlUp).Row)
If cel.Value <> cel.Offset(-1, 0) Then
lv(UBound(lv)) = cel.Row
End If
Next cel
lv(UBound(lv)) = Range("B65536").End(xlUp).Row + 1
For x = 0 To UBound(lv) Step 2 'coloration des lignes
On Error Resume Next
LI.ForeColor = &H80000005
LSI.ForeColor = &H80000005
Next x

End With


tj. listview ne s'affiche pas complètement avec les couleurs changeantes pour autre date. Dans la feuille il n'y a pas de couleur, mais lorsque la listview s'ouvre est affichée différente couleur pour différente date.

Comme avec les boucles et variables je ne me connais pas trop, j'ai des difficultés pour résoudre.
Je m'adresse à vous du forum, les excellents, d'avoir un vba code qui résoud,

merci d'avance,

news
 
Dernière édition:

Lii

XLDnaute Impliqué
Re : changer couleur listview

Bonsoir,

à voir. Que prévois-tu pour différencier les montants positifs ou négatifs voire nuls ?
Tu aurais intérêt à joindre des fichiers nettoyés.
 

Pièces jointes

  • ListviewSiCouleur.zip
    16.3 KB · Affichages: 95

news

XLDnaute Impliqué
Re : changer couleur listview

Re: Lii

merci pour réponse et vba code proposé. J'ai testé le fichier avec vbacode, mais ne fonctionne pas exactement, comme pour quelques dates n'est pas changé dans une autre couleur.
J'ai copié le code dans le fichier exemple, mais ce n'est pas affiché pour chaque différente date une autre couleur.

Si les montants sont nuls ou négatif ou positif n'est pas d'importance comme le critère de sélection est la date (2e colonne). dès qu'on sélecitonne un item dans lsitview, les données sont remises dans les Textbox1,2,3 et 4 lesquels ont peut changer et valider.

Est-ce une variable avec boucle qui peut résoudre ?, comme :

For Each c In Sheets("dépenses").Range("B3:B" & Range("B65536").End(xlUp).Row)
If y = y+1 Then
couleur = vbred
Else
couleur = vbgreen
End if
next c
...

le code est à adapter, comme je ne me retrouve pas tellement avec les variables,

news
 

Pièces jointes

  • data,_new_version_error_color_listview.zip
    110.8 KB · Affichages: 85
  • data,_new_version_error_color_listview.zip
    110.8 KB · Affichages: 83
  • data,_new_version_error_color_listview.zip
    110.8 KB · Affichages: 111
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : changer couleur listview

bonjour News,Lii,Klin
voilà un code pour la listview,vois si c'est bon dans tous les cas

Private Sub the_listview_refresh() 'to fill the data from Worksheets("dépenses")
Dim t As Byte, y As Byte, j As Byte, i As Byte
Dim c As Range, L
Dim couleur, couleur1
Dim n As Byte
'on remplit la listview
With Me.ListView05
.ListItems.Clear
For Each c In Sheets("dépenses").Range("a3:a" & Range("a65536").End(xlUp).Row)
.ListItems.Add , , c
y = .ListItems.Count
For j = 1 To 3
.ListItems(y).ListSubItems.Add , , c.Offset(0, j)
Next j
Next c
'dates sans doublons
Set mondico = CreateObject("Scripting.Dictionary")

Set rng = Sheets("dépenses").Range("b3:b" & Range("b65536").End(xlUp).Row)

For Each c In rng
If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
Next c
'tableau contenant ,date,1ère ligne,nbre de lignes
ReDim L(1 To mondico.Count, 1 To 3)
For Each Item In mondico
i = i + 1: L(i, 1) = Item 'la date
Next Item
Set rng = Sheets("dépenses").Range("b1:b" & Range("b65536").End(xlUp).Row)

For i = 1 To UBound(L, 1)

Set c = rng.Find(L(i, 1), LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If c = L(i, 1) Then
If L(i, 2) = "" Then L(i, 2) = c.Row - 2 '1ère ligne
L(i, 3) = L(i, 3) + 1 'nbre de lignes
End If
Set c = rng.FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Next i
'couleurs listview
For Li = 1 To UBound(L, 1)
If L(Li, 3) >= 2 Then
If Li Mod 2 = 0 Then couleur = vbBlue Else couleur = vbMagenta
End If
If L(Li, 3) = 1 Then
If Li Mod 2 = 0 Then couleur = vbYellow Else couleur = vbGreen
End If

For y = L(Li, 2) To L(Li, 2) + L(Li, 3) - 1
If .ListItems(y).ListSubItems(1) > L(Li, 1) Then
.ListItems(y).ForeColor = couleur
For j = 1 To 3
.ListItems(y).ListSubItems(j).ForeColor = couleur
Next j
Else
.ListItems(y).ForeColor = couleur
For j = 1 To 3
.ListItems(y).ListSubItems(j).ForeColor = couleur
Next j
End If
Next y
Next Li
End With


End Sub

à bientôt
 

Lii

XLDnaute Impliqué
Re : changer couleur listview

Bonjour,

Tu colores puis tu tries en fonction des dates donc les couleurs ne correspondent plus.
Un essai en permutant les 2 actions mais restera le problème des tris avec les autres titres.

Avec ma version d'Excel, ton dernier fichier plante !
Avec ta macro Bebere, il manque des déclarations. Je la testerai plus tard.
 

Pièces jointes

  • ListviewCouleurs.zip
    18.6 KB · Affichages: 100

news

XLDnaute Impliqué
Re : changer couleur listview

bonjour à tosu du forum,

Re: Lii

merci pour réponse et de l'avancement du développement de la Listview du Userform que j'utilise.

Re: autre tri avec les autres titres
est résolu avec le code suivant :
' tri with selection of a colum : the data are ordered if clicking on column head
Private Sub ListView5_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
ListView5.Sorted = False
ListView5.SortKey = ColumnHeader.Index - 1
If ListView5.SortOrder = lvwAscending Then
ListView5.SortOrder = lvwDescending
Else
ListView5.SortOrder = lvwAscending
End If
ListView5.SortKey = 1 '1 est la 2ème colonne
ListView5.Sorted = True
End Sub


Re: BUG
le bug vient d'un End Sub de trop dans le module menu

Re: Tu colores puis tu tries en fonction des dates donc les couleurs ne correspondent plus
ceci est du comme je ne comptrends pas comment utiliser les variables.

reste encore à résoudre de mettre le format de nombre "#,###.00" dans la 4e colonne ?
J'ai mis le code suivant mais ne fonctionne pas:
For j = 1 To 2
.ListItems(x).ListSubItems.Add , , c.Offset(0, j)
Next
For y = 3 To 3
.ListItems(x).ListSubItems.Add , , c.Offset(0, j)
.ListItems(x).ListSubItems.Add(, , Format(c.Offset(0, 3).Value, "#,###.00"))
Next


news
 
Dernière édition:

news

XLDnaute Impliqué
Re : changer couleur listview

Bonsoir à tous du forum,

Re: Bebere

super, listview fonctionne,
les format de couleur et de valeur "# ###,00" sont affichés correctement dans listview,

merci encore une fois à Bebere, Lii, klin89
pour le temps pris et les astuces données pour développer la listview du Userform,

news
 

Statistiques des forums

Discussions
312 492
Messages
2 088 942
Membres
103 989
dernier inscrit
jralonso