XL 2021 Filtre listbox, afficher dernière ligne ajouter d'une colonne.

Feldo

XLDnaute Nouveau
Bonjour la communauté, j'aurais besoin de vos compétence en matière de vba..
J'ai crée un userform avec listbox puis un optionbutton pour filtrer/afficher les dernières valeurs ajouter de la colonne 5, cela fonctionne mais après filtre sa m'affiche seulement la colonne 1 et non les 5 colonnes. pourriez-vous m'aider, ci-joint un fichier exemple.
 

Pièces jointes

  • Exemple listbox filtre.xlsm
    23.1 KB · Affichages: 11
Solution
oui j'ai vu ca quand on est pas sur la feuille BDD la liste est vide
alors que la ligne
Code:
    ListBox1.List = Sheets("BDD").Range("A1:E" & Cells(Rows.Count, "A").End(xlUp).Row).Value
End
est on ne peut plus explicite
j'en conclu qu'il y a eu un pet de travers dans un ancien enregestrement et que le xml du fichier est capout

et pour revenir a ce que je disais au sujet des tableaux structurés
voici ton fichier travaillant avec
je te laisse le soin de regarder le code ta feuille BDD et de poser toute les question que tu veux
si tant est que je puisse y répondre ou nos camarades participants

Feldo

XLDnaute Nouveau
ce sont les dernière valeur ajouter par exemple si j'ai dans ma colonne en ligne 1 France, en ligne 2 italie, en ligne 3 France etc
Je voudrais que seul italie (ligne2) et france (ligne 3) soit ajouter, France ligne 1 étant le premier ajouter je veux plus qu'il soit dans la listbox après filtrage.. je sais pas si je suis assez claire?
Dans le fichier en exemple que j'ai joint, on voit bien que le filtre se fait correctement quand on se fit au date de la colonne 1 mais seul la colonne 1 s'affiche
 

sousou

XLDnaute Barbatruc
bonjour
Sans m'occuper du fond ;)
essaie comme ceci
' Ajouter la ligne à la ListBox

With ListBox1
.AddItem .List(dernieresLignes(key), 0)
.List(.ListCount - 1, 1) = .List(dernieresLignes(key), 1)
.List(.ListCount - 1, 2) = .List(dernieresLignes(key), 2)
.List(.ListCount - 1, 3) = .List(dernieresLignes(key), 3)
.List(.ListCount - 1, 4) = .List(dernieresLignes(key), 4)
End With
 

Feldo

XLDnaute Nouveau
re. désoler erreur de ma part j'avais mit en doublon ton code avec mon code d'ajout de ligne, ton code fonctionne parfaitement. Un grand merci
Par contre j'ai mon dernier problème quand j'active ListBox1.Clear en début de filtre pour effacer la list pour laisser place a la nouvelle j'ai toute ma listbox qui s'éfface une idée?
 

Oneida

XLDnaute Impliqué
Merci de prendre du temps pour moi.
j'ai toujours mes 3 lignes sans le reste des colonnes afficher et ton code me rajoute juste 1 ligne (cette fois complète ^^) la première ligne mais elle devrais être filtrer.
Bonjour a vous deux,
Le code de sousou vous permet de remplir une ligne listbox. pour x lignex il faut une boucle.
Pour le filtre, c'est le code du dico qui ne convient pas
Il faut partir de la derniere ligne de la listbox et remonter. par contre l'affichage est inverse.Il faudra faire une table intermediai
VB:
Sub FiltrerDernieresLignesColonne5()
    ' Créer un dictionnaire pour stocker les dernières lignes uniques de la colonne 5
    Dim dernieresLignes As Object
    Dim i As Long
    Set dernieresLignes = CreateObject("Scripting.Dictionary")
   
    ' Parcourir les données pour obtenir les dernières lignes uniques
    For i = ListBox1.ListCount - 1 To 0 Step -1
        'refrence
        Ref = ListBox1.List(i, 4)
        'test si deja vu
        If Not dernieresLignes.exists(Ref) Then
            'mise en memoire
            dernieresLignes.Add Ref, i
        End If
    Next i
   
    ' Parcourir le dictionnaire et ajouter les lignes correspondantes à la ListBox
    Dim key As Variant
    'ListBox1.Clear
    For Each key In dernieresLignes.Keys
        ' Ajouter la ligne à la ListBox
        ListBox1.AddItem ListBox1.List(dernieresLignes(key), 0)
        ListBox1.List(ListBox1.ListCount - 1, 1) = ListBox1.List(dernieresLignes(key), 1)
        ListBox1.List(ListBox1.ListCount - 1, 2) = ListBox1.List(dernieresLignes(key), 2)
        ListBox1.List(ListBox1.ListCount - 1, 3) = ListBox1.List(dernieresLignes(key), 3)
        ListBox1.List(ListBox1.ListCount - 1, 4) = ListBox1.List(dernieresLignes(key), 4)
    Next key

End Sub
re
 

patricktoulon

XLDnaute Barbatruc
bonjour
je sais ce n'est pas facile quand on debute et que l'on ne connais pas le codage
mais avant tout (et en dehors la notion de codage)
il faut que le besoins et l'intention soit bien exprimée
ors la perso j'ai eu dumal a comprendre alors que la chose est simple
ce que tu veux c'est les dernieres occurence de chaque valeurs dans la colonne 5 (4 pour la listbox1)

donc après la migraine que tu m'a donné
je te propose de faire
taper les touche CTRL+A+X dans le module du userform
ensuite une fois que le module est bien blanc
colle cei dedans
VB:
Private Sub UserForm_Activate(): Full_List: End Sub

Private Sub OptionButton1_Click(): Call filterLastOccurences: End Sub

Private Sub OptionButton2_Click(): Full_List: End Sub

Function Full_List()
    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidths = "70;70;70;70;70"
    ListBox1.ColumnHeads = False
    ListBox1.List = Sheets("BDD").Range("A1:E" & Cells(Rows.Count, "A").End(xlUp).Row).Value
End Function


Sub filterLastOccurences()
    Dim Dico As Object, T, I&, It, C&
    Set Dico = CreateObject("scripting.dictionary")
    Full_List
    T = ListBox1.List
    For I = 0 To UBound(T): Dico(T(I, 4)) = I: Next
    It = Dico.Items
    ListBox1.Clear   
    For I = 0 To UBound(It)
        With ListBox1
            .AddItem
            For C = 0 To .ColumnCount - 1: .List(I, C) = T(It(I), C): Next
        End With
    Next
End Sub
voilà terminé tu l'a ton filter Or full List avec tes 2 optionbuttons
demo.gif
 

patricktoulon

XLDnaute Barbatruc
re
mais j'ajouterais puisque tu es débutant
de commencer par apprendre a traviller avec les outils ad hoc
en l'occurence ici on parle de Base de données(BDD)
et le reflexe que tu dois avoir sans exeption c'est de travailler avec un tableau structuré
oublie le range et end(xlup) et resize et touticointi
avec un tableaustructuré(listobject)
  1. l'ajout
  2. la modif d'une ligne
  3. le filtrage même
  4. et la determination d'une cellule du tableau
  5. etc..etc..
sont beaucoup plus facile à coder
 

patricktoulon

XLDnaute Barbatruc
oui j'ai vu ca quand on est pas sur la feuille BDD la liste est vide
alors que la ligne
Code:
    ListBox1.List = Sheets("BDD").Range("A1:E" & Cells(Rows.Count, "A").End(xlUp).Row).Value
End
est on ne peut plus explicite
j'en conclu qu'il y a eu un pet de travers dans un ancien enregestrement et que le xml du fichier est capout

et pour revenir a ce que je disais au sujet des tableaux structurés
voici ton fichier travaillant avec
je te laisse le soin de regarder le code ta feuille BDD et de poser toute les question que tu veux
si tant est que je puisse y répondre ou nos camarades participants
 

Pièces jointes

  • Exemple listbox filtre.xlsm
    25.3 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 138
Membres
112 669
dernier inscrit
Guigui2502