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 :

combobox2 filtré par combobox1 [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Par défaut combobox2 filtré par combobox1
    Bonjour,

    J'ai une base de données d'emprunt de materiel avec des noms de clés et leur numero

    J'ai creer dans une autre feuille deux combobox,
    - une affiche les noms de clé de ma BDD,
    - l'autre affiche les numeros
    Je voudrais que : lorsque je choisi un nom de clé , ma combobox numero soit triée et n'affiche que les numeros correspondant au type de clé choisi

    Voici mon malheureux code VBA, s'il vous plaît aidez moi!!!

    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
    Private Sub ComboBox1_DropButtonClick()
    Dim Lescles As Object, Cel As Range
    Set Lescles = CreateObject("Scripting.Dictionary")
    With Sheets("BD")
        For Each Cel In .Range("c3:c" & .[c65000].End(xlUp).Row)
            If Not Lescles.Exists(Cel.Value) And Cel.Value <> "" _
                Then Lescles.Add Cel.Value, Cel.Value
        Next Cel
    End With
    Me.ComboBox1.List = Application.Transpose(Lescles.items)
     
    End Sub
     
    Private Sub ComboBox2_DropButtonClick()
    Dim Lesnumeros As Object, Cel As Range
    Set Lesnumeros = CreateObject("Scripting.Dictionary")
    With Sheets("BD")
        For Each Cel In .Range("d3:d" & .[d65000].End(xlUp).Row)
            If Not Lesnumeros.Exists(Cel.Value) And Cel.Value <> "" _
                Then Lesnumeros.Add Cel.Value, Cel.Value
        Next Cel
    End With
    Me.ComboBox2.List = Application.Transpose(Lesnumeros.items)
     
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Une piste de la FAQ

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Par défaut
    Merci beaucoup, mais cela ne m'aide pas, je suis extrêmement novice en VBA.

    Sauriez-vous comment faire pour:
    que ma ComboBox2 dépende de ma ComboBox1

    Actuellement la ComboBox2 m'affiche tout les résultats sans tenir compte du choix de ComboBox1

    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
    Private Sub ComboBox1_DropButtonClick()
    Dim Lescles As Object, Cel As Range
    Set Lescles = CreateObject("Scripting.Dictionary")
    With Sheets("BD")
        For Each Cel In .Range("c3:c" & .[c65000].End(xlUp).Row)
            If Not Lescles.Exists(Cel.Value) And Cel.Value <> "" _
                Then Lescles.Add Cel.Value, Cel.Value
        Next Cel
    End With
    Me.ComboBox1.List = Application.Transpose(Lescles.items)
     
    End Sub
     
    Private Sub ComboBox2_DropButtonClick()
    Dim Lesnumeros As Object, Cel As Range
    Set Lesnumeros = CreateObject("Scripting.Dictionary")
    With Sheets("BD")
        For Each Cel In .Range("d3:d" & .[d65000].End(xlUp).Row)
            If Not Lesnumeros.Exists(Cel.Value) And Cel.Value <> "" _
                Then Lesnumeros.Add Cel.Value, Cel.Value
        Next Cel
    End With
    Me.ComboBox2.List = Application.Transpose(Lesnumeros.items)
     
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En utilisant ta méthode, essaies ceci

    La ComobBox1 se rempli à l’initialisation de l'userform
    La ComboBox2 se remplie au changement de la valeur de ComboBox2

    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
    Private Sub UserForm_Initialize()
    Dim LesCles As Object
    Dim LastLig As Long
    Dim Cel As Range
     
    Set LesCles = CreateObject("Scripting.Dictionary")
    With Sheets("BD")
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        For Each Cel In .Range("C3:C" & LastLig)
            If Not LesCles.Exists(Cel.Value) And Cel.Value <> "" Then LesCles.Add Cel.Value, Cel.Value
        Next Cel
    End With
    Me.ComboBox1.List = Application.Transpose(LesCles.items)
    Set LesCles = Nothing
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim LesNumeros As Object
    Dim LastLig As Long
    Dim Cel As Range
    Dim Cle As String
     
    Me.ComboBox2.Clear
    If Me.ComboBox1.ListIndex > -1 Then
        Cle = Me.ComboBox1.Value
        Set LesNumeros = CreateObject("Scripting.Dictionary")
        With Sheets("BD")
            LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
            For Each Cel In .Range("D3:D" & LastLig)
                If Not LesNumeros.Exists(Cel.Value) And Cel.Value <> "" And Cel.Offset(0, -1).Value = Cle Then LesNumeros.Add Cel.Value, Cel.Value
            Next Cel
        End With
        If LesNumeros.Count > 0 Then Me.ComboBox2.List = Application.Transpose(LesNumeros.items)
        Set LesNumeros = Nothing
    End If
    End Sub

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Par défaut
    C'est parfait!!!
    Merci mille fois!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/07/2006, 11h40
  2. Cumuler des Filtres par Selection en VBA ?
    Par Fredo67 dans le forum Access
    Réponses: 4
    Dernier message: 05/07/2006, 14h00
  3. Envoyer plusieurs états filtrés par mail...
    Par Thierry'' dans le forum IHM
    Réponses: 8
    Dernier message: 20/09/2005, 12h02
  4. Réponses: 3
    Dernier message: 23/02/2005, 16h51

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