XL 2010 Alimenter Listview sous conditions dynamiques

max.lander

XLDnaute Occasionnel
Bonjour à tous,


Je rencontre un petit problème que je n'ai pas pu résoudre malgré les exemples trouvées sur le site.

Je dispose d'une base de données constituée ainsi :

Matricule - Nom - date journée- plage horaires

je souhaite faire remonter dans la Listview
les noms et les horaires seulement si pour les journées en questions (entête listview), il existe une plage horaire dans la base.

Si pour une semaine données, un salarié n'a pas de plage horaire dans la base, il ne doit pas remonter dans la liste.

Les entêtes de la Listview sont des dates dynamiques qui change en fonction du numéros de semaine.



Franchement ça me semble assez complexe

vous trouverez mon fichier en PJ.

Merci pour vos conseils,


Max
 

Pièces jointes

  • Planning Filtre.xlsm
    58.8 KB · Affichages: 78
Dernière édition:

jecherche

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour,

À tester si ça convient ...
Code:
Private Sub UserForm_Initialize()
TextBox_NumSemaine.Value = 1

Call Premier_JourSem
'''Call Chargement_Listview
Dim Cell As Range
Dim X As Byte
Dim k As Integer
Dim Kb As Integer
Dim Ws As Worksheet
Dim Wsb As Worksheet

Set Ws = Worksheets("Base WPL")
Set Wsb = Worksheets("Base")

k = Ws.Range("A65536").End(xlUp).Row
Kb = Wsb.Range("A65536").End(xlUp).Row

ListView1.ListItems.Clear

    'La premiere ligne, de la colonne A à J contient les entêtes.
With ListView1
   With .ColumnHeaders
      .Clear
      .Add , , Ws.Cells(1, 1), 40
      .Add , , Ws.Cells(1, 2), 100
      .Add , , Ws.Cells(1, 3), 80
      .Add , , Ws.Cells(1, 4), 140
   End With

        'Les autres lignes contiennent les données
For Each cellb In Wsb.Range("A2:A" & Kb)
   For Each Cell In Ws.Range("A2:A" & k)
      If Cell = cellb Then
         X = X + 1
         .ListItems.Add , , Cell
         .ListItems(X).ListSubItems.Add , , Cell.Offset(0, 1)
         .ListItems(X).ListSubItems.Add , , Cell.Offset(0, 2)
         .ListItems(X).ListSubItems.Add , , Cell.Offset(0, 3)
         .ListItems(X).ListSubItems.Add , , Cell.Offset(0, 4)
      End If

   Next Cell
Next cellb
End With
End Sub


Jecherche
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Salut Jecherche,

Merci pour ta proposition mais c'est pas tout a fait ce que je souhaite, les entêtes sont dynamiques et correspondent au jours de la semaine en fonction du numéro de semaine.

Je souhaite une Listview qui ressemble à ceci :

Semaine : 1


__________________Lundi - Mardi - Mercredi - jeudi - vendredi - Samedi - Dimanche
Entête_______________04/01/16 05/01/16 06/01/16 07/01/16 08/01/16 09/01/16 10/01/16

P. BISMUTH __________Horaires Horaires Horaires Horaires Horaires Horaires Horaires

K. BELDO____________ Horaires Horaires Horaires Horaires Horaires Horaires Horaires



Seulement si ces personnes ont des plages horaires sur la semaine sélectionnée.


Les entêtes sont déjà générée automatiquement en fonction du numéro de semaine depuis la procédure Premier_JourSem

J’espère que je suis plus clair.


Max
 
Dernière édition:

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour à tous,

Berbere merci pour cette proposition c'est exactement ce que je cherche.
Toutefois, il y a un petit beug dans cette version quand je tape certains numéros
de semaine sans plage horaires pour des salariés ils apparaissent quand même dans la listview.

exemple semaine 2, 53...

Merci encore


Max
 

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

bonjour max.lander
juste changer la ligne commentée enlever month
Sub Chargement_Listview()
Dim D As New dictionary, item As Variant

For i = 0 To UBound(Jours)

For j = 2 To UBound(tbl) 'NumSem
If tbl(j, 3) = Jours(i) Then D(tbl(j, 2)) = tbl(j, 2) 'enlever month
Next j
Next i

ListView1.ListItems.Clear
 

jecherche

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour,

Pour retrouver les jours semaines "Lundi" ... etc. Ce pourrait être des labels au dessus du listview

Jecherche
 
Dernière modification par un modérateur:

jecherche

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour,

Aussi, en alignant le texte des colonnes à droite, les plages horaires se lient mieux.

Code:
   With ListView1
        'Définit le nombre de colonnes et Entêtes
        With .ColumnHeaders
            .Clear
            .Add , , "Nom", 132
         
            For i = 0 To 6
                .Add , , Jours(i), 132, lvwColumnRight  ' ici pour l'alignement à droite
        
            Next i
        End With
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Salut à tous, jecherche, berbere,

Merci pour toutes vos propositions ça fonctionne très bien.

Pour en revenir à la lisibilité, j'ai ajouté le propriété lvwColumnRight c'est largement mieux.

Pour aller plus loin savez-vous s'il est possible d'aller à la ligne dans un listview pour afficher mes horaires de la sorte :

9:00-12:00
14:00-18:00

Merci,

Max,
 

jecherche

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour,

As-tu remarqué, en faisant du pas-à-pas dans la macro "Chargement_Listview" ... le "UBound(tbl) voir les cellules avec pourtour noir même si elles sont vides ... i.e "UBound(tbl)" voit jusqu'à la ligne 2296 malgré que les données se terminent à la ligne 101 dans l'exemple ?


Jecherche
 

Discussions similaires

Réponses
4
Affichages
1 K

Statistiques des forums

Discussions
312 300
Messages
2 087 018
Membres
103 433
dernier inscrit
nicolaseuropa