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 :

Alimenter une ComboBox avec un tableau trié [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Alimenter une ComboBox avec un tableau trié
    Bonjour à tous,

    Titre on ne peut plus explicite: je cherche à alimenter une ComboBox avec un tableau trié, sur base de deux paramètres/critères. Ces deux critères sont choisis dans le formulaire (USF) par l'utilisateur: deux ComboBox.


    Voici le code que j'ai pu construire avec ce que j'ai pu trouvé sur internet et l'enregistreur de macro:

    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
    Public Sub AlimenterComboBox() 'Permet d'alimenter une ComboBox sur base des critères de tri envoyés à la fonction.
     
     
        Dim A As Range, Plage As Range, C As Range, Dico As Object
        Dim Domaine As String, Niveau As String
     
        '######## Définition des critères de tri #############
     
        Domaine = ComboBoxDomaineDeCompetence.Text 
        Niveau = ComboBoxNiveau.Text
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        With Sheets("Criteres").ListObjects("TableauCriteres") '###### Le code plante à partir d'ici ######
     
        .Range.AutoFilter Field:=2, Criteria1:=Domaine  'Trie TableauCriteres selon les paramètres envoyés en argument
        .Range.AutoFilter Field:=3, Criteria1:=Niveau
     
    End With
     
            Set Plage = Range("TableauCriteres[Critères]").SpecialCells(xlCellTypeVisible)
     
        With Me.ComboBoxCriteresAlimentes 'Alimente la ComboBox
     
            For Each A In Plage
                For Each C In A
                    If Not Dico.Exists(C.Value) Then
                        .AddItem C.Value
                        Dico.Add C.Value, C.Value
                    End If
                Next C
            Next A
        End With
     
    ActiveSheet.ListObjects("TableauCriteres").Range.AutoFilter Field:=2 'Annule le filtrage
    ActiveSheet.ListObjects("TableauCriteres").Range.AutoFilter Field:=3
     
    End Sub
    Comme vous l'aurez compris, c'est le tableau "TableauCriteres" sur la page "Criteres" que je cherche à trier pour alimenter ma ComboBox.

    Si une âme charitable pouvait m'aider, à m'en sortir, je lui en serait très reconnaissant !

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Remplir Combobox avec les données d'un tableau trié
    Re,


    Je m'excuse profondément, l'erreur vient de ma part (dans tous les cas ça l'aurait été): j'ai oublié un accent sur le nom d'une feuille.

    Je vous met donc le code qui fonctionne et un peu amélioré au passage ! Cadeau pour de futurs lecteurs qui en auraient besoin !

    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
    Public Sub AlimenterComboBox() 'Permet d'alimenter une ComboBox sur base des critères de tri envoyés à la fonction.
     
     
        Dim A As Range, Plage As Range, C As Range, Dico As Object
        Dim Domaine As String, Niveau As String
     
        Domaine = ComboBoxDomaineDeCompetence.Text 'Définition des critères de tri
        Niveau = ComboBoxNiveau.Text
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        With Sheets("Critères").ListObjects("TableauCriteres")
     
        .Range.AutoFilter Field:=2, Criteria1:=Domaine  'Trie TableauCriteres selon les paramètres envoyés en argument
        .Range.AutoFilter Field:=3, Criteria1:=Niveau
     
    End With
     
    '####### Remplissage ComboBox avec les données triées ####
     
    Me.ComboBoxCriteresAlimentes.List = Range("TableauCriteres[Critères]").SpecialCells(xlCellTypeVisible).Formula
     
     
    Sheets("Critères").ListObjects("TableauCriteres").Range.AutoFilter Field:=2 'Annule le filtrage
    Sheets("Critères").ListObjects("TableauCriteres").Range.AutoFilter Field:=3
     
    End Sub

    Bonne journée !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2012, 18h14
  2. [XL-2010] Alimenter un ComboBox avec le contenu d'une colonne d'un fichier xls externe
    Par cryptoboss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2012, 14h56
  3. remplir une combobox avec un tableau
    Par calvi2002 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/07/2009, 14h02
  4. [A-03] Comment alimenter une combobox avec plusieurs tables
    Par MichaSarah dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/01/2009, 11h02
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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