Optimiser un filtre élaboré à l'aide d'un USF

apt

XLDnaute Impliqué
Bonsoir à tous,

Pour créer des critères d'un filtre élaboré, l'utilisateur doit renseigner un USF qui contient les déférents critères.

Seulement dans la procédure Btn_ValiderCriteres_Click(), j'ai des erreurs dans la sélection du nom de la machine à partir de la ListBox1 :

Code:
'-- Machine
        For iCtr = 0 To Me.ListBox1.ListCount - 1
            If Me.ListBox1.Selected(iCtr) = True Then
                TextBox1.Value = Me.ListBox1.List(iCtr)
                .[I3] = Me.TextBox1.Value
            End If
        Next iCtr

Ensuite le même problème pour sélectionner un élément depuis la ComboBox3 :

Code:
'-- '-- On interprète le texte de la ComboBox3 en signes
        For iCtr = 0 To Me.ComboBox3.ListCount - 1
            If Me.ComboBox3.ListIndex(iCtr) = True Then
                '-- L'élément 0 correspond à la troisième ligne dans la colonne U
                .[N9] = .Range("U" & iCtr + 3)
            End If
        Next iCtr

Un autre suivi dans ce fil :

[XL-2007] Optimiser un filtre élaboré à l'aide d'un USF - Forum des professionnels en informatique

En PJ l'exemple

Merci d'avance.

:)
 

Pièces jointes

  • USFFiltrePesonnalisé (1).zip
    31.6 KB · Affichages: 33

Zon

XLDnaute Impliqué
Re : Optimiser un filtre élaboré à l'aide d'un USF

Salut,

Ta 1 ère boucle sert à rien telle qu'elle est écrit. Tu écrases textbox1 et I3 pour chaque élément selectionné.

=> déclenche l'évènement change qui reinitialise ta listbox, et donc pb de listcount.

Je ne sais pas ce que tu veux faire mais je pense que tu devrais créer un array dynamique.

exemple

Code:
'déclarations
dim MonArray(),K&
For iCtr = 0 To Me.ListBox1.ListCount - 1
            If Me.ListBox1.Selected(iCtr) = True Then
                ReDim Preserve monarray(k)
                monArrray() = ListBox1.List(iCtr)
                K = K + 1
                            End If



La 2ème , Selected n'est pas possible pour une combobox,=> Boucle inutile


A+++
 

ChTi160

XLDnaute Barbatruc
Re : Optimiser un filtre élaboré à l'aide d'un USF

Bonjour apt
Bonjour le Fil
Bonjour le Forum

Afin de Saluer "Zon" que je suis content de Croiser
je pense qu'il manque un "K" dans la procédure
'déclarations
Dim MonArray(), K&
For iCtr = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(iCtr) = True Then
ReDim Preserve MonArray(K)
monArrray(K) = ListBox1.List(iCtr)
K = K + 1
End If
Next iCtr
Bonne Journée
Amicalement
Jean Marie
 

youky(BJ)

XLDnaute Barbatruc
Re : Optimiser un filtre élaboré à l'aide d'un USF

Bonjour à vous tous et bon dimanche,
apt, pour le combobox voici une rectif de ton code...
Bruno
Code:
   '-- On interprete le texte de la ComboBox3 en signes
       ' For iCtr = 0 To Me.ComboBox3.ListCount - 1
            'If Me.ComboBox3.ListIndex(iCtr) = True Then
                '-- L'élément 0 correspond à la troisième ligne dans la colonne U
        If ComboBox3 <> "" Then .[N9] = .Range("U" & ComboBox3.ListIndex + 3)
            'End If
       ' Next iCtr
 

Zon

XLDnaute Impliqué
Re : Optimiser un filtre élaboré à l'aide d'un USF

Re,

Youky , on peut saisir des valeurs dans la combobox, et donc avoir un listindex à -1


Attention ta condition devrait être

if combobox3.listindex>-1 then ...

A+++
 

apt

XLDnaute Impliqué
Re : Optimiser un filtre élaboré à l'aide d'un USF

Bonjour Zon, Chti160, youky(BJ),

Merci pour tous vos réponses.

J'ai opté pour ces solutions :

ListBox :

Code:
With ListBox1
If .ListIndex >-1 then 
    TextBox1.Value = .List(.ListIndex)
    Sheets("BD").[I3]  Me.TextBox1.Value
end if
End With


ComboBox :

Code:
.[N9] = .Range("U" & ComboBox3.ListIndex + 3)
 

Discussions similaires

Réponses
3
Affichages
579
Réponses
8
Affichages
661

Statistiques des forums

Discussions
312 215
Messages
2 086 332
Membres
103 188
dernier inscrit
evebar