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:

Bebere

XLDnaute Barbatruc
Re : changer couleur listview

bonjour news
case est le plus simple et plus rapide
supprimé dateis et laissé is
select case date
case is=autredate
case is>autredate
case <autredate
end select
à bientôt
 

Pièces jointes

  • listviewNews.zip
    37.8 KB · Affichages: 281

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du fourm,

Re: Bebere
d'accord d'utilser case,

mais avec toute l'année d'y mettre > 360 fois ! Case is = Sheets("ref.") ...

Case Is = Sheets("ref.").Range("A2").Value
couleur = vbRed
Case Is = Sheets("ref.").Range("A3").Value
couleur = vbNoir
Case Is = Sheets("ref.").Range("A4").Value
couleur = vbRed
Case Is = Sheets("ref.").Range("A5").Value
couleur = vbNoir

...

J'utilise que 2 différents couleurs.
Est-ce qu'on peut définir pour chaque changement de date, est mis une autre couleur,
comme :

If Case is Sheets("ref.").Cells(y, +1).Value <> Sheets("ref.").Cells(y, 1).Value
couleur = vbRed[/I]
Else
couleur = vbNoir
End if

ce vba code ne fonctionne pas tout à fait,

news
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : changer couleur listview

news
pas de if svp
select case madate 'ce que tu compares avec Sheets("ref.").Range("A2")
tu peux écrire comme suit
Case Is >= Sheets("ref.").Range("A2"), <= Sheets("ref.").Range("A31")
traduit veut dire si la date est dans le 10ième mois alors couleur=vbred
 

news

XLDnaute Impliqué
Re : changer couleur listview

Bonsoir à tous du forum,

Re: Bebere
Re: traduit veut dire si la date est dans le 10ième mois alors couleur=vbred

ne manque-t-il pas des données dans ton code vba ?

une variable ne serait-il mieux ?
 

Lii

XLDnaute Impliqué
Re : changer couleur listview

bonsoir

...
J'utilise que 2 différents couleurs.
Est-ce qu'on peut définir pour chaque changement de date, est mis une autre couleur,...
si tu veux 2 couleurs alternées, tu peux essayer simplement :
Code:
...
With Me.ListView05
.ListItems.Clear
    For Each c In Sheets("dépenses").Range("a3:a" & Range("a65536").End(xlUp).Row)
        x = x + 1
        .ListItems.Add , , c
        For j = 1 To 3
            .ListItems(x).ListSubItems.Add , , c.Offset(0, j)
            .ListItems(x).ListSubItems(j).ForeColor = IIf(x Mod 2 = 0, vbBlack, vbRed)
        Next j
    Next c
End With
 

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du forum,

Re: Lii

avec variable c'est mieux, sinon définir 360 lignes,

maintenant je vais essayer sur tous les ordinateurs avec les différentes versions de Windows,
d'ou je reçois pour un ordinateur parfois des erreurs de compilation et d'autre non,

news

Lii
 

klin89

XLDnaute Accro
Re : changer couleur listview

Bonsoir le forum,
Bonsoir Bebere Lii news, :D

Si tu veux alterner les couleurs à chaque changement de dates, vois ceci :

https://www.excel-downloads.com/threads/colorier-une-ligne-si-premiere-colonne-identique.118286/

Ensuite pourquoi ne pas reprendre l'exemple d'Hervé ci-dessous :

https://www.excel-downloads.com/threads/listbox-et-format-dune-des-colonnes.56736/

En conjuguant ces 2 exemples, tu parviendrais à colorer les lignes de ta listview avec l'alternance de tes dates.

Voilà j'ai choisi de contourner le problème car je n'ai pas le talent des experts en VBA ;)

Bonne soirée à tous.

Klin89
 

klin89

XLDnaute Accro
Re : changer couleur listview

Bonjour à tous,
bonjour news,

Pour illustrer mes propos d'hier soir, vois le fichier ci-dessous.

J'ai repris le fichier d'Hervé dans lequel j'ai placé la macro de RENAUDER.

Est-ce l'effet recherché ?

Klin89
 

Pièces jointes

  • ListviewNews.xls
    47 KB · Affichages: 384

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du forum,

Re: klin89

J'ai copié le vba code du fichier Excel "ListviewNews" dans mon exemple, mais les couleurs ne changent pas lorsque la date change !
Puis j'ai copié ce userform avec le même vba code dans le fichier que j'utilise, mais la plus rien fonctionne. Les différents couleurs ne sont pas affichés ! :confused:

Je ne sais pas pourquoi cela ne fonctionne pas comme c'est le même userform et/ou le même vba code.

Est-ce que je n'ai pas bien copié le vba code ou faut-il changer une variable
ou les critères des variables ou est-ce qu'il manque une référence ?

news
 
Dernière édition:

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du forum,

ci-joint le ficheir Excel avec les mêmes codes vba,
mais les couleurs dans listview ne changent pas avec chaque différente date de la 2e colonne,

ne sais pas comment résoudre,
 

Pièces jointes

  • listviewNews_color_to_change.xls
    150.5 KB · Affichages: 273

klin89

XLDnaute Accro
Re : changer couleur listview

Bonsoir à tous,
Bonsoir news,

Ci dessous, le code de RENAUDER adapté à la structure de la feuille de calcul "dépenses".

Colle le dans le module 1 et tapes sur la touche F5.

Les lignes vont se colorer en fonction de l'alternance de tes dates.

Puis tu visualises dans ta listview.

Code:
Sub ReperRefs()
Application.ScreenUpdating = False
    Range([b3], [b65536].End(xlUp)).Select
    NbItemsSource = Selection.Rows.Count
    ReDim tabl(1 To NbItemsSource, 2 To 2)
    i = 1
    t = 1
    For Each Cell In Selection
        tabl(i, 2) = Cell.Value
        i = i + 1
    Next Cell
    x = 3
    For j = 1 To NbItemsSource
        If Cells(j + 3, 2).Value = "" Then
            Range(Cells(j + 2, 1), Cells(j + 2, 4)).Font.ColorIndex = x
             Range("A1").Select
            End
        End If
        If tabl(j + 1, 2) = tabl(j, 2) Then
            Range(Cells(j + 2, 1), Cells(j + 2, 4)).Font.ColorIndex = x
        Else
            Range(Cells(j + 2, 1), Cells(j + 2, 4)).Font.ColorIndex = x
            t = t + 1
            If x = 3 Then
                x = 43
            ElseIf x = 43 Then
                x = 3
            End If
        End If
    Next j
   
End Sub

Bonne soirée à tous

Klin89
 

news

XLDnaute Impliqué
Re : changer couleur listview

Bonjour à tous du forum,

Re:
la macro fonctionne,
mais différents bug restant. Cette macro je n'avais pas utilisé comme elle donne différents bug :

a.) le fichier ("dépenses") doit être sélectionné pour mettre la couleur à cette feuille. Avec With Worksheets("dépenses") ne fonctionne pas.
b.) lorsque de nouvelles lignes sont ajoutés sur la feuille("dépenses"), ces lignes n'ont pas de couleur.

Mieux serait que le texte change de couleur lorsque ajouté dans Listview
et que le format de la 4e colonne de la listview change en "####,00"


N'est-ce pas possible d'utiliser et d'ajuster le vba code dans le fichier "ListeviewNews_color_to_change" posté auparavant.

news
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : changer couleur listview

bonjour news,klin
un essai dans listview
à bientôt

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
Dim couleur As Long
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
'pas de date
For y = 1 To .ListItems.Count
If .ListItems(y).ListSubItems(1) = "" Then
.ListItems(y).ForeColor = vbRed '&H8080FF
For j = 1 To 3
.ListItems(y).ListSubItems(j).ForeColor = vbRed '&H8080FF
Next j
End If

If y + 1 > .ListItems.Count Then Exit For
'dates égales
If .ListItems(y).ListSubItems(1) = .ListItems(y + 1).ListSubItems(1) Then
.ListItems(y).ForeColor = vbGreen '&HC0FFC0
.ListItems(y + 1).ForeColor = vbGreen '&HC0FFC0
For j = 1 To 3
.ListItems(y).ListSubItems(j).ForeColor = vbGreen '&HC0FFC0
.ListItems(y + 1).ListSubItems(j).ForeColor = vbGreen '&HC0FFC0

Next j
End If

Next y

End With

ListView05.FullRowSelect = True ' underligne the whole selected row
ListView05.Gridlines = True

' For Each c In Sheets("dépenses").Range("a3:a" & Range("a65536").End(xlUp).Row)
' y = y + 1
' Select Case c.Offset(0, 1).Text
' Case Is = Sheets("ref.").Range("A2").Text '=01/10/2009
' couleur = vbRed
' Case Is = Sheets("ref.").Range("A3").Text '=02/10/2009
' couleur = vbGreen
' couleur = vbBlue
' couleur = vbDarkGreen
' Case Is = Sheets("ref.").Range("A4").Text '=03/10/2009
' couleur = vbYellow
' couleur = vbTeal
' couleur = vbdarkred
' couleur = vbBlack
' Case Is = Sheets("ref.").Range("A5").Text '=04/10/2009
' couleur = vbYellow
' couleur = vbTeal
' couleur = vbdarkred
' couleur = vbBlack
' Case Is = Sheets("ref.").Range("A7").Text '=05/10/2009
'Case Is >= Sheets("ref.").Range("A2"), Is <= Sheets("ref.").Range("A11")
' couleur = vbRed
'Case Is >= Sheets("ref.").Range("A22"), Is <= Sheets("ref.").Range("A51")
' couleur = vbNoir

' Case Is > "20/10/2009"
' couleur = vbYellow
' End Select
' .ListItems.Add , , c
' .ListItems(y).ForeColor = couleur
' For j = 1 To 3
' .ListItems(y).ListSubItems.Add , , c.Offset(0, j)
'.ListItems(y).ListSubItems(j).ForeColor = c.Offset(0, j).Font.Color
' .ListItems(y).ListSubItems(j).ForeColor = couleur
' Next j
' Next c
'End With

' ******************** erreru de compilation with : Listitem ?
'format column4 ,
'For n = 2 To Sheets("dépenses").Range("A65536").End(xlUp).Row
' .ListItems.Add , , Sheets("dépenses").Cells(n, 1)

' .ListItems(.ListItems.Count).ListSubItems.Add , , Format(Sheets("dépesnes").Cells(n, 2), "# ##0")
'Next n

'ListView05.Refresh
End Sub
 

Pièces jointes

  • listviewNewscolortochange.zip
    47.9 KB · Affichages: 317

Statistiques des forums

Discussions
312 330
Messages
2 087 351
Membres
103 526
dernier inscrit
HEC