Aide sur une listview
Bonjour le forum
j'ai trouvé ce petit fichier que je cherche vainement à personnaliser
N'étant un spécialiste de listview je coince
Je viens vers vous cherchez de l'aide
En vous remerciant par avance
Bonjour
Essayez comme ceci :
Private Sub UserForm_Initialize()
Dim rng As ListObject
Dim tablo
Dim ncol As Byte, k As Byte
Dim i As Integer, ligne As Integer
Set rng = ThisWorkbook.Sheets("Feuil3").ListObjects(1)
tablo = rng.DataBodyRange.Value
ncol = rng.ListColumns.Count
'ajout des denominations colonnes
With Me.ListView1
With .ColumnHeaders
.Add Text:="ID", Width:=60
.Add Text:="Nom", Width:=60
.Add Text:="Prénom", Width:=50
.Add Text:="Age", Width:=50
.Add Text:="Date", Width:=50
End With
.View = lvwReport 'Style d'affichage
.FullRowSelect = True 'Selectionner une ligne possible avec colorisation
.Sorted = True 'liste triée
' ajout des lignes
ligne = 1
For i = 1 To UBound(tablo)
.ListItems.Add , , tablo(i, 1)
For k = 2 To ncol
.ListItems(ligne).ListSubItems.Add , , tablo(i, k)
Next k
ligne = ligne + 1
Next i
End With
End Sub
Si ok et terminé, -->
Cordialement
Bonjour le forum
Bonjour Dan
J'ai oublié de préciser mon souhait
J'aimerais garder le fichier tel qu'il est
Mais en sélectionnant dans la combobox col (élément) nom
je rencontre un premier message type mismatch
et le deuxième en sélectionnant dans la combobox : col (élément) nom
j'aimerais afficher le nom de l'adhérent, et c'est là que je rencontre des soucis avec la méthode listview
que le maîtrise pas du tout
En remerciant par avance
Mais en sélectionnant dans la combobox col (élément) nom
je rencontre un premier message type mismatch
Ce que je vous ai proposé ne charge que la listview uniquement à l'ouverture de l'USF
Il faut ajouter les infos dans la combo bien entendu, vous n'aviez rien demandé
Déjà dans le code que je vous ai donné, rajoutez ceci juste avant le END SUB
Col.List = rng.ListColumns(2).DataBodyRange.Value
et le deuxième en sélectionnant dans la combobox : col (élément) nom
j'aimerais afficher le nom de l'adhérent, et c'est là que je rencontre des soucis avec la méthode listview
Je ne comprends pas trop pourquoi vous utilisez une listview pour afficher juste un nom. Si je comprends bien vous voulez faire un choix dans la combobox et n'afficher que le nom dans la listview. Juste ?
Question : est-ce que vous pouvez avoir des doublons de nom ou pas ?
Merci dan pour le temps consacré
C'est un gros fichier que j'aurai à traiter, j'ai beaucoup de colonnes et ce petit fichier permet de ne pas écrire beaucoup de code
et d'aller plus rapidement dans la zone à modifier
il semblerait que la listview est mieux que la listebox
dans les noms j'aurai des doublons parce qu'il y a aura des familles
Bonjour,
Au vu de votre fichier et de vos 2 derniers posts, voici ce que vous devez modifiez
1. Option Explicit, juste en dessous remplacez toutes les DIM par ceci :
Dim rng As ListObject
2. Code Initialize : remplacez-le par celui ci-dessous (désolé mais j'ai dû adapter...
Private Sub UserForm_Initialize()
'ajout des denominations colonnes
With ListView1
With .ColumnHeaders
.Add Text:="ID", Width:=60
.Add Text:="Nom", Width:=60
.Add Text:="Prénom", Width:=50
.Add Text:="Age", Width:=50
.Add Text:="Date", Width:=50
End With
.Gridlines = True 'Affiche les lignes
.View = lvwReport 'Style d'affichage
.FullRowSelect = True 'Selectionner une ligne possible avec colorisation
.Sorted = True 'liste triée
End With
'charger combobox col sans doublons
Dim c As Range
Dim tbltmp As Collection
Dim item
Set rng = ThisWorkbook.Sheets("Feuil3").ListObjects(1)
Set tbltmp = New Collection
On Error Resume Next
For Each c In rng.ListColumns(2).DataBodyRange
tbltmp.Add c.Value, CStr(c.Value)
Next c
On Error GoTo 0
For Each item In tbltmp
Col.AddItem item
Next item
Call ajout
End Sub
3. Code Ajout : Nouveau code à ajouter dans votre USF. Je vous suggère de le placer en dessous de tous les autres
Private Sub ajout()
Dim tablo
Dim ncol As Byte, k As Byte
Dim i As Integer, ligne As Integer
tablo = rng.DataBodyRange.Value
ncol = rng.ListColumns.Count
ListView1.ListItems.Clear
'ajout des lignes
With ListView1
ligne = 1
For i = 1 To UBound(tablo)
.ListItems.Add , , tablo(i, 1)
For k = 2 To ncol
.ListItems(ligne).ListSubItems.Add , , tablo(i, k)
Next k
ligne = ligne + 1
Next i
End With
End Sub
4. Private Sub Col_Click(): remplacez le par celui ci-dessous
Private Sub Col_Change()
Dim i As Integer
If Col.Value = vbNullString Then
Call ajout
Exit Sub
End If
Call ajout
With ListView1
For i = .ListItems.Count To 1 Step -1
If .ListItems(i).ListSubItems(1) <> Col.Value Then
.ListItems.Remove (i)
End If
Next i
End With
End Sub
Faites un test de chargement USF et de choix dans la combobox col.
Le choix d'une valeur dans COL affichera uniquement les données correspondantes dans la listview
Si vous videz la combo COL, cela réaffiche toutes les données dans la listview
Le code Private Sub ListView1_Click() est à refaire également. Dites moi ce que vous voulez faire avec ce code
Bonjour le forum
Bonjour Dan
Ne pouvait répondre avant
Comme dit précédemment j'ai trouvé un petit fichier qui me répond à ce que j'aurai aimé faire
Toutefois, il a été réalisé avec une listbox et j'ai essayé de le passer sur une listview
et je ne parviens à trouver les méthodes de la listvies
Type SelectedItem etc
C'est la simplement mon problème par méconnaissance, je ne maîtrise pas la listview
J'ai appris que la listview était plus complète que la listbox j'ai voulu essayé
A partir des noms des colonnes on peut accéder à la partie que l'on veut modifier
je joins le fichier qui sera plus explicative
Un grand merci pour l'aide
Bonjour
C'est la simplement mon problème par méconnaissance, je ne maîtrise pas la listview
Vous me re-expliquez ce que vous avez déjà dit avant au sujet des listview....
Là avec votre dernier fichier on doit tout recommencer puisqu'il utilise une listbox.
Reprenez simplement le premier fichier que vous avez posté et qui reprend une listview comme vous voulez. Ensuite complétez-le en suivant pas à pas comme je vous ai expliqué dans mon dernier post.
Après on peut faire évoluer ensuite.