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
re
exemple
si en (B) il y a "oui et en (F) il y a "toto"
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" and tableau(i,6)="toto" 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
 

ptj75

XLDnaute Nouveau
bonjour patrick.
j'ai essayé le bout de sript que m 'a donné.
çà marche pour dès qu'il y a au moins deux oui ou deux non dans la colonne B .s'il n''y en a qu'un seul ,j'ai une erreur d'execution:" 9" l'indice n'appartient pas à la sélection.
Capture.PNG

it prend bien la valeur de la ligne où l'on trouve le NON.
et après ,je ne vois pas d'où l 'erreur peut venir
 

patricktoulon

XLDnaute Barbatruc
re
c'est normal .list n'acepte pas un array de 1 lignes,x colonnes c'es .column=tableau
donc on met les deux facon dans la condition lignes>1 avec else
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" And tableau(i, 6) = "toto" 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(colonnes)    'on dimensionne le nombre de colonnes de la liste box idem a la plage de base
            If UBound(lignes) > 1 Then ListBox1.List = tableau Else ListBox1.Column = tableau    ' on fout le tableau dans la listbox
        End With
    End If
End Sub

;)
comme ca @ChTi160 aura l'exercice N°7 (choix des lignes ) 🤣 🤣 🤣 🤣
la fleme de mettre cet exemple dans l'autre discussion 😜😜🥳🤣🤣
 
Dernière édition:

ptj75

XLDnaute Nouveau
merci beaucoup, trop fort les mecs, .j'ai essayé de trouvé mais comme vous avez du le remarqué ,il me manque pas mal de notion en vba.je suis automaticien dans la vie.pour la suite , je m'attaque à refondre les filtres automatique existants.comme pour les 2 boutons, la listbox ne se raffrachit pas tout le temps
 

patricktoulon

XLDnaute Barbatruc
Re
Mdr !
au fait
pourquoi sur l'image de ptj75
c'est
VB:
 ListBox1.ColumnCount = UBound(colonnes)
qui est surligné ?
je pensé (mais pas de fichier) que c'était à ce niveau le Problème !
merci
jean marie
en fait quand il y en a q'une de ligne ca donne un array (1dim)(X items )
alors listbox1.columcount=ubound(tableau,2) donne une erreur forcement
c'est pour ca que j'ai remplacé par listbox.columncount=ubound(colonnes) car cela ca change pas
et comme il n'y a qu'une seule ligne c'est listbox1.column=tableau et non listbox1.list=tableau
voili voilou ;)
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
lorsque j'utilise ce Bouton j'ai bien un msgbox qui apparait trois fois
puis message "L'indice n'appartient pas a la sélection" ?

peux tu nous dire qu'elle démarche t'a amené à:
çà marche pour dès qu'il y a au moins deux oui ou deux non dans la colonne B .s'il n''y en a qu'un seul ,j'ai une erreur
d'exécution:" 9" l'indice n'appartient pas à la sélection.
merci
jean marie
Ps Patrick Ok merci
 

ptj75

XLDnaute Nouveau
re, j'ai rajouté un controle if sur it car si tout était basculé , on avait une erreur aussi

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

With Sheets("BD").Range("A2:AR" & 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
If it = "" Then

Else

lignes = Application.Transpose(Split(Trim(it), " "))
colonnes = Evaluate("COLUMN(A:Ar)") '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(colonnes) 'on dimensionne le nombre de colonnes de la liste box idem a la plage de base
If UBound(lignes) > 1 Then ListBox1.List = tableau Else ListBox1.Column = tableau ' on fout le tableau dans la listbox
End If
End With
End If
End Sub
 

Discussions similaires

Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
315 090
Messages
2 116 101
Membres
112 661
dernier inscrit
ceucri