Recherche incrémentale avec ListView - simplification codes

Bonjour a tous,

J'ai besoin d'un coup de main pour plusieurs choses:

- Quand je click sur la premiere ligne de la ListView, il me selectionne la Date, et pas la ligne, pourquoi ?

image

- Ne m'affiche pas la date au format 11/01/2023 mais au format 11/1/2023, pourquoi ?

image

- Quand je souhaite filtrer par ChoixListBox, j'ai un message compile erreur, je trouve pas la solution.

image

- Simplifier mes codes VBA

En vous remerciant,

a+

12test.xlsm (149.52 Ko)

Bonjour,

Ma participation (en pièce jointe.

J'ai modifié le UserForm et le Listview pour le rendre visible.

Le ListView à été initialisé en FullRowSelect = True

Modification du chargement du ListView en particulier pour les dates

Je n'ai pas tenu compte du reste...

21testvg.xlsm (149.38 Ko)

Bonjour benji, Galopin

@ benji :
Je regardais votre demande mais Galopin m'a devancé.
Juste une remarque (à nouveau) Quelle utilité d'utiliser des instructions Call sur des codes FUNCTION ??
Pourtant je vous avait déjà expliqué le principe des FUNCTION ici --> https://forum.excel-pratique.com/s/goto/1162731

mé bon...

Crdlt

Bonjour galopin,

Merci cette solution.

A+

Bonjour Dan,

Oui je sais Dan mais je ne suis pas a l'aise comme vous en VBA donc je fais avec ce que je comprends.

Je vais faire en boucle "For" pour synthétiser ce que je peux dans les codes et avec ce que je comprends avec mon petit niveau en VBA.

Avec les functions j'arrive plus a éclaircir mon travail en VBA, cela ralentit certainement le formulaire, mais pour le moment je débute donc je fais comme cela en premiere étape de code.

A tout cas merci de m'avoir lu.

A+

Re,

Pourquoi dans ChoixListbox1, la date est a l'anglaise alors que dans la Listview ou combobox elle est a la françaises ?

A+

Avec les functions j'arrive plus a éclaircir mon travail en VBA, cela ralentit certainement le formulaire, mais pour le moment je débute donc je fais comme cela en premiere étape de code.

Les FUNCTION c'est plus complexe puisqu'elles sont exécutées sur base d'une variable
Vous vous compliquez la vie et si vous débutez en prenant le chemin le moins facile avec VBA

Utilisez CALL quand vous appelez une SUB et pas une FUNCTION

Exemple :
Dans votre USF vous avez dans la Private Sub UserForm_Initialize() --> Call show_data_in_listView
Allez dans votre Function show_data_in_listView() et au lieu de Function mettez SUB
A la fin du code remplacez END FUNCTION par END SUB

Faites la même chose pour tous les autres CALL que vous avez dans votre USF

Je ne vois pas ce qu'il y a de compliqué.

Prenez le temps de regarder ce lien avec une macro Function --> https://forum.excel-pratique.com/s/goto/1080376
il y a en d'autres si vous faites une recherche sur Function

Crdlt

???

Je n'ai pas ce problème dans mon classeur

A+

Ok Dan et Galopin.

Je fais les modifications ...

J'ai fait les modifications.

Avec ce code VA je pourrais enlever tous mes SUB doublonstrieschoixlistbox et combobox. Je n'arrive pas a l'adapter ....

Private Sub UserForm_Initialize()
Dim j As Byte
Dim d
Dim i As Long

nomtableau = "Table2"
nbcol = Range(nomtableau).ListObject.ListColumns.Count
TblBD = Range(nomtableau).Resize(, nbcol + 1).Value

For j = 1 To 8
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j + 4)) = vbNullString
    Next i
    Me.Controls("ChoixListBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

For j = 1 To 13
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j)) = vbNullString
        Next i
    Me.Controls("ComboBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

With Me.ListView1
    .ColumnCount = 21 
    .List = TblBD

End With

End Sub

a+

Re,

qu’est ce qui est le mieux Listbox ou ListView dans un formulaire ?

A+

C'est quoi ce

TblBD pourri ?

faut il l’enlever ?

A+

faut il l’enlever ?

A+

Moi je l'ai viré le problème c'est que je ne sais pas trop ce tu tu veux dans ta profusion de contrôles...

J'ai fait un peu n'importe quoi tout en essayant d'être très structuré dans le codage YAKE ce TblBD qui m'emm... Il me semble qu'il doit juste y avoir un problème de décalage de colonne mais je ne peux pas deviner.

Je n'ai pas mis le tri non plus puisqu'il n'y a rien à trier.

13testvg1.xlsm (147.96 Ko)

bonsoir Galopin,

je regarderai demain ce que vous avez fait.

Désolé d’avoir fourni un formulaire Light.

Sur mon formulaire non light, tout est bien alimenté Listbox et combobox avec certaines combobox alimentes via d’autres colonnes d’un autre classeur.

Mon problème, c’est que je souhaite filtrer la listview via mes 8 listbox avec cases à cocher. Je ne sais pas comment structurer mon USF initialise. Mon Sub affiche est je pense bon, jusqu’à la dernière ligne ou je mentionne ma Listview.

Il y’aura des dizaines, centaines de milliers de lignes … là j’ai juste mis 5 ou 6 lignes en essai, ce que je fais pour le moment est juste une maquette.

Oui, je n’ai pas les bases VBA, je fais avec le peu de connaissance que j’ai.

Un grand merci d’avoir repondu à ma demande d’aide, des personnes telles que vous, Dan et autres sont tres appréciées !

Je vous tiens au courant demain

Excellente soirée

A+

Bonjour a tous,

J'ai refais de manière plus lisible mon formulaire.

Mon problème, c'est via mes Listbox, sélectionner des critères dans chaque ListBox pour filtrer ma Listview.

Je n'arrive a mettre en place cela dans mon USER lie a Sub affiche.

Avec une Lisbox j'avais ce code qui marche bien et je souhaite l'adapter pour une Listview: dans mon formulaire, j'ai 9 Listbox.

Private Sub UserForm_Initialize()
Dim j As Byte
Dim d
Dim i As Long
Dim LO

Macro1
SortData_1

nomtableau = "Tableau1"
nbcol = Range(nomtableau).ListObject.ListColumns.Count
TblBD = Range(nomtableau).Resize(, nbcol + 1).Value

For j = 1 To 2
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j + 4)) = vbNullString
    Next i
    Me.Controls("ChoixListBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

For j = 3 To 16
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j + 7)) = vbNullString
    Next i
    Me.Controls("ChoixListBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

For j = 1 To 30
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        Select Case j
            Case 27, 28, 29, 30: d(TblBD(i, j - 26)) = vbNullString
            Case Else: d(TblBD(i, j)) = vbNullString
        End Select
    Next i
    Me.Controls("ComboBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

With Me.ListBox20
    .ColumnCount = 31 'à par nbcol sir c'est tout le tableau qui est à prendre dans la listbox
    .List = TblBD
    .ColumnWidths = "75;300;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"

End With

End Sub

Sub Affiche()
Dim i
Dim j As Byte, k As Byte
Dim dchoisis(1 To 16)

For j = 1 To 16
  Set dchoisis(j) = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.Controls("ChoixListBox" & j).ListCount - 1
    If Me.Controls("ChoixListBox" & j).Selected(i) Then dchoisis(j)(Me.Controls("ChoixListBox" & j).List(i, 0)) = ""
  Next i
Next j

Dim n
Dim liste()
Dim tmp(1 To 17)

  For i = LBound(TblBD) To UBound(TblBD)
     tmp(1) = TblBD(i, 5)
     tmp(2) = TblBD(i, 6)

     For j = 3 To 16
        tmp(j) = TblBD(i, j + 7)
     Next j

     tmp(17) = TblBD(i, 1)

    If (dchoisis(1).Exists(tmp(1)) Or dchoisis(1).Count = 0) _
        And (dchoisis(2).Exists(tmp(2)) Or dchoisis(2).Count = 0) _
        And (dchoisis(3).Exists(tmp(3)) Or dchoisis(3).Count = 0) _
        And (dchoisis(4).Exists(tmp(4)) Or dchoisis(4).Count = 0) _
        And (dchoisis(5).Exists(tmp(5)) Or dchoisis(5).Count = 0) _
        And (dchoisis(6).Exists(tmp(6)) Or dchoisis(6).Count = 0) _
        And (dchoisis(7).Exists(tmp(7)) Or dchoisis(7).Count = 0) _
        And (dchoisis(8).Exists(tmp(8)) Or dchoisis(8).Count = 0) _
        And (dchoisis(9).Exists(tmp(9)) Or dchoisis(9).Count = 0) _
        And (dchoisis(10).Exists(tmp(10)) Or dchoisis(10).Count = 0) _
        And (dchoisis(11).Exists(tmp(11)) Or dchoisis(11).Count = 0) _
        And (dchoisis(12).Exists(tmp(12)) Or dchoisis(12).Count = 0) _
        And (dchoisis(13).Exists(tmp(13)) Or dchoisis(13).Count = 0) _
        And (dchoisis(14).Exists(tmp(14)) Or dchoisis(14).Count = 0) _
        And (dchoisis(15).Exists(tmp(15)) Or dchoisis(15).Count = 0) _
        And (dchoisis(16).Exists(tmp(16)) Or dchoisis(16).Count = 0) Then

        n = n + 1
        ReDim Preserve liste(1 To nbcol + 1, 1 To n)
        For k = 1 To nbcol + 1
            liste(k, n) = TblBD(i, k)
        Next k
     End If
  Next i
  If n > 0 Then Me.ListBox20.Column = liste Else Me.ListBox20.Clear

End Sub

Private Sub ChoixListBox1_change()
 Affiche
End Sub
Private Sub ChoixListBox2_change()
 Affiche
End Sub
Private Sub ChoixListBox3_change()
 Affiche
End Sub
Private Sub ChoixListBox4_change()
 Affiche
End Sub
Private Sub ChoixListBox5_change()
 Affiche
End Sub
Private Sub ChoixListBox6_change()
 Affiche
End Sub

Private Sub ChoixListBox7_change()
 Affiche
End Sub
Private Sub ChoixListBox8_change()
 Affiche
End Sub
Private Sub ChoixListBox9_change()
 Affiche
End Sub
Private Sub ChoixListBox10_change()
 Affiche
End Sub
Private Sub ChoixListBox11_change()
 Affiche
End Sub
Private Sub ChoixListBox12_change()
 Affiche
End Sub
Private Sub ChoixListBox13_change()
 Affiche
End Sub
Private Sub ChoixListBox14_change()
  Affiche
End Sub
Private Sub ChoixListBox15_change()
 Affiche
End Sub
Private Sub ChoixListBox16_change()
 Affiche
End Sub

En vous remerciant pour votre aide,

a+

15test-2.xlsm (67.56 Ko)

Re,

J'ai refait le formulaire avec une listbox qui est filtree avec d'autres listbox (9) mis en comparaison avec listview ou pour le moment je ne trouve pas le code pour faire la meme chose avec mes 9 Litsbox pour filtrer.

Un point coup de main me serait utile,

En vous remerciant,

a+

14test-2.xlsm (73.29 Ko)
Rechercher des sujets similaires à "recherche incrementale listview simplification codes"