tri cascade sur 2ème combobox

guyt

XLDnaute Nouveau
Bonjour à tous,

je me permets de vous solliciter à nouveau pour un autre problème.

Préambule:
1USF avec 2 série de combobox en cascade qui permettent d'effectuer des recherches sur un classeur avec une visualisation via une listview.
le Combobox 1 fait un 1er tri et le 2ème combobox permet d'affiner le tri.
La où je bloque c'est d'avoir une liste déroulante sans doublon sur le 2ème combobox (c'est Ok pour le 1er).
Je vous joins un fichier pour mieux me faire comprendre.

Merci par avance à tous ceux qui pourront m'aider.

Bonne soirée à tous
 

Pièces jointes

  • essai.zip
    32.4 KB · Affichages: 59
  • essai.zip
    32.4 KB · Affichages: 58
  • essai.zip
    32.4 KB · Affichages: 55

jp14

XLDnaute Barbatruc
Re : tri cascade sur 2ème combobox

Bonsoir

Une collection permet de résoudre simplement le problème

Code:
Private Sub ComboBox1_Change()
  Dim collec As New Collection
  If Me.ComboBox1.Value = "" Then Exit Sub

  Me.ComboBox2.Clear

  With Me.ListView1
    .ListItems.Clear
    .CheckBoxes = False
    .FullRowSelect = True
    .Gridlines = True
    .LabelEdit = 1
    .View = 3
    For l = 1 To UBound(Tabtemp, 1)
      If Tabtemp(l, 5) = Me.ComboBox1.Value Then
    'Me.ComboBox2.AddItem Tabtemp(l, 4)
        .ListItems.Add , , Tabtemp(l, 1)
        x = .ListItems.Count
        .ListItems(x).ListSubItems.Add , , Tabtemp(l, 2)
        .ListItems(x).ListSubItems.Add , , Tabtemp(l, 3)
        .ListItems(x).ListSubItems.Add , , Tabtemp(l, 4)
        On Error Resume Next
        collec.Add Tabtemp(l, 4), CStr(Tabtemp(l, 4))
        .ListItems(x).ListSubItems.Add , , Tabtemp(l, 5)
        .ListItems(x).ListSubItems.Add , , Tabtemp(l, 6)

        x = x + 1
      End If
    Next
  End With
  
  With Me.txtTotal
    Me.txtTotal = ListView1.ListItems.Count - 0
  End With
  For i = 0 To collec.Count
    Me.ComboBox2.AddItem collec(i)
  Next i
End Sub

A tester

JP
 

guyt

XLDnaute Nouveau
Re : tri cascade sur 2ème combobox

Bonjour JP,

Merci beaucoup pour ton coup de pouce. Cela fonctionne à merveille ; Pourrais-tu m'expliquer la variable CStr?

Si je peux abuser un peu plus de ta patience, j'aurais bien eut une demande supplémentaire :
Avec l'outil actuel, je suis capable de faire un tri selon les valeurs des cellules, MAIS il serait interessant pour moi, d'avoir une possibilité de visualiser les cellule non rempli (est-ce possible d'effectuer cela avec le même combobox?)

En tout cas un grand merci!

Bonne journée
 

jp14

XLDnaute Barbatruc
Re : tri cascade sur 2ème combobox

Bonjour guyt

L'index d'une collection doit être du type STRING, pour éviter une erreur on rajoute systématiquement CSTR ( Convertir une donnée en chaine de caractère ).

Concernant la deuxième question il faudrait un peu plus d'explication.

JP
 

guyt

XLDnaute Nouveau
Re : tri cascade sur 2ème combobox

J'ai modifié le fichier (en pièce jointe) pour être plus précis.

Ainsi, quand je clic sur ma checkbox "Désignation", et je choisis "holter ECG" pour le menu déroulant "désignation", dans ma listview apparait dans la colonne "modèle" : 3 spiderview et 2 zones non remplies.
Dans l'exemple, il n'y a que 12 lignes de remplies MAIS au bout de 1000, et plus, il sera important de trier et de visualiser l'ensemble des zones non remplies de la colonne modèle.
Et c'est là qu'intervient ma question:
est-ce possible que lorsque je clic sur la 1ère ligne vide de mon menu déroulant "modèle" cela me tri et me sélectionne l'ensemble des lignes vides (comme quand je clic spiderview cela me tri et me sélectionne uniquement les modèle spiderview).

J'espère que j'arrive à me mieux me faire comprendre,

Merci par avance et bonne journée,

Guyt
 

Pièces jointes

  • essai.zip
    29 KB · Affichages: 81
  • essai.zip
    29 KB · Affichages: 90
  • essai.zip
    29 KB · Affichages: 73

jp14

XLDnaute Barbatruc
Re : tri cascade sur 2ème combobox

Bonsoir

Ci dessous la procédure modifiée.

Code:
Private Sub combobox5_Change()
If ComboBox5.ListIndex = -1 Then Exit Sub
If Me.ComboBox4.Value = "" Then Exit Sub
'[COLOR="lime"]If Me.ComboBox5.Value = "" Then Exit Sub [/COLOR]

  With Me.ListView1
    .ListItems.Clear
    For l = 1 To UBound(Tabtemp, 1)
      If Tabtemp(l, 4) = Me.ComboBox4.Value And Tabtemp(l, 6) = Me.ComboBox5.Value Then
        
        .ListItems.Add , , Tabtemp(l, 1)
        With .ListItems(.ListItems.Count)
        .ListSubItems.Add , , Tabtemp(l, 2)
        .ListSubItems.Add , , Tabtemp(l, 3)
        .ListSubItems.Add , , Tabtemp(l, 4)
        .ListSubItems.Add , , Tabtemp(l, 5)
        .ListSubItems.Add , , Tabtemp(l, 6)
        End With
      End If
    Next l
  End With

With Me.txtTotal
     .Value = ListView1.ListItems.Count '- 0
End With
End Sub

Les combobox servant à sélectionner une valeur existante il est préférable de prendre l'option fmStyleDropDownList pour la propriété Style.

JP
 

Discussions similaires

Réponses
28
Affichages
1 K
Réponses
4
Affichages
288

Statistiques des forums

Discussions
312 304
Messages
2 087 061
Membres
103 447
dernier inscrit
DamD