VBA, Excel: Tri de valeur selectionnées dans Listbox

Zovixel -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je suis un grand novice du VBA. J'ai un problème lorsque je veux filtrer les différentes données d'une ListBox.

Voici mon code:

________________________________________________________________________

Private Sub OK_Click()

Dim lItem As Long

For lItem = 0 To ListBoxLines.ListCount - 1

If ListBoxLines.Selected(lItem) = True Then

ActiveSheet.Range("$A$3:$BH$800").AutoFilter Field:=11, Criteria1:=ListBoxLines.List(lItem)

ListBoxLines.Selected(lItem) = False

End If

Next

' Fermer fenêtre après avoir selectionné commande
Unload Me

End Sub

________________________________________________________________________

Le code fonctionne mais dès lors que plusieurs données sont sélectionnées dans la ListBox le résultat du filtre n'est que la dernière donnée qui a été sélectionnée et non toutes les sélections.

Comment faire pour que toutes les données sélectionnées dans la ListBox soient prises en compte par le filtre et pas uniquement la dernière?

Merci de votre réponse :)
A voir également:

2 réponses

f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Re,

il faut prendre toutes les colonnes pour plage:-----> A3:D400

le filtre est sur le champ 3 pas 1, sauf erreur de ma part.

https://www.cjoint.com/?BKhqUMeSWOx

Bon courage
2
Zovixel
 
Ca fonctionne! Merci beaucoup pour votre temps et votre patience! :)
0
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour,
Pas de probleme.

Bonne continuation
0
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour,

Si j'ai bien compris ce que vous voulez: adaptez la plage pour le filtre

Private Sub Ok_Click()
  Dim lItem As Long
  'Tableau a dimensionner suivant le nombre maxi de choix
  Dim Choix(12) As String
  Dim x
  
  For lItem = 0 To ListBoxLines.ListCount - 1
    If ListBoxLines.Selected(lItem) = True Then
      Choix(x) = ListBoxLines.List(lItem)
      ListBoxLines.Selected(lItem) = False
      x = x + 1
    End If
  Next
  'Efface filtre ADAPTER la plage
  ActiveSheet.Range("$A$1:$A$19").AutoFilter Field:=1

  'Filtre(s) idem plage mettre les variables au maxi choix(x),ici 12
  ActiveSheet.Range("A1:A19").AutoFilter Field:=1, _
  Criteria1:=Array(Choix(0), Choix(1), Choix(2), Choix(3), _
                   Choix(4), Choix(5), Choix(6), Choix(7), _
                   Choix(8), Choix(9), Choix(10), Choix(11), Choix(12)) _
                    , Operator:=xlFilterValues

  'Fermer fenêtre après avoir selectionné commande
  Unload Me
End Sub


A+
0
Zovixel
 
Hello,

Non ce n'est pas tout à fait cela. J'ai plusieurs choix en texte dans ma listbox et j'aimerais que mon filtre prenne en compte toutes les valeurs selectionnées dans cette listbox. Le code que j'avais donné dans le sujet fonctionnait mais il ne filtrait que sur la dernière valeur qui était sélectionnée.
0
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour,
Vous etes sur de ce que vous voulez, parce que le code que je vous ai fourni filtre avec tout les choix que vous faites.
0
Zovixel
 
J'ai copié tel quel votre code et l'ai adapté à mon tableau (15 choix au maximum, tableau qui a 400 lignes maxi et 53 colonnes, filtre de la listbox sur la 11eme colonne). Mais lorsque je le lance j'ai le message d'erreur suivant: "Run-time error '1004': Autofilter method of Range class failed" le debug me surligne la ligne après le commentaire " 'Efface filtre ADAPTER la plage "

Voici le code tel qu'il est adapté:


Private Sub Ok_Click()
Dim lItem As Long
'Tableau a dimensionner suivant le nombre maxi de choix
Dim Choix(15) As String
Dim x

For lItem = 0 To ListBoxLines.ListCount - 1
If ListBoxLines.Selected(lItem) = True Then
Choix(x) = ListBoxLines.List(lItem)
ListBoxLines.Selected(lItem) = False
x = x + 1
End If
Next
'Efface filtre ADAPTER la plage
ActiveSheet.Range("$A$3:$BA$400").AutoFilter Field:=11

'Filtre(s) idem plage mettre les variables au maxi choix(x),ici 12
ActiveSheet.Range("a1:BA400").AutoFilter Field:=11, _
Criteria1:=Array(Choix(0), Choix(1), Choix(2), Choix(3), _
Choix(4), Choix(5), Choix(6), Choix(7), _
Choix(8), Choix(9), Choix(10), Choix(11), Choix(12), Choix(13), Choix(14), Choix(15)) _
, Operator:=xlFilterValues

'Fermer fenêtre après avoir selectionné commande
Unload Me
End Sub


___________________________________________________________________________

Est-il possible que le problème vienne du fait que toutes les valeurs ne soient pas forcément selectionnées pour le filtre?
0
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Re,
Remplacez ActiveSheet par Worksheets("feuil1") en mettant le nom de la feuille du filtre ( 2 remplacements), parce que la feuille du filtre n'est pas active quand vous lancez le programme filtre
0
Zovixel
 
Re,

Ca ne fonctionne toujours pas :(
Désolé de vous prendre votre temps ainsi.
Voici un lien sur lequel vous pourrez trouver mon tableau et peut être déceler l'erreur:
https://www.box.com/s/b2mcx6ebwvrm3wuxv576
0