Aide sur listbox avec combobox

doclefou

XLDnaute Nouveau
Bonjour à toutes & tous,Je souhaiterai avoir une liste dans USF remplie en fonction d'un critère choisi par une combox.Pour ce faire, j'ai créé un fichier avec une feuille "base" & une feuille "matchs".Dans ma feuille "base", j'ai une liste nommée "adversaires"Dans ma feuille "matchs", j'ai une série de matchs (col A : noms adversaires, col B scores adversaires, col C un tiret (-), col D mon score.Dans mon USF, j'ai implémenté une listbox à 4 colonnes avec le contenu des Col A à D de la feuille "matchs". J'ai mis une combox avec une rowsource="adversaires"Ce que je voudrai faire, c'est que si la combox est vide alors la listbox contient tous les matchs sinon la listbox contient les macths en fonction de la valeur de la comboboxMerci de votre aidePS : Cet exemple est tiré d'un fichier trop lourd pour le joindre
 

Pièces jointes

  • test_liste.xls
    52 KB · Affichages: 67
  • test_liste.xls
    52 KB · Affichages: 69
  • test_liste.xls
    52 KB · Affichages: 70

laetitia90

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

bonjour doclefou:)

une facon de l'ecrire parmi tant d'autres

ps petite modif dans le fichier
 

Pièces jointes

  • test_liste.xls
    56.5 KB · Affichages: 91
  • test_liste.xls
    56.5 KB · Affichages: 101
  • test_liste.xls
    56.5 KB · Affichages: 97
Dernière édition:

doclefou

XLDnaute Nouveau
Re : Aide sur listbox avec combobox

Bonjour Laetitia90,

Merci pour cette réponse rapide et surtout correcte.

Puis-je me permettre de te demander quelques explications sur le code ? Comme cet exemple est tiré d'un fichier très volumineux, je voudrai comprendre ce que cela fait pour pouvoir adapter à mon fichier complet.

Dim t1(), t() : Que cela signifie t-il ?
Dim s : Pourquoi il n'y a pas de "type" de variable ?

s = Feuil1.Range("a2:a" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row): Choix.List = s : Qu'est-ce que cela fait exactement ?

Private Sub Choix_Change()
On Error Resume Next
Liste.Clear
t = Feuil4.Range("a2:d" & Feuil4.Cells(Rows.Count, 1).End(xlUp).Row).Value
X = 1
For i = 1 To UBound(t) : Qu'est-ce que UBound ? If t(i, 1) = Choix.Text Then
ReDim Preserve t1(1 To 4, 1 To X)
For k = 1 To 4
t1(k, X) = t(i, k)
Next k: X = X + 1: End If: Next i Pourquoi il y a des ":" ?
Liste.Column = t1
Erase t, t1
End Sub

Peux-tu m'explique chaque ligne ? Il y a des choses que je comprends mais il ya des notions qui m'échappent.

En tout cas cela fonctionne très bien.

Merci
 

laetitia90

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

re ,



par defaut une variable non declarer excel considere comme du variant donc incidence sur la vitesse d'execution &
precision de calcul dans certains cas

Code:
Dim t1(), t()
que dit cette declaration de variable c'est du variant
dailleurs vu que je mets pas d'indice entre les parentheses on peut les supprimer
donc la variable s c'est du variant egalement

avantage des tableaux tant que pas erase le tableau reste charge en memoire
du coup je l'utilise dans ce code
Code:
Private Sub CommandButton1_Click()
 Liste.List = s
End Sub
j'ai pas utiliser dans Private Sub Choix_Change() mais on pouvait le faire

Code:
Private Sub Choix_Change()
  On Error Resume Next
  Liste.Clear
  t = s
  X = 1
  For i = 1 To UBound(t)
 ect..

les 2 : seulement pour ecrire sur la meme ligne beaucoup aime pas mais bon j'aime bien avoir une vision global
sans descendre le scrollbar sur de grandes macros

s = Feuil1.Range("a2:a" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row): Choix.List = s : Qu'est-ce que cela fait exactement ?

feuil1 je prends le code_name de la feuille comme comme cela si tu renomme la feuille pas d'incidence

je pars de a2 jusqu'a la derniere ligne de a non vide donc si tu supprime ou en rajoute pas de pb.. pris en compte
 

ChTi160

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

Bonsoir doclefou
Bonsoir le fil
bonsoir le forum
afin de pouvoir supprimer le Bouton CommandButton1
après avoir ajouté en tête de la liste des Adversaires <<TOUS>>
on peut imaginer la procédure Choix_Change sous cette forme .
Code:
Private Sub Choix_Change()
Dim Str_Search As String
  On Error Resume Next
  Liste.Clear
  With Feuil4
       t = .Range("a2:d" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
  End With
  X = 1
  For i = 1 To UBound(t)
       Str_Search = IIf(Choix.Text = "<<TOUS>>", "*", Choix.Text)
            If t(i, 1) Like Str_Search Then
                 ReDim Preserve t1(1 To 4, 1 To X)
                       For k = 1 To 4
                           t1(k, X) = t(i, k)
                        Next k
                        X = X + 1
            End If
   Next i
  Liste.Column = t1
  Erase t, t1
End Sub
Bonne fin de Soirée
Amicalement
Jean Marie
 

laetitia90

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

re ,tous :):):)

ChTi160 si je peus me permettre ... tu as remarque que je passe par un "tablo" que je charge a l'iniatilisation
& que je decharge pas dans ce cas précis avec erase comme expliqué plus " haut"

je vide seulement les variable t & t1 aprés chaque recherche pour pas trop charger la memoire
donc dans ce cas

pour supprimer commandbutton1 pas besoin de multiplier les conditions

Code:
Private Sub Choix_Change()
  On Error Resume Next
  If Choix = "TOUS" Then Liste.List = s: Exit Sub 'ligne rajoutée
  Liste.Clear
  t = s 'reference au tablo egalement
  x = 1
  For i = 1 To UBound(t)
  If t(i, 1) = Choix.Text Then
  ReDim Preserve t1(1 To 4, 1 To x)
  For k = 1 To 4
  t1(k, x) = t(i, k)
  Next k: x = x + 1: End If: Next i
  Liste.Column = t1
  Erase t, t1
End Sub



que remarque tu??? j'ai rajoute cette ligne au depart

Code:
 If Choix = "TOUS" Then Liste.List = s: Exit Sub

si TOUS je rappel le tablo s & je sors de la boucle plus simple & surtout plus rapide

Code:
With Feuil4

c'est pareil le tablo s fait deja réference a la feuil4

si on veut pousser le concept un peu plus long sans rajouter dans liste des Adversaires <<TOUS>>
tu as vu que j'utilse

Code:
Private Sub Choix_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
 Choix.DropDown
End Sub


on peu tres bien sans rien changer du code de depart seulement rajouter Liste.List = s

Code:
Private Sub Choix_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
 Choix.DropDown
 Liste.List = s
End Sub
mais bon pas agreable a l'oeil scintillements:( de la listbox
 

ChTi160

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

Bonjour doclefou
Bonjour laetitia
Bonjour Le Forum
Effectivement !!!!!
j'ai juste modifié le "TOUS" en "<<TOUS>>" Lol
le Liste.clear est il bien nécessaire ???
Bonne journée
Amicalement
Jean Marie
 

doclefou

XLDnaute Nouveau
Re : Aide sur listbox avec combobox

Bonjour à tous,

Après avoir intégré le code fourni par Laetitia90 concernant ma demande (qui répond à mes attentes), j'ai eu quelques souci.
J'ai adapté le code en mettant worksheets("base"). à la place de Feuil1. et worksheets("matchs"). à la place de Feuil4., puis le nom de ma combox au lieu de choix par liste_adversaire et le nom de la listbox par liste_rencontre.
Bien évidemment, j'ai fais un copié-collé des controls et du code pour les ajouter sur mon USF. Après avoir eu quelques désagréments liés à la recopie et à l'adaptation, j'ai eu un résultat en faisant F5.

Mais là il y a eu une faille spatio-exceliène que je n'ai pas compris de suite : lorsque je passais la souris sur ma combobox pour me donner la liste de toutes les équipes, j'en avais que 2 ou que 2 (code :s = Feuil1.Range("a2:a" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row): Choix.List = s qui chez moi est s = Worksheets("base").Range("c2:c" & Worksheets("base").Cells(Rows.Count, 1).End(xlUp).Row): liste_adversaire.List = s
J'ai essayé tout un tas de trucs (changer worksheets par Feul2, ajouter un nouveau control copié du fichier fourni apr Laetitia90).
Bref ce n'est qu'hier, alors que j'y étais depuis le 6 mai, que j'ai réussi en passant de
s = Feuil1.Range("a2:a" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row): Choix.List = s
à
s = Worksheets("base").Range("C2:C32"): liste_adversaire.List = s
Et là ça fonctionne correctement.
Je ne comprends pas pourquoi, est-ce la méthode pour créer les données ? est-ce le type ? Si quelqu'un veut s'amuser à regarder mon fichier complet, je suis donneur, par contre, il fait environ 3Mo.

En tous cas merci à tous.
 

laetitia90

XLDnaute Barbatruc
Re : Aide sur listbox avec combobox

bonjour tous
normal pas marcher!!!
quand j'ecris

Code:
 s = Feuil1.Range("a2:a" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row): Choix.List = s

je fais reference a la colonne a donc 1 (Rows.Count, 1)

donc si tu veus faire reference la la colonne c (Rows.Count, 3)

Code:
s = Feuil1.Range("c2:c" & Feuil1.Cells(Rows.Count, 3).End(xlUp).Row): Choix.List = s

plein d'autres methode pour l'ecrire
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 952
Membres
103 989
dernier inscrit
jralonso