Soucis avec 2 Listviews
Bonjour a tous, bonjour forum
Dans mon UserForm(1)
J'ai une Listview (1) avec case a cochée
J'ai une Listview (2) sans case a cochée
Lorsque je clic dans la listview (1) pour une sélection la case est coché et la ligne passe en bleu
Si je clic dans la Listview (2) pour une sélection la ligne passe en bleu
Mais ca fait passer la ligne qui était coché dans la Listview (1) en gris et la case reste coché
En fait si clic dans la (1) , la (2) est désélectionner et pareil inversement
Je ne vois pas pourquoi que une agisse sur l'autre alors quelle sont bien séparées
J'ai penser peut être (perte de focus hum) ?????
Si quelqu'un a une idée sur le sujet, je suis preneur.
Merci a vous et de votre aide
Cdlt Raymond
Salut Raymond,
Je pense qu'avec un fichier-exemple à disposition, tu recevrais plus d'aide, non ?
Amicalement.
Bonjour les forumeurs
Je pense effectivement que le souci vient de la perte du focus
il suffit donc d' utiliser la propriété mousemove de la listview2 et de lui redonner le focus
Private Sub ListView2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
Me.ListView2.SetFocus
End Sub
J'espère que cela suffira à résoudre votre problème
Salut a vous, salut forum
Merci pour les réponses,
Mais je ne peux pas mettre le fichier, sinon je l'aurai déjà mis lors de ma demande.
j'ai essayer le code proposer, mais hélas ca ne fonctionne pas.
Ce n'ai pas grave
bonne soirée a vous bon W-end
Cdlt Ray
Je ne comprends pas très bien pourquoi : s'il est trop gros, il y a 36 manières de contourner le problème, s'il est confidentiel, tu peux en faire une copie neutralisée. Mais bon, c'est ton problème si tu préfères te passer de l'aide de la communautéeliot raymond a écrit :Mais je ne peux pas mettre le fichier
bonsoir yvouille
non absolument pas envie de me passer la communauté qui m'a rendu bien des services, je remercie au passage tous les gens qui apporter aide et savoir.
c'est que des fois il n'ai pas toujours utile de le crier sur les toits.
je vois demain si je peux faire quelque chose et je mettrai le fichier.
Bonne soirée a toi et merci de vouloir m'aider.
Cdlt Raymond
Bonsoir Raymond
Avez-vous essayé de faire la macro pour chaque listview
Private Sub ListView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
Me.ListView1.SetFocus
End Sub
Private Sub ListView2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
Me.ListView2.SetFocus
End Sub
Salut Bob71au,
Merci pour ta réponse
j'ai fait l'essai mais encore hélas ça fonctionne pas encore.
Quand je suis dans la listview1 les sélections sont bien en bleus mais quand je
déplace la souris dans la listview2
alors dans la listview1 la ligne qui était sélectionner et en bleu se trouve grisé
idem inversement
Bon dimanche et merci
Cdlt Ray
Bonjour Raymond
C'est normal que l'on ne puisse pas avoir les deux de selectionnés
C'est la même chose que des textbox. je ne peux pas en sélectionner deux en même temps
la macro que j'ai fourni, redonne le focus a la listview afin d'éviter de cliquer et de changer de ligne involontairement
mais un seul objet prend le focus
Salut Bob
Je vais créer un fichier avec deux listviews et coder de la même façon que sur mon
programme et que je posterai dès que terminer.
j'ai pourtant chercher de la doc sur le net a propos des listviews a croire que je n'ai
pas bien chercher, bon c'est pas impossible
Merci a toi d'avoir pris le temps de me répondre
bon dimanche a toi, merci.
Cdlt Raymond
Salut a tous,
Voila le fichier alléger
Juste les deux Listviews pour les explications, voir svp mon premier post.
Plus d'infos.
Pas d'entêtes dans les deux Listviews
Bien cliquer dans le CheckBox (4) qui sert a transférer les données.
- -des colonnes A B C D vers Listview(1)
- -des colonnes E F G vers Listview(2)
But pour Listview(1) sans Multisélection juste une ligne a la fois.
- On clic dans la case qui se coche bien, puis sélection de la ligne en bleu.
- Et non pas de sélection par la ligne qui coche les cases.
-On garde la sélection de la ligne, jusqu'à la prochaine sélection.
Pour Listview(2) me sert uniquement pour infos qui me seront utiles par la suite.
Toutefois je garde la sélection en bleu pour une meilleure lisibilité.
Je reste a votre écoute pour tous besoins.
Merci a tous pour votre aide.
Bien cordialement Raymond
Le fichier joint n'est pas fonctionnel.
Les deux modules sont vides !
Re
Oui juste les deux listview 1 et 2 fonctionne c'est juste pour essai afin de voir ce qu'il ne va pas
d'où ce post voir explications au début
ouvre usf et clic bien juste sur le checkbox 4 ca va remplir les deux listviews
je viens d'essayer encore c'est bon
merci de t'interresser
Cdlt Ray
Bonsoir Raymond
je ne sais pas s'il existe une solution pour le focus
dans cet exemple, je passe le texte en rouge lors de la selection et la souris revient toujours sur la ligne selectionnée
Bonsoir Bob
merci pour la modification
Pour la listview(1) ca m'a l'air d'être bon a voir dans le temps
Par contre la listview(2) heu un coup bleu, un coup rouge pas trop glop glop
mais je n'ai pas besoin de faire de sélection dans la listview (2)
juste garder la dernière que je mets en bleu afin de savoir laquelle j'ai vu en dernier
merci pour ton aide la bonne soirée a toi
je vois ca demain matin resto en vue
Cdlt Ray
Re
un copier coller vite fais. j'ai remis en noir
mais j'ai mis de on error pour aller plus vite
le code sera à affiner si l'idée convient
Salut Bob,
Merci pour la modification
Pour la listview(1) ça m'a l'air d'être bon, je verrai bien a l'usage.
Pour la lisview(2) presque bon aussi
- -Quand on sort de la listview(2) seule la première colonne reste en rouge.
- -Peut t'on mettre aussi dans listview(1) et listview(2) en rouge les autres colonnes.
Sinon, je te laisse affiner car ton idée
Merci a toi, je te souhaite la bonne semaine.
Cordialement Raymond
Bonjour Ray
remplacer le code de l'user par celui ci
Option Explicit
Public WS As Worksheet: Public i
Private Sub ListView2_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim i
On Error Resume Next
ListView2.ListItems(Mem1).ForeColor = &H80000008 '.ListSubItems(1)
For i = 1 To 3
ListView2.ListItems(Mem1).ListSubItems(i).ForeColor = &H80000008 '
Next i
ListView2.SelectedItem.ForeColor = vbRed '.ListSubItems(1)
For i = 1 To 3
ListView2.SelectedItem.ListSubItems(i).ForeColor = vbRed '
Next i
Mem1 = Item.Index
End Sub
'########## USERFORM INITIALIZE #################################################
Private Sub UserForm_Initialize()
Dim C1 As String, Haut As Integer, Larg As Integer: Dim DernLigne As Long
Set WS = Sheets("feuil1")
'### Listview1 et feuil1
With UserForm1.ListView1
.HideColumnHeaders = True 'Cacher les entètes de colonne
.ListItems.Clear 'Efface tous les Items de la Listview
.CheckBoxes = True 'Affiche les checkboxs a gauche
.MultiSelect = False 'True égal multi-sélection de lignes
.HideSelection = True 'Cache ligne pas la ligne sélection
With .ColumnHeaders 'Titres et largeur des colonnes
'*** Ajout des colonnes et centrages
.Add , , WS.Range("A1"), 281, lvwColumnLeft 'Nom du film
.Add , , WS.Range("B1"), 86, lvwColumnRight 'Poids du film
.Add , , WS.Range("C1"), 52, lvwColumnCenter 'Durée du film
.Add , , WS.Range("D1"), 30, lvwColumnCenter 'Numéro du film
End With
.View = 3 'lvwReport 'Affichage en mode Rapport ou 3
.Gridlines = True 'Affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes complètes
.LabelEdit = 1 'lvwManual 'On ne modifie pas en direct ou 1
End With
'### Listview2 et feuil1
With UserForm1.ListView2
.HideColumnHeaders = True 'Cacher les entètes de colonne
.ListItems.Clear 'Efface tous les Items de la Listview
.CheckBoxes = False 'Affiche les checkboxs a gauche
.MultiSelect = False 'True égal multi-sélection de lignes
.HideSelection = True 'Cache ligne pas la ligne sélection
With .ColumnHeaders 'Titres et largeur des colonnes
'*** Ajout des colonnes et centrages
.Add , , WS.Range("E1"), 45, lvwColumnLeft 'Nom des films sans Durée
.Add , , WS.Range("F1"), 28, lvwColumnRight 'Numéro du film
.Add , , WS.Range("G1"), 160, lvwColumnLeft 'Nom du film correspondant
End With
.View = 3 'lvwReport 'Affichage en mode Rapport ou 3
.Gridlines = True 'Affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes complètes
.LabelEdit = 1 'lvwManual 'On ne modifie pas en direct ou 1
End With
End Sub
'### SELECTION D'UN FILM DANS LISTVIEW(1)
Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Dim i As Integer: Dim FilmSelection As String: Dim Nvid
With ListView1
' If Nvid > 0 Then ListView1.ListItems(Nvid).Checked = False
' If Nvid < 1 Then Nvid = Item.Index
' ListView1.ListItems(Nvid).Selected = False
'
' ListView1.ListItems(Item.Index).Selected = ListView1.ListItems(Item.Index).Checked
' Nvid = Item.Index
' Label106.Caption = " Indice du film sélectionner : " & Nvid 'Affiche l'index donc le N° du film
'*** On coche une case de la listview(1) pour sélection d'un film
For i = 1 To ListView1.ListItems.Count
If i = Item.Index Then
ListView1.ListItems(i).Selected = True
Else
ListView1.ListItems(i).Checked = False
ListView1.ListItems(i).Selected = False
End If
Next i
On Error Resume Next
.ListItems(Mem).ForeColor = vbBlue '.ListSubItems(1)
For i = 1 To 3
.ListItems(Mem).ListSubItems(i).ForeColor = vbBlue '
Next i
.SelectedItem.ForeColor = vbRed '.ListSubItems(1)
For i = 1 To 3
.SelectedItem.ListSubItems(i).ForeColor = vbRed '
Next i
Mem = Item.Index
End With
FilmSelection = ListView1.ListItems.Item(ListView1.SelectedItem.Index)
Label91.Caption = Left(FilmSelection, Len(FilmSelection) - 4) '& ".avi" 'Affiche titre du film a visionner sans extension .avi
WindowsMediaPlayer1.URL = "H:\" & FilmSelection 'Lance et visualise le film avec le nom complet
WindowsMediaPlayer1.Width = 240 'Largeur du WMP
WindowsMediaPlayer1.Height = 243 'Hauteur du WMP
WindowsMediaPlayer1.uiMode = "Full" 'Mode "Full Mini None Invisible"
End Sub
'### REMPLISSAGE LISTVIEW1(1)
Public Sub InitListView1()
Dim NF: Dim j As Long: Dim Nb As Integer
j = 0
ListView1.ListItems.Clear 'Efface juste les items pas les colonnes
With UserForm1.ListView1 'Remplissage Listview1
NF = WS.Range("A" & Rows.Count).End(xlUp).Row
For j = 1 To NF 'On remplit la première colonne de la Listview1
.ListItems.Add , WS.Range("A" & j).Address, WS.Range("A" & j)
Nb = Nb + 1 'On remplit les autres colonnes de la listview1
.ListItems(Nb).ListSubItems.Add , , WS.Range("B" & j)
.ListItems(Nb).ListSubItems.Add , , WS.Range("C" & j) ', "hh:mm:ss") 'Format durée (hh:mm:ss)
.ListItems(Nb).ListSubItems.Add , , WS.Range("D" & j) 'Numéro du film
Next j
End With
ListView1.ListItems(1).Selected = False 'Désactive et dé-grise la première ligne de la Listview1
Set ListView1.SelectedItem = Nothing
End Sub
'### REMPLISSAGE LISTVIEW2(2)
Public Sub InitListView2()
Dim NF: Dim j As Long: Dim Nb As Integer
j = 0
ListView2.ListItems.Clear 'Efface juste les items pas les colonnes
With UserForm1.ListView2 'Remplissage Listview2
NF = WS.Range("E" & Rows.Count).End(xlUp).Row
For j = 1 To NF 'On remplit la première colonne de la Listview2
.ListItems.Add , WS.Range("E" & j).Address, WS.Range("E" & j)
Nb = Nb + 1 'On remplit les autres colonnes de la listview2
.ListItems(Nb).ListSubItems.Add , , WS.Range("F" & j)
.ListItems(Nb).ListSubItems.Add , , WS.Range("G" & j)
Next j
End With
ListView2.ListItems(1).Selected = False 'Désactive et dé-grise la première ligne de la Listview2
Set ListView2.SelectedItem = Nothing
End Sub
'### CHECKBOX(4)
Private Sub CheckBox4_Change()
Select Case CheckBox4.Value
Case True: Label97.Caption = " Le transfert de la colonne [A] vers la Listview [1] viens de démarrer"
Label97.BackColor = vbRed
Call InitListView1
Call InitListView2
Label97.BackColor = vbGreen
Label97.Caption = " Le transfert de la colonne [A] vers la Listview[1] est terminer"
Case Else: Label97.BackColor = &HC0C0C0
Label97.Caption = " Recopiage de la colonne [A] vers la Listview [1]"
End Select
End Sub
'###
Private Sub ListView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
On Error Resume Next
ListView1.ListItems(Mem).Selected = True
Me.ListView1.SetFocus
End Sub
'###
Private Sub ListView2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
On Error Resume Next
ListView2.ListItems(Mem1).Selected = True
Me.ListView2.SetFocus
End Sub
'ListView1.SetFocus
'If ListView1.ListItems.Count <> 0 Then ListView1_ItemClick ListView1.SelectedItem