Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Trie ListBox, besoin d'aide et besoin d'explication

Fariri

XLDnaute Junior
Bonjour,

J'ai récupérer un fichier de boisgontierjacques qui permet de filtrer des colonnes via des listbox et qui renvoie le résultat dans la listbox1
le fichier étant super bien, j'ai adapté le code en fonction de mes besoins .

Cependant, certaines instructions dans le code ne conviennent pas à mon projet , c'est pourquoi je reviens vers vous pour demander de l'aide (car novice en VBA)

1) Je souhaiterai savoir s'il est possible de modifier la largeur des colonnes de la ListBox 1 car il me faut afficher 14 colonnes et je souhaite les afficher sans avoir à utiliser le scrolBar

2) Le code envoie toutes les colonnes dans la ListBox1 et dans mon projet il me faut afficher que certaines colonnes (B, C, G, H, ...............AG)
(peut-on le faire sans utiliser une seconde ListBox, c'est à dire récupérer certaines colonnes de la listBox1 et les copier vers une ListBoxX ? )

3) N'ayant pas tout compris sur le code, peut-on me "décoder" les lignes et me les expliquer de façon simple

Je vous joint le fichier de Mr boisgontierjacques qui m'a servit de modèle.

Merci pour votre aide

V:OICI MON CODE :
VB:
Dim f, NbCol, NomTableau, TblBD()

Private Sub UserForm_Initialize()
Inséré les valeurs des différentes colonnes dans les ListBox
  NomTableau = "Tableau7"                       
  TblBD = Range(NomTableau).Value
  NbCol = UBound(TblBD, 2)
  Set D = CreateObject("scripting.dictionary")
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 7)) = ""
  Next i
 
  Me.ChoixListBox1.List = D.keys               
  Set D = CreateObject("scripting.dictionary")
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 8)) = ""
  Next i
 
  Me.ChoixListBox2.List = D.keys               
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 12)) = ""
  Next i
 
    Me.ChoixListBox3.List = D.keys             
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 13)) = ""
  Next i

    Me.ChoixListBox4.List = D.keys             
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 17)) = ""
  Next i

    Me.ChoixListBox5.List = D.keys             
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 18)) = ""
  Next i

    Me.ChoixListBox6.List = D.keys             
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 22)) = ""
  Next i
 
    Me.ChoixListBox7.List = D.keys             
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 23)) = ""
  Next i

  Me.ChoixListBox8.List = D.keys               
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 26)) = ""
  Next i

  Me.ChoixListBox9.List = D.keys               
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 29)) = ""
  Next i

  Me.ChoixListBox10.List = D.keys               
  Set D = CreateObject("scripting.dictionary")
  D.comparemode = vbTextCompare
  For i = LBound(TblBD) To UBound(TblBD)
    D(TblBD(i, 33)) = ""
  Next i

  Me.ChoixListBox11.List = D.keys               
  Me.ListBox1.ColumnCount = NbCol
  Me.ListBox1.List = TblBD
 
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


  Sub Affiche() 'FONCTION POUR FILTRER PUIS AFFICHER LES DONNEES DANS LA LISTBOX 1

  Set dchoisis1 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox1.ListCount - 1
    If Me.ChoixListBox1.Selected(i) Then dchoisis1(Me.ChoixListBox1.List(i, 0)) = ""
  Next i
 
  Set dchoisis2 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox2.ListCount - 1
    If Me.ChoixListBox2.Selected(i) Then dchoisis2(Me.ChoixListBox2.List(i, 0)) = ""
  Next i
 
  Set dchoisis3 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox3.ListCount - 1
    If Me.ChoixListBox3.Selected(i) Then dchoisis3(Me.ChoixListBox3.List(i, 0)) = ""
  Next i
 
    Set dchoisis4 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox4.ListCount - 1
    If Me.ChoixListBox4.Selected(i) Then dchoisis4(Me.ChoixListBox4.List(i, 0)) = ""
  Next i
 
    Set dchoisis5 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox5.ListCount - 1
    If Me.ChoixListBox5.Selected(i) Then dchoisis5(Me.ChoixListBox5.List(i, 0)) = ""
  Next i

    Set dchoisis6 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox6.ListCount - 1
    If Me.ChoixListBox6.Selected(i) Then dchoisis6(Me.ChoixListBox6.List(i, 0)) = ""
  Next i

    Set dchoisis7 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox7.ListCount - 1
    If Me.ChoixListBox7.Selected(i) Then dchoisis7(Me.ChoixListBox7.List(i, 0)) = ""
  Next i
 
    Set dchoisis8 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox8.ListCount - 1
    If Me.ChoixListBox8.Selected(i) Then dchoisis8(Me.ChoixListBox8.List(i, 0)) = ""
  Next i
 
    Set dchoisis9 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox9.ListCount - 1
    If Me.ChoixListBox9.Selected(i) Then dchoisis9(Me.ChoixListBox9.List(i, 0)) = ""
  Next i
 
    Set dchoisis10 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox10.ListCount - 1
    If Me.ChoixListBox10.Selected(i) Then dchoisis10(Me.ChoixListBox10.List(i, 0)) = ""
  Next i

    Set dchoisis11 = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.ChoixListBox11.ListCount - 1
    If Me.ChoixListBox11.Selected(i) Then dchoisis11(Me.ChoixListBox11.List(i, 0)) = ""
  Next i
 
  n = 0: Dim Liste()
  For i = LBound(TblBD) To UBound(TblBD)
     tmp = TblBD(i, 7)
     tmp2 = TblBD(i, 8)
     tmp3 = TblBD(i, 12)     
     tmp4 = TblBD(i, 13)
     tmp5 = TblBD(i, 17)
     tmp6 = TblBD(i, 18)
     tmp7 = TblBD(i, 22)
     tmp8 = TblBD(i, 23)
     tmp9 = TblBD(i, 26)
     tmp10 = TblBD(i, 29)
     tmp11 = TblBD(i, 33)
 
    
     If (dchoisis1.exists(tmp) Or dchoisis1.Count = 0) _
        And (dchoisis2.exists(tmp2) Or dchoisis2.Count = 0) _
        And (dchoisis3.exists(tmp3) Or dchoisis3.Count = 0) _
        And (dchoisis4.exists(tmp4) Or dchoisis4.Count = 0) _
        And (dchoisis5.exists(tmp5) Or dchoisis5.Count = 0) _
        And (dchoisis6.exists(tmp6) Or dchoisis6.Count = 0) _
        And (dchoisis7.exists(tmp7) Or dchoisis7.Count = 0) _
        And (dchoisis8.exists(tmp8) Or dchoisis8.Count = 0) _
        And (dchoisis9.exists(tmp9) Or dchoisis9.Count = 0) _
        And (dchoisis10.exists(tmp10) Or dchoisis10.Count = 0) _
          And (dchoisis11.exists(tmp11) Or dchoisis11.Count = 0) Then
        
        
         n = n + 1
         ReDim Preserve Liste(1 To NbCol, 1 To n)
         For k = 1 To NbCol
            Liste(k, n) = TblBD(i, k)
         Next k
     End If
  Next i
  If n > 0 Then Me.ListBox1.Column = Liste Else Me.ListBox1.Clear
 
End Sub
 

Pièces jointes

  • FormFiltreAutoEnsembleVBA.xls
    112.5 KB · Affichages: 7

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

>1) Je souhaiterai savoir s'il est possible de modifier la largeur des colonnes de la ListBox 1 car il me faut afficher 14 colonnes et je souhaite les afficher sans avoir à utiliser le scrolBar

Les largeurs de colonne sont basées sur celles des colonnes de la BD

>2) Le code envoie toutes les colonnes dans la ListBox1 et dans mon projet il me faut afficher que certaines colonnes (B, C, G, H, ...............AG)
(peut-on le faire sans utiliser une seconde ListBox, c'est à dire récupérer certaines colonnes de la listBox1 et les copier vers une ListBoxX ? )


cf ColVisu=Array(1,3,5,6)



Une varianteilotage filtre formulaire




Boisgontier
 

Pièces jointes

  • FormFiltreAutoEnsembleVBAColVisu.xls
    70.5 KB · Affichages: 14
Dernière édition:

Fariri

XLDnaute Junior


Je viens de faire les modification et tout marche super bien, merci
Bonne soirée (ou bonne nuit)
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…