2 listview dans un seul fichier Excel ?

IDB

XLDnaute Nouveau
Bonsoir à tous,

Je me posais une question (enfin à moi une question et à vous un petit problème) : est-il possible d'avoir deux listview sur un même fichier Excel ?

Je m'explique : j'ai un fichier pour gérer les temps passés de mes collègues sur chaque dossier. La première listview (qui marche très bien , merci Gael) me permet en cliquant sur un numéro de dossier dans la colonne A de connaître toutes les personnes ayant travaillé sur ce dossier, le temps qu'elles y ont passé, ...

Cepdendant, sur le même fichier, j'aimerais qu'en cliquant sur le nom de l'opérateur dans la colonne B, là ce soit tous les dossiers sur lesquels il a travaillé qui apparaissent (un peu l'inverse de ma première listview quoi).

J'ai bien créer un Userform2 + module2 pour cette occasion.

En l'exécutant par Visual, l'Userform2 apparait --> pas d'erreur. Rien ne m'indique que mes codes soient faux. MAIS l'UserForm2 est vide.

Est-ce que je me serais trompé dans les codes ou j'aurais oublié quelque chose (mais j'ai recopié la première listview qui fonctionne parfaitement ??) ou alors est-ce qu'il est impossible d'avoir deux listview sur un seul fichier (je ne pense pas car l'Userform2 apparait sous Visual). :confused:

J'ai mis le fichier sur le site cijoint.fr : il est un peu gros pour XLD.

Gestion7001.xls

J'espère avoir été compréhensible :eek:.

Merci d'avance pour vos réponses.

A+

IDB
 

ledzepfred

XLDnaute Impliqué
Re : 2 listview dans un seul fichier Excel ?

Bonsoir,

1) le nom de la procédure
Code:
Private Sub Worksheet_BeforeDoubleClick[COLOR="Red"]1[/COLOR](ByVal Target As Range, Cancel As Boolean)
est incorrecte et tu ne peux avoir deux procédure de même nom dans le même feuillet, correction : regrouper les deux codes dans la même procédure
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Range("a6:a1250"), Target) Is Nothing Then
    Cancel = True
    dossier = Target.Value
    UserForm1.Show
End If
If Not Application.Intersect(Range("b6:b1250"), Target) Is Nothing Then
    Cancel = True
    operateur = Target.Value
    UserForm2.Show
End If
End Sub
2) la procédure d'initialisation du userform2 de ton fichier est : (en rouge les erreurs avec commentaires en vert
Code:
Private Sub UserForm_Initialize[COLOR="red"]1[/COLOR]()[COLOR="SeaGreen"] '1 à supprimer[/COLOR]
Dim d As Range, j As Integer[COLOR="red"], test As Integer [/COLOR][COLOR="seagreen"]'si test = operateur alors test est de type string comme operateur (à supprimer)[/COLOR]
Application.ScreenUpdating = False
[COLOR="red"]test = operateur[/COLOR] [COLOR="seagreen"]' à supprimer inutile[/COLOR]
ListView2.View = lvwReport
ListView2.FullRowSelect = True
Sheets("Données").Activate
Me.ListView2.ColumnHeaders.Clear 'on remplit les entetes de colonnes de la listview
With Me.ListView2.ColumnHeaders
            .Add , , "Date", 60
            .Add , , "Dossier", 30, lvwColumnCenter
            .Add , , "H. terrain", 53, lvwColumnCenter
            .Add , , "H. bureau", 53, lvwColumnCenter
            .Add , , "H. dossier", 53, lvwColumnCenter
            .Add , , "Travail effectué", 127
End With
Label1.Caption = "Opérateur : " & operateur
Me.ListView2.ListItems.Clear
j = 1
With Worksheets("Données")
.Range("b6").AutoFilter Field:=[COLOR="red"]1[/COLOR], Criteria1:=operateur [COLOR="seagreen"]'si field=1 on va filtrer sur la colonne 1 (à remplacer par 2)[/COLOR]For Each d In .Range("b6", [b65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
    Me.ListView2.ListItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, 1)
    Me.ListView2.ListItems([COLOR="red"]i[/COLOR]).ListSubItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, -1)
    Me.ListView2.ListItems([COLOR="red"]i[/COLOR]).ListSubItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, 2)
    Me.ListView2.ListItems([COLOR="red"]i[/COLOR]).ListSubItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, 3)
    Me.ListView2.ListItems([COLOR="red"]i[/COLOR]).ListSubItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, 5)
    Me.ListView2.ListItems([COLOR="red"]i[/COLOR]).ListSubItems.Add , , [COLOR="red"]c[/COLOR].Offset(0, 4)
[COLOR="seagreen"]'les i sont à remplacer par j et les c par d[/COLOR]
    j = j + 1
Next d
End With
Worksheets("Données").Range("a1").AutoFilter
[COLOR="red"]Application.ScreenUpdating = True[/COLOR][COLOR="seagreen"] ' à supprimer inutile[/COLOR]
End Sub

ci-dessous le code d'initialisation de ton userform2 corrigé
Code:
Private Sub UserForm_Initialize()
Dim d As Range, j As Integer
Application.ScreenUpdating = False
ListView2.View = lvwReport
ListView2.FullRowSelect = True
Sheets("Données").Activate
Me.ListView2.ColumnHeaders.Clear 'on remplit les entetes de colonnes de la listview
With Me.ListView2.ColumnHeaders
            .Add , , "Date", 60
            .Add , , "Dossier", 30, lvwColumnCenter
            .Add , , "H. terrain", 53, lvwColumnCenter
            .Add , , "H. bureau", 53, lvwColumnCenter
            .Add , , "H. dossier", 53, lvwColumnCenter
            .Add , , "Travail effectué", 127
End With
Label1.Caption = "Opérateur : " & operateur
Me.ListView2.ListItems.Clear
j = 1
With Worksheets("Données")
.Range("b6").AutoFilter field:=2, Criteria1:=operateur
For Each d In .Range("b6", .[b65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
    Me.ListView2.ListItems.Add , , d.Offset(0, 1)
    Me.ListView2.ListItems(j).ListSubItems.Add , , d.Offset(0, -1)
    Me.ListView2.ListItems(j).ListSubItems.Add , , d.Offset(0, 2)
    Me.ListView2.ListItems(j).ListSubItems.Add , , d.Offset(0, 3)
    Me.ListView2.ListItems(j).ListSubItems.Add , , d.Offset(0, 5)
    Me.ListView2.ListItems(j).ListSubItems.Add , , d.Offset(0, 4)
    j = j + 1
Next d
End With
Worksheets("Données").Range("b6").AutoFilter
End Sub
Ai testé cela fonctionne

A+
 
Dernière édition:

ledzepfred

XLDnaute Impliqué
Re : 2 listview dans un seul fichier Excel ?

re,

tu peux te passer des variables publiques dossier et operateur puisque tes userform s'affiche par double clic sur la cellule active

voir fichier joint, ai supprimé les 2 modules, ai supprimer les lignes
Code:
dossier=target.value
operateur=target.value
de la procédure worksheet...

Dans les deux userform j'ai remplacé dossier et operateur par activecell

A+
 

Pièces jointes

  • gestion7001.xls.zip
    211.8 KB · Affichages: 64

Discussions similaires

Réponses
19
Affichages
1 K
Réponses
36
Affichages
1 K

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa