IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comboxbox Listbox ListView en cascade


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 35
    Par défaut
    Bonjour à tous,
    Je pédale un peu dans la semoule car je cherche à faire un truc que je n'arrive pas, c'est pour ça que je viens vers vous.

    Suivant mon fichier ci-joint j'essaie de faire des filtres en cascade via un formulaire (comboxbox1/2/3/lisbox1 fonctionnent en cascade), cependant je n'arrive pas à trouver la suite logique quand je sélectionne 1 ou plusieurs données sur ma listbox1 pour remplir la listbox2, tout en prenant en compte les combobox 1 2 et 3 et listebox1 d'avant (tout ça bien sur en triant sans doublon et par ordre alphabétique)

    Puis après remplir ma listview1 avec toutes les autres données filtrées, pour que cela m'affiche les colonnes AE à AR.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    '== On déclare la variable public pour la feuille de travail ==
    Dim f
     
    '== CommandButton1 : Reset filter ==
    Private Sub CommandButton1_Click()
    '==== On efface toutes les données
    Me.ComboBox1.Clear
    Me.ComboBox2.Clear
    Me.ComboBox3.Clear
    Me.ListBox1.Clear
    Me.ListBox2.Clear
    '==== On réinitialise l'UserForm
    UserForm_Initialize
    End Sub
     
    '== CommandButton2 : Close UserForm ==
    Private Sub CommandButton2_Click()
    '==== On ferme l'UserForm
    Unload MyUserForm
    End Sub
     
    '== On initialise l'UserFrom ==
    Private Sub UserForm_Initialize()
    '==== On déclare la feuille sur laquelle on travail
    Set f = Sheets("BD")
    '==== On vient sur le ComboxBox1 lors du démarrage
    Me.ComboBox1.SetFocus
    '==== On créé le dictionnaire
    Set mondico = CreateObject("Scripting.Dictionary")
    '==== On déclare la plage pour la ComboBox1
    For Each c In Range("H2:H" & [H65000].End(xlUp).Row)
    mondico(c.Value) = ""
    Next c
    '==== On vient remplir une variable, ici temp, qui vient lister toutes les données
    temp = mondico.keys
    '==== On appelle la fonction Tri pour trier la ComboBox1
    Call Tri(temp, LBound(temp), UBound(temp))
    '==== Une fois trié on remplit la ComboBox1
    Me.ComboBox1.List = temp
    End Sub
     
    '== Lorsque l'on clique sur le ComboBox1, cela rempli la ComboBox2 ==
    Private Sub ComboBox1_click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Me.ListBox2.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("H2:H" & [H65000].End(xlUp).Row)
        If c = Me.ComboBox1 Then mondico(c.Offset(0, 3).Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox2.List = temp
    End Sub
     
    '== Lorsque l'on clique sur le ComboBox2, cela rempli la ComboBox3 ==
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Me.ListBox2.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
        If c.Offset(, 4) = Me.ComboBox1 And c.Offset(, 7) = Me.ComboBox2 Then mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      'Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox3.List = temp
    End Sub
     
    '== Lorsque l'on clique sur le ComboBox3, cela rempli la ListBox1 ==
    Private Sub ComboBox3_click()
      Me.ListBox1.Clear
      Me.ListBox2.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      i = 0
      For Each c In Range("I2:I" & [I65000].End(xlUp).Row)
        If c.Offset(, -1) = Me.ComboBox1 And c.Offset(, 2) = Me.ComboBox2 And c.Offset(, -5).Value = Me.ComboBox3 Then
          mondico(c.Value) = ""
          Me.ListBox1.AddItem c
          i = i + 1
        End If
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ListBox1.List = temp
      Me.ListBox1.MultiSelect = fmMultiSelectMulti
    End Sub
     
    '== Lorsque l'on change une donnée dans la ListBox1, cela rempli la ListBox2 ==
    Private Sub ListBox1_Change()
        Me.ListBox2.Clear
        Set mondico = CreateObject("Scripting.Dictionary")
        For Each c In Range(f.[I2], f.[I65000].End(xlUp))
            For k = 0 To Me.ListBox1.ListCount - 1
              If Me.ListBox1.Selected(k) = True Then
                If c = Me.ListBox1.List(k, 0) Then
                  temp = c.Offset(, 1)
                  mondico(temp) = temp
                End If
              End If
            Next k
        Next c
        temp = mondico.keys
        Call Tri(temp, LBound(temp), UBound(temp))
        Me.ListBox2.List = temp
    End Sub
     
    '== Fonction Tri
    Sub Tri(a, gauc, droi)
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
          If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
          End If
        Loop While g <= d
        If g < droi Then Call Tri(a, g, droi)
        If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Une idée ?
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip BD.zip (1,36 Mo, 146 affichages)

Discussions similaires

  1. ListBox, ListView ou Datagridview
    Par olibara dans le forum C#
    Réponses: 3
    Dernier message: 12/08/2012, 18h15
  2. MVVM ListBox/ListView Selected Item
    Par gridin dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 03/02/2011, 09h51
  3. listbox en cascade
    Par meumeu73.1 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 23/01/2008, 15h05
  4. 3 Combobox (Listbox) en cascade la 3éme colonne ne s'affiche pas
    Par minogttao dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/11/2006, 22h44
  5. [C#] ListBox, ListView, TreeView
    Par Kerod dans le forum Windows Forms
    Réponses: 1
    Dernier message: 31/05/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo