Flitrage d'une ListBox dans userform
Bonjour,
Je suis entrain de créer un fichier Excel pour suivre une comptabilité associative.
La base de donnée, sous forme de tableau structuré, se trouve dans l'onglet GL dans lequel je fais une synthèse comptable ainsi que deux tableaux structurés ou j'applique un filtre sur les opérations pointées et non pointées.
J'affiche un userform dans lequel je retrouve tous mes lignes dans la Listbox1 et une synthèse comptable. à l'aide de boutons radio je voudrais filtrer ses données sur celles pointées et non pointées.
J'ai essayé bon nombre d'exemples trouvés sur différents sites et forum que j'ai essayé d'adapter mais je bloque sur ce problème.
Merci d'avance à ceux et celles qui pourrait m'aider à trouver une solution.
Je joins le fichier de travail.
Dominique
Bonjour dgil37 et bienvenue
Il y a du ménage à faire dans le code de votre USF
Vous pouvez utiliser cette procédure
' Permet de filtrer
' 0 = rien
' 1 = lettré
' 2 = non lettré
Private Sub FiltrerListBox(Quoi As Integer)
Dim O As Worksheet
Dim TS As ListObject
Dim ligne As ListRow
Dim donnéesFiltrées() As Variant
Dim i As Long
Set O = Worksheets("GL"): Set TS = O.ListObjects("GLivre")
Set TS = O.ListObjects("GLivre")
ReDim donnéesFiltrées(1 To TS.ListColumns.Count, 1 To TS.ListRows.Count)
i = 0
For Each ligne In TS.ListRows
If Quoi = 0 Then
i = i + 1
For j = 1 To TS.ListColumns.Count
donnéesFiltrées(j, i) = ligne.Range.Cells(1, j).Value
Next j
End If
If Quoi = 1 And ligne.Range.Cells(1, 1).Value = "x" Then
i = i + 1
For j = 1 To TS.ListColumns.Count
donnéesFiltrées(j, i) = ligne.Range.Cells(1, j).Value
Next j
End If
If Quoi = 2 And ligne.Range.Cells(1, 1).Value = "" Then
i = i + 1
For j = 1 To TS.ListColumns.Count
donnéesFiltrées(j, i) = ligne.Range.Cells(1, j).Value
Next j
End If
Next ligne
Me.ListBox1.Clear
If i > 0 Then
ReDim Preserve donnéesFiltrées(1 To TS.ListColumns.Count, 1 To i)
Me.ListBox1.List = Application.Transpose(donnéesFiltrées)
End If
End SubQui est appelé par
Private Sub OptionButton1_Click()
Call FiltrerListBox(0)
End Sub
Private Sub OptionButton2_Click()
Call FiltrerListBox(1)
End Sub
Private Sub OptionButton3_Click()
Call FiltrerListBox(2)
End SubSub misent au début de vos codes
A+
Bonjour et bienvenue sur ce forum,
Je n'ai pas compris pourquoi vous avez 3 listbox l'une sur l'autre
Si vous conservez votre tableau entre les colonnes X et AF, vous pourriez ajouter ceci dans votre Userform
Private Sub OptionButton2_Click()
Call op_n_pointees
With ListBox1
.Clear
.List = Range("GLivre_filtre_P").ListObject.ListColumns(1).DataBodyRange.Resize(, 9).Value
End With
End SubUne fois l'usf ouverte, cliquez sur le bouton d'option "Pointées"
Je pense qu'il faudra faire du ménage dans votre fichier. Avez-vous besoin des tableaux situés à droite ?
Crdlt
EDIT : oups JFexcel2FR, je te salue ! et désolé mais je n'ai pas rafraichi .....
Merci à vous deux pour vos réponses.
JExcel2fr, je suis d'accord pour le ménage à faire mais c'est le résultat de plusieurs tentatives.
Dan, pour les 3 ListBox, j'avais dans l'idée de les alimenter par chacun des TS de la feuille GL (bricolage!).
Je vais tester.
Dominique
re
Dan, pour les 3 ListBox, j'avais dans l'idée de les alimenter par chacun des TS de la feuille GL (bricolage!).
3 litsbox c'est inutile puis aussi je n'ai pas compris pourquoi 3 TS puisque vous pouvez tout gérer avec un seul.
Cela vous évite aussi d'avoir des lignes sans données car en utilisant des TS par principe vous ne devez jamais avoir de lignes sans données.
En fonction de votre retour sur les propositions JFexcel2FR vous donnera certainement quelques idées
Crdlt
Bonjour,
J'ai regardé attentivement vos solutions. Les deux répondent parfaitement à mon attente.
Je vais adopter la solution de JExcel2fr qui n'utilise que le TS principal et y rajouter la procédure pour la mise en forme monétaire en fonction de l'option choisie.
Encore bravo pour la clarté du code qui m'a bien encore appris sur VBA.
Merci à vous deux.
A+