Microsoft 365 Filtrer un Listview

TCHIS

XLDnaute Occasionnel
Bonjour à tous.

Je me tourne vers vous car dans l'urgence de la concrétisation de mon projet il faut que j'avance grandement.

En gros je me trouve sur ma ListView que j'ai initialisé et sur laquelle je souhaiterai appliqué des filtres.

*****Les Filtres en questions je souhaiterai qu'il en est sur plusieurs critères précisément 8 critères :
  1. Site
  2. Métier
  3. Fréquence
  4. Etat
  5. Niveau de validité
  6. Année
  7. Mois
  8. Semaine
Aussi si possible avoir le nombre d'enregistrement qui s'adapterait aux filtres quand ceux-ci sont actifs.
En plus de cela si possible lorsqu'on applique les filtres ceux -ci n'affecte pas la tables.
En fichier joint vous avez le fichier Excel sur lequel je travail et un extrait d'une démo que j'ai pu avoir et qui illustre grandement ce que je souhaiterai pour mon projet toutefois je ne sais pas comment m'y prendre pour l'instant pour appliquer cette démo.
 

Pièces jointes

  • TCHIS.xlsm
    65 KB · Affichages: 9
  • 1084449-529bee7abc14167c527124c3e7de58ff.gif
    1084449-529bee7abc14167c527124c3e7de58ff.gif
    8.5 KB · Affichages: 35

vgendron

XLDnaute Barbatruc
Bonjour et bienvenu

où sont tes critères à appliquer?

déjà.. pour le chargement de la listview, exploite le fait que tes données sont sous forme de table strucuturée..
ca évite les A65536.rows.....

ton image ne sert à rien.. elle est meme illisible car trop petite..
il vaut mieux expliquer de quel formulaire tu parles

VB:
Private Sub UserForm_Initialize()
'Déclaration de variable
Dim j As Integer
Dim x As ListItem
Dim i As Integer
Dim madate As Date
'*******************************
'Code pour attribuer l'image au
'Backgrown du UserFormOpen
'*******************************
With UserFormOpen
    .Picture = LoadPicture("C:\Users\Tchis\Desktop\DTC-S.A.S\Images\Image1.jpg")   'Le chemin d'accès pour l'image de fond est à prendre en compte
    .PictureSizeMode = fmPictureSizeModeStretch                                    'Lorsqu'il s'agira de l(insérer sur le réseau il faut à tout prix
    .Height = Me.Height                               ' Mettre l'image sur réseau puis c'est son chemin d'accès qui viendra etre mis dans le code VBA
End With
'**********************************************************************
'Code permettant de rendre transparent Frame1 (Générer un nouveau suivi)
'***********************************************************************
'**********************************************************************
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
'**********************************************************************
'**********************************************************************
Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
With img
    .Move 0 - Frame1.Left - 1, 0 - Frame1.Top - 1, Me.InsideWidth, Me.InsideHeight
    .Picture = Me.Picture
    .PictureSizeMode = Me.PictureSizeMode
    .ZOrder 1
End With

'******************************
'Suite Code pour ne pas afficher l'interfaceMenu(Frame2)
'au lancement de la userFormOpen
'******************************
Me.Frame2.Left = Me.Width
    
'***********************************
'***********************************
'Code pour avoir des valeurs par défauts
'à l'ouverture du USF
'***********************************
'***********************************

TextBox4 = Year(Now) 'Pour avoir l'année auto en valeur par défaut  à l'ouverture du USF
TextBox6 = StrConv(Format(Date, "mmmm"), vbProperCase) 'Pour avoir le Mois auto par défaut  à l'ouverture du USF
TextBox8 = Format(DatePart("ww", Now, vbMonday, vbFirstFourDays), "\S00")   'Pour avoir la semaine d'enregistrement par défaut à l'ouverture du USF

Me.TextBox10.Value = Format(Date, "dd/mm/yyyy") 'Pour avoir la date d'enregistrement par défaut à l'ouverture du USF
If Sheets("Source").Range("A3").Value = "" Then
    Me.TextBox2.Value = 1
Else
    Me.TextBox2.Value = Application.Max(Sheets("Source").Columns(1)) + 1
End If
 
'***********************************************************************
'***********************************************************************
'Code permettant d'initailiser ma listview au démarrage de mon USF
'***********************************************************************
'***********************************************************************
          
Me.ListView1.View = lvwReport

With Sheets("Source").ListObjects("Tbl_Datas") 'charger les en-tetes de la ListView1 à partir de la ligne d'entete de la table "Tbl_Datas"
    For j = 1 To .HeaderRowRange.Columns.Count
        Me.ListView1.ColumnHeaders.Add , , .HeaderRowRange(j)
    Next j
    For i = 1 To .ListRows.Count
         Set x = Me.ListView1.ListItems.Add(, , .DataBodyRange(i, 1)) 'on créé l'item principal = nouvelle ligne
         For j = 2 To .ListColumns.Count 'on crée les sous item = autres colonnes de la ligne
            x.ListSubItems.Add , , .DataBodyRange(i, j)
        Next j
    Next i
End With
End Sub
 

TCHIS

XLDnaute Occasionnel
Bonjour et bienvenu

où sont tes critères à appliquer?

déjà.. pour le chargement de la listview, exploite le fait que tes données sont sous forme de table strucuturée..
ca évite les A65536.rows.....

ton image ne sert à rien.. elle est meme illisible car trop petite..
il vaut mieux expliquer de quel formulaire tu parles

VB:
Private Sub UserForm_Initialize()
'Déclaration de variable
Dim j As Integer
Dim x As ListItem
Dim i As Integer
Dim madate As Date
'*******************************
'Code pour attribuer l'image au
'Backgrown du UserFormOpen
'*******************************
With UserFormOpen
    .Picture = LoadPicture("C:\Users\Tchis\Desktop\DTC-S.A.S\Images\Image1.jpg")   'Le chemin d'accès pour l'image de fond est à prendre en compte
    .PictureSizeMode = fmPictureSizeModeStretch                                    'Lorsqu'il s'agira de l(insérer sur le réseau il faut à tout prix
    .Height = Me.Height                               ' Mettre l'image sur réseau puis c'est son chemin d'accès qui viendra etre mis dans le code VBA
End With
'**********************************************************************
'Code permettant de rendre transparent Frame1 (Générer un nouveau suivi)
'***********************************************************************
'**********************************************************************
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
'**********************************************************************
'**********************************************************************
Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
With img
    .Move 0 - Frame1.Left - 1, 0 - Frame1.Top - 1, Me.InsideWidth, Me.InsideHeight
    .Picture = Me.Picture
    .PictureSizeMode = Me.PictureSizeMode
    .ZOrder 1
End With

'******************************
'Suite Code pour ne pas afficher l'interfaceMenu(Frame2)
'au lancement de la userFormOpen
'******************************
Me.Frame2.Left = Me.Width
   
'***********************************
'***********************************
'Code pour avoir des valeurs par défauts
'à l'ouverture du USF
'***********************************
'***********************************

TextBox4 = Year(Now) 'Pour avoir l'année auto en valeur par défaut  à l'ouverture du USF
TextBox6 = StrConv(Format(Date, "mmmm"), vbProperCase) 'Pour avoir le Mois auto par défaut  à l'ouverture du USF
TextBox8 = Format(DatePart("ww", Now, vbMonday, vbFirstFourDays), "\S00")   'Pour avoir la semaine d'enregistrement par défaut à l'ouverture du USF

Me.TextBox10.Value = Format(Date, "dd/mm/yyyy") 'Pour avoir la date d'enregistrement par défaut à l'ouverture du USF
If Sheets("Source").Range("A3").Value = "" Then
    Me.TextBox2.Value = 1
Else
    Me.TextBox2.Value = Application.Max(Sheets("Source").Columns(1)) + 1
End If
 
'***********************************************************************
'***********************************************************************
'Code permettant d'initailiser ma listview au démarrage de mon USF
'***********************************************************************
'***********************************************************************
         
Me.ListView1.View = lvwReport

With Sheets("Source").ListObjects("Tbl_Datas") 'charger les en-tetes de la ListView1 à partir de la ligne d'entete de la table "Tbl_Datas"
    For j = 1 To .HeaderRowRange.Columns.Count
        Me.ListView1.ColumnHeaders.Add , , .HeaderRowRange(j)
    Next j
    For i = 1 To .ListRows.Count
         Set x = Me.ListView1.ListItems.Add(, , .DataBodyRange(i, 1)) 'on créé l'item principal = nouvelle ligne
         For j = 2 To .ListColumns.Count 'on crée les sous item = autres colonnes de la ligne
            x.ListSubItems.Add , , .DataBodyRange(i, j)
        Next j
    Next i
End With
End Sub
Bonjour meci d'avoir pris de votre temps pour consulter mon fichier.

Alors le USF concerné et donc où se trouve ma LitView est le USF nommé Userformpen.

Pour ce qui en est des critères on a ici:
  1. Sites (ALIMA, DJENO, LIKOUF, NKOSSA,NORD)
  2. Métier(ELEC, MECA, INST)
  3. Etat(E0,E1,E2)
  4. Niveau de Validité(V0, V1,V2, V3, V4)
  5. Année(doit etre manuel c'est-à-dire qu'on on tape l'année on a dans la listview tous les enregistrement de l'année filtrée)
  6. Mois d'enregistrement(Janvier, Février,.......,Décembre)
  7. la semaine d'enregistrement(S01,S02,S03,......)
Alors pour ce qui en est de la semaine d'enregistrement il s'agit de la semaine au cours de laquelle les enregistrements alors à défaut d'être une liste de toutes les semaines par année (S01,S02,S03,......S58)
le mieux serait de venir et Taper manuellement la semaine des enregistrements qui ont été réaliser.

Même chose pour le critère TAG le mieux serait de faire une recherche manuelle c'est-à-dire veir et taper le TAG des enregistrement qu'on souhaite afficher car il y 'en a des centaines
 

vgendron

XLDnaute Barbatruc
Je ne comprend pas vraiement à quoi sert ton formulaire..
une listeView pour afficher le contenu de ta feuille Source
ensuite, des textbox (plus ou moins lisibles.....) et des combo pour faire une nouvelle saisie..

en attendant d'y voir plus clair en PJ
1) création d'une feuille "Listes" qui permet de lister les différents éléments pour chaque "critère"
2) ces listes sont sous forme de table structurée (t_Etat / t_Demande / t_Valid.....)
3) ces tables alimentent les listes de validaiton de ta table "Tbl_Datas"
et elles servent aussi à alimenter les combobox du formulaire (voir _initialize)

4) il faut donner des noms explicites aux différents controles du fomulaire
Tbx_... / Cbx_...
 

Pièces jointes

  • TCHIS.xlsm
    61.2 KB · Affichages: 9

TCHIS

XLDnaute Occasionnel
Je ne comprend pas vraiement à quoi sert ton formulaire..
une listeView pour afficher le contenu de ta feuille Source
ensuite, des textbox (plus ou moins lisibles.....) et des combo pour faire une nouvelle saisie..

en attendant d'y voir plus clair en PJ
1) création d'une feuille "Listes" qui permet de lister les différents éléments pour chaque "critère"
2) ces listes sont sous forme de table structurée (t_Etat / t_Demande / t_Valid.....)
3) ces tables alimentent les listes de validaiton de ta table "Tbl_Datas"
et elles servent aussi à alimenter les combobox du formulaire (voir _initialize)

4) il faut donner des noms explicites aux différents controles du fomulaire
Tbx_... / Cbx_...
Alors mon formulaire sert à la saisie des enregistrements pour faire un suivi de documents

la frame1
en bas qui avait un arrière-plan transparent c'est uniquement lorsqu'il faut enregistrer ou générer un nouveau suivi.

la listview1 qui me permet d'avoir un extrait de ma table source joue son role c'et-à-dire faire un extrait de ma table source.

Enfin il y a la frame7 pour l'instant qui n'est pas totalement rempli mais qui est destiné à recevoir l'ensemble des contrôles pour les filtres sur ma ListView1 (Filtre Sites, Métier, Année, Mois d'enregistrement, .....)

Il est vrai que j'aurai du donner des noms explicites sur mes contrôles je vous le concède;
mais le point qui concerne c'est la ListView1 dont j'ai mentionné un peu plus ce que je souhaite pour elle à savoir une options de filtre sur plusieurs critères tout en affichant le nombre d'enregistrement total car à chaque enregistrement correspond à un suivi donné.
J'ai consulter le fichier que vous m'avez renvoyé j'apprécie vos effort sincèrement mais c'est sur la ListView1 dont il faut s'occuper, le reste est parfait car il remplissent très leurs rôles (la Frame1, les contrôles Combobox, ListBox, tout ça c'est déjà bon)

vgendron voyez Vous un peu plus clairement la problématique ?​

Parce que là j'ai tout expliqué dans les détails carrément
 

vgendron

XLDnaute Barbatruc
L'ennui.. c'est que la Frame7... je ne la vois pas... elle est ou??
les controles pour les filtres.. je ne les vois donc pas non plus..
à priori.. il s'agira de combo (comme ceux utilisés pour saisir une nouvelle entrée) ou de textbox pour faire de la saisie semi automatique..
 

TCHIS

XLDnaute Occasionnel
en PJ
je t'ai mis 4 combo pour choisir la colonne de filtrage
et 4 textbox pour de la saisie semi auto
Merci beaucoup avec ce que tu as fait tu viens de m'ouvrir la chemin à présent je vais pouvoir l'adapter vers ce que je souhaite réellement mais en le consultant ton fichier j'ai su que je pourrai améliorer mon travail en me servant du tien comme base.

Ensuite je te ferai un retour qui sait cela pour être bénéfique

Merci pour tout et surtout pour ne pas avoir lâcher l'affaire
 

Discussions similaires

Réponses
69
Affichages
4 K
Réponses
12
Affichages
605

Statistiques des forums

Discussions
313 274
Messages
2 096 750
Membres
106 738
dernier inscrit
Lacbus