ListµBox, Valeurs provenant du résultat d'un filtre

cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015 - 14 juin 2006 à 11:30
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 14 juin 2006 à 15:25
Salut,
Je souhaite que ma listebox cherche les données dans une feuille excel ds laquelle un filtre a été réalisé. LE code que j'ai trouvé ne me permet pas de montrer ds la liste box uniquement les valeurs filtrées. Toutes les valeurs de la plage de la feuille sont montrés. Comment faire pour que la listebox ne montre que le résultat du filtre ?? J'ai trouvé une solution intermédiaire mais trop lourde à mon avis qui consiste à copier les cellules du résultats du filtre ds une autre feuille. puis la listbox va chercher le résultat ds cette feuille. Je suis sur qu'il y a une autre possibilité bien + simple.
Avez-vous  des idées ????
Merci
A+

Mon Code :

Private Sub ComboBox1_Change()



Dim Emetteur As String
Emetteur = ComboBox1.Value



If ComboBox1.Value = "(tous)" Then
    Selection.AutoFilter Field:=1
ListBox1.RowSource = "Feuil2!A2: E5000"



Else



Selection.AutoFilter Field:=1, Criteria1:=Emetteur
ListBox1.RowSource = "Feuil2!A2: E5000"



End If



End Sub

3 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 juin 2006 à 12:12
Salut

Je pense que ta technique est mine de rien la plus simple. L'autre technique consisterai à passer par AddItem :

Je sais pas où se trouve Emetteur mais admettons que c'est dans la colonne E :

   Dim i As Integer
For i = 2 To 5000
   If cells(i, 5).Value = "Emetteur" Then
      ListBox1.AddItem (Range("A" & i & ":E" & i).Value)
   End If
Next i

@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>  Mortalino 

Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
0
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
14 juin 2006 à 14:16
Il ne se passe rien qd je choisi une valeur qui n'est pas ds les données. Si je choisi une valeur des données, ca plante. Le message est le suivant :

Erreur d'execution, le type ne corresponds pas et il souligne la ligne :

      ListBox1.AddItem (Range("A" & j & ":E" & j).Value)

En fait "Emetteur" est la valeur choisi ds la ComboBox, la valeur que je filtre.
Les données se trouvent ds la colonne A.
Ce que je veux faire c'est :
- Je selectionne une donnée dans la comboBox (ça marche)
- Dès que la valeur est choisie, le filtre est fait sur la feuil2.(ca marche)
- Ce qui devrait s'enchainer est la mise à jour de la listebox sur le même userform de la comboBox
Le code revu selon tes conseils ci-dessous.
A+

Private Sub ComboBox1_Change()


Sheets("feuil3").Range("A2") = ComboBox1.Value
Sheets("Feuil2").Select


Dim Emetteur As String
Emetteur = ComboBox1.Value


If ComboBox1.Value = "(tous)" Then
    Selection.AutoFilter Field:=1


 Dim i As Integer
For i = 2 To 5000
   If Cells(i, 1).Value = "Emetteur" Then
      ListBox1.AddItem (Range("A" & i & ":E" & i).Value)
   End If
Next i




Else


Selection.AutoFilter Field:=1, Criteria1:=Emetteur
'ListBox1.RowSource = "Feuil2!A2: E5000"
 Dim j As Integer
For j = 2 To 5000
   If Cells(j, 1).Value = "Emetteur" Then
      ListBox1.AddItem (Range("A" & j & ":E" & j).Value)
   End If
Next j




End If


End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 juin 2006 à 15:25
    Dim j As Integer, z As Integer

For j = 2 To 5000

   If Cells(j, 1).Value = "Emetteur" Then
      Dim MyArray(1, 5)

         For z = 0 To 4
           MyArray(0, z) = z
         Next z

    MyArray(1, 0) = Cells(j, 1).Value
    MyArray(1, 1) = Cells(j, 2).Value
    MyArray(1, 2) = Cells(j, 3).Value
    MyArray(1, 3) = Cells(j, 4).Value
    MyArray(1, 4) = Cells(j, 5).Value
    
   ListBox1.List() = MyArray

   End If
Next j

J'ai réussi à te faire ça, le problème, c'est qu'au 2eme tour de la boucle 'j' ça va certainement s'effacer.
Essaie donc de l'adapter mais je ne peux faire plus, vraiment désolé, en espérant te filer au moins un bon départ..


















@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>


  Mortalino 





Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le 
règlement
0
Rejoignez-nous