XL 2016 Llistbox filtrée ne se rafraichit pas

ptj75

XLDnaute Nouveau
Bonjour a tous,
j ai une listbox dans un userform qui ne se rafraichit pas après un filtre sur une colonne en testant si la valeur est "oui" ou "non".j agit sur le parametre Listbox.RowSource
la feuille BD est bien filtrée.ListBox1.RowSource prend bien les adresses correspondant bien aux lignes filtrées.
mais la visu de la listbox dans le userform est vide est vide .



Private Sub CommandButton8_Click()
'bouton recherche cable basculé
If Sheets("BD").Range("B2") <> "" Then
With Sheets("BD")
If Worksheets("BD").FilterMode Then Worksheets("BD").ShowAllData
End With
'ListBox1.Clear
Sheets("BD").Range("B1:B65000").AutoFilter 2, "=" & "OUI"
ListBox1.RowSource = _
Sheets("BD").Range("BD!A2:" & _
Sheets("BD").Range("AG2").End(xlDown).Address). _
SpecialCells(xlCellTypeVisible).Address
End If
End Sub
Cà marche quand on trouve 3 "OUI" à la suite dans toute la liste, par contre dès qu'il y un "OUI" de plus ,pas à la suite , la visu de la listbox est vide.
lorsque je veux faire une ListBox1.Clear, j 'ai une erreur.

Si quelqu'un peut m'aiguiller
Merci par avance
 

patricktoulon

XLDnaute Barbatruc
bonjour
c'est normal rowsource ou point .list ne peut pas recevoir une( plage non contiguë).value
c'est tout simplement impossible

il te faut boucler sur les visible row de la plage filtrée et les colonnes
ou
utiliser application.index (array de ligne valides , array de colonne valides)

dans les 2 cas au moins une boucle est nécessaire

je parle pas de la syntaxe qui me donne la migraine du genre
Sheets("BD").Range("B1:B65000").AutoFilter 2, "=" & "OUI"'????????????????????????
ou
Sheets("BD").Range("BD!A2:" & _'?????????????????????????

??????????????????????????????? :oops: 😵 😵 😵 😵 😵 😵 😵
 

ptj75

XLDnaute Nouveau
ok, j 'ai essayer de réaliser une boucle en regardant des exemples sur les forums, pas moyen de faire un code valide.
après pour la syntaxe, je suis un novice sur excel,
si je joins le fichier, est-il possible de me guider et bien sur en essayant de comprendre
merci
 

patricktoulon

XLDnaute Barbatruc
je n'en ai pas vraiment besoins en fait
si j'ai bien compris ce que tu veux
toutes les ligne du table [A:AG] qui ont "oui" en colonne "B"
VB:
Private Sub CommandButton8_Click()
'bouton recherche cable basculé
    If Sheets("BD").Range("B2") <> "" Then
        With Sheets("BD").Range("A2:AG" & Sheets("BD").Cells(Rows.Count, "A").End(xlUp).Row)
            tableau = .Value 'on prend le tableau entier
            
            'on determine les ligne du tableau(A:Ag) ou il y a "oui" en col"B"
            For i = 1 To UBound(tableau)
                If tableau(i, 2) = "OUI" Then it = it & " " & i
            Next
            lignes = Application.Transpose(Split(Trim(it), " "))
            
            colonnes = Evaluate("COLUMN(A:AG)") 'on créée un array d'index de colonnes
            tableau = Application.Index(.Value, lignes, colonnes) 'on créée le tableau avec les index lignes /colonnes
            ListBox1.ColumnCount = UBound(tableau, 2) 'on dimensionne le nombre de colonnes de la liste box idem a la plage de base
            ListBox1.List = tableau ' on fout le tableau dans la listbox
        End With
    End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
la fonction evaluate évalue une expression et te restitue l'object ou le résultat de l’évaluation de l'expression
ici ça me restitue un array
VB:
sub test()
colonnes = Evaluate("COLUMN(A:AG)") 'on créée un array d'index de colonnes
'qu'est ce qu'il y a dans cet array
msgbox join(colonnes,",")
end sub
 

Discussions similaires

Réponses
17
Affichages
818

Statistiques des forums

Discussions
312 174
Messages
2 085 942
Membres
103 053
dernier inscrit
Beubax