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

eliot raymond a écrit :

Mais je ne peux pas mettre le fichier

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é

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

39repertoire-037.xlsm (150.86 Ko)

Le fichier joint n'est pas fonctionnel.

Salut Patrice,

Il fonctionne chez moi je viens de l'essayer

Peut être qu'il manque des références

je post ce que j'ai pour ce fichier

Voila c'est fait, merci

Cdlt Ray

reference

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.
c'est bon mais la ligne entière en rouge serait très bien svp.

Sinon, je te laisse affiner car ton idée me convient très bien.

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
Rechercher des sujets similaires à "soucis listviews"