Bonjour à tous,

je me permets de solliciter votre aide, car j'ai épuisé les tests, je ne vois pas du tout le soucis.

Je dispose dans une feuille excel une base de données de contact personnel, dont les données démarrent à la ligne 12.
J'ai une colonne (la 17ème) qui donne le numéro de contact pour chaque ligne, c'est un numéro unique qui va de 1 jusqu'au nombre de contact.

Je travaille une listview, qui me prend toutes les colonnes et toutes les lignes. A chaque contact, j'ai donc dans ma liste view à la fin le numéro de "clé".

Je désire créer une fonction colorer() pour colorer le nom de famille des contacts en fonction du type (famille, pro, etc...).

A l'initialisation, ma listview contient toutes les données, donc la pas de problème. Sauf que j'ai des fonctions de filtre, et j'aimerai qu'à la fin de chaque fonction de filtre, je recolore l'affichage. Mettons que le filtre me renvoi 10 données sur un total de 500, cette fois l'index de listview ne correspond pas au numéro unique.

Dans ma fonction colorer, je cherche donc à récupérer la valeur de la clé de la ligne sélectionnée, afin de lui appliquer la bonne couleur.



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
 
Sub colorer()
 
Dim nb_ligne As Integer
nb_ligne = ListView1.ListItems.Count
Dim k, numcolonne As Integer
 
For k = 1 To nb_ligne
 
 numcolonne = Int((CInt(ListView1.ListItems(k).ListSubItems(10)) + 11))
'MsgBox (numcolonne)
 
 
     If Sheets("Liste").Cells(numcolonne, 16).Value = "PRO" Then
 
       ListView1.ListItems(k).ListSubItems(1).ForeColor = RGB(255, 142, 0)
       ListView1.ListItems(k).ListSubItems(1).Bold = True
                 End If
 
                If Sheets("Liste").Cells(numcolonne, 16).Value = "Amis" Then
       ListView1.ListItems(k).ListSubItems(1).ForeColor = RGB(0, 142, 0)
       ListView1.ListItems(k).ListSubItems(1).Bold = True
            End If
 
 
      If Sheets("Liste").Cells(numcolonne, 16).Value = "Famille" Then
       ListView1.ListItems(k).ListSubItems(1).ForeColor = RGB(0, 0, 255)
       ListView1.ListItems(k).ListSubItems(1).Bold = True
                 End If
 
                        If Sheets("Liste").Cells(numcolonne, 16).Value = "Autres" Then
      ListView1.ListItems(k).ListSubItems(1).ForeColor = RGB(0, 120, 255)
      ListView1.ListItems(k).ListSubItems(1).Bold = True
                End If
 
 
                 Next
 
End Sub
Sauf que le "numcolonne" me renvoie une erreur 13 incompatibilité de type quand je l'applique dans le cells. J'ai fait une msgbox, j'ai bien la bonne valeur de ligne, j'ai vérifié le type, c'est bien numérique...

je n'y comprends rien.

Merci infiniment !

Cordialement,

kenobiwan