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,

Impossible n'est pas français :rolleyes:

Étant donné que Bebere est un pro de la boucle difficile ... très beaucoup meilleur que moi ... que penser de répéter la bouche sur les jours semaine, i.e. : utiliser deux lignes ...

Au premier passage :
.ListItems(.ListItems.Count).ListSubItems.Add , , Left(tbl(i, 4), 14)
Au deuxième passage :
.ListItems(.ListItems.Count).ListSubItems.Add , , Right(tbl(i, 4), 14)


Jecherche
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Jecherche, tu portes bien ton pseudo toi !

L'idée est très bonne dans la mesure où il est possible de changer la couleur des lignes à chaque changement des salariés !

Mais là ça dépasse mes compétences !



Max
 

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

bonjour
voilà un essai,il faut continuer à changer l'écriture des horaires en colonne D pour fonction mid
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) ': Exit For
Next j
Next i

ListView1.ListItems.Clear

'--------------------------------------------------------------------------------------------------------------

With ListView1
'Définit le nombre de colonnes et Entêtes
With .ColumnHeaders

.Clear

.Add , , "Nom", 80
For i = 0 To 6
.Add , , Jours(i), 80
Next i
End With
couleurref = &H0& '&H40C0&
For Each item In D.Items

.ListItems.Add , , item
.ListItems.Add , , item
x = .ListItems.Count
If x = 2 Then
couleur = couleurref 'couleur = .ListItems(x - 2).ListSubItems(4).ForeColor
ElseIf couleur = couleurref Then
couleur = &HFF00&
Else
couleur = couleurref
End If
.ListItems(x - 1).ForeColor = couleur
.ListItems(x).ForeColor = couleur
For i = 2 To UBound(tbl)
If tbl(i, 2) = item Then
For j = 2 To .ColumnHeaders.Count
If tbl(i, 3) = .ColumnHeaders(j) Then
.ListItems(x - 1).ListSubItems.Add , , Mid(tbl(i, 4), 1, 12)
.ListItems(x).ListSubItems.Add , , Mid(tbl(i, 4), 14)
c = c + 1
.ListItems(x - 1).ListSubItems(c).ForeColor = couleur
.ListItems(x).ListSubItems(c).ForeColor = couleur

Exit For
End If
Next j
End If
Next i
c = 0
Next item
.View = lvwReport
.LabelWrap = True
End With

'----------------------------------------------------------------------------------------
0
'----------------------------------------------------------------------------------------

End Sub
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Berbere, jecherche,


La mise en forme sur deux lignes avec changement de couleur fonctionne très bien !

Mais je viens de détecter un bug déjà présent dans la version antérieure.


Il semble qu'il y ai un petit déclage !

Vous pouvez le constatez dans le fichier en PJ.


Exemple: pour Paul BISMUTH, j'ai mis "test" à la date du 5 janvier 2016 or il apparaît dans la colonne du 4 janvier 2016 dans la listV.

Une idée ?

Merci par avance.
 

Pièces jointes

  • Planning Filtre V2.xlsm
    62.6 KB · Affichages: 86

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

bonjour max.lander,jecherche
fait un autre code,tableau a contient les données utiles
tableau B données arrangées pour listview
pas testé tout
 

Pièces jointes

  • Planning Filtre V4.xlsm
    79.2 KB · Affichages: 65

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Bonjour à tous, berbere, jecherche,

Berbere, on vient de changer de galaxy en terme de complexité du code, il va me falloir du boulot pour tout comprendre et encore pas sur d'y arriver.

Cette solution marche mais dès que l'on saisi un numéro de semaine supérieur à 15 on à une erreur d’exécution "5"

avec un break sur la ligne
a = Application.Transpose(a)






Max
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

max backcolor plus compliqué que forecolor
je pense que backcolor n'est pas une propriété de listview
un fichier exemple en pièce jointe
 

Pièces jointes

  • listviewColoré.xls
    74.5 KB · Affichages: 28

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Au vu de la complexité, on va oublier le backcolor pour le moment ! (merci pour le fichier exemple)

Berbère je m’aperçois que certaines dates ne remontent pas comme par exemple le 18 janvier 2016 de Paul BISMUTH de ton fichier V4

Tu as une idée sur ce BUG?

Max
 

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

dans Chargement_Listview
si j'ai un peu plus de temps je regarde pour backcolor
For i = 2 To UBound(b, 1)
For l = 1 To UBound(a, 1)'changé dans cette ligne,il y avait 2
If b(i, 1) = a(l, 1) Then
For j = 2 To UBound(b, 2)
If b(1, j) = a(l, 2) Then
b(i, j) = a(l, 3)
End If
Next j
End If
Next l
Next i
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Non toujours les 2 bugs :

Dés que numéro de semaine saisi est supérieur à 15 on à une erreur d’exécution "5"

avec un break sur la ligne

a = Application.Transpose(a)



Et certains horaires qui ne remonte pas exemple : le 18 janvier 2016 pour Paul BISMUTH.



Vraiment désolé pour les difficultés causées.


Max,
 

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

Max de mon côté j'ai bien le 18 janvier 2016 pour Paul BISMUTH
ajout d'un test dans textbox,si premier lundi pas dans base msgbox
tu me diras si c'est suffisant
 

Pièces jointes

  • Planning Filtre V5.xlsm
    77.6 KB · Affichages: 40

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Salut à tous,

Bebere merci beaucoup pour ton aide le matrice fonctionne parfaitement.

Je me permets d'ajouter une dernière demande si le remaniement du code n'est pas trop lourd. Dans le cas contraire on oublie.

Les entêtes sont devenues trop dynamique :confused: , elles s'adaptent au contenu de la base. donc si personne ne travaille ce jour là, la colonne n'existe pas dans le listview.

Au départ je souhaitais que les entêtes s'affichent en fonction du numéro de semaine saisi simplement
de manière à ce qu' une semaine complète soit toujours affichée. (comme dans les premières versions)


Dans tous les cas le résultat est top, bravo pour le code !



Max
 

max.lander

XLDnaute Occasionnel
Re : Alimenter Listview sous conditions dynamiques

Merci Bebere c'est vraiment du haut niveau !!!

Dernière petite chose, est il possible d'avoir la coloration à chaque changement de salarié?

De façon à distinguer les deux lignes pour chacun d'entre eux !

Merci pour ce beau boulot !
 

Bebere

XLDnaute Barbatruc
Re : Alimenter Listview sous conditions dynamiques

bonjour Max
regarde si tel que cela peut te convenir
pas su faire mieux avec ce code,il me faudrait quelques explications
ou bien il faut écrire un autre code
 

Pièces jointes

  • PlanningFiltreV6.xlsm
    83.7 KB · Affichages: 50

Discussions similaires

Réponses
4
Affichages
1 K

Statistiques des forums

Discussions
312 299
Messages
2 086 987
Membres
103 419
dernier inscrit
mk29