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 :

Créer une liste déroulante à partir de données filtrées [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Créer une liste déroulante à partir de données filtrées
    Bonjour,
    Voici la procédure que je voudrais mettre en œuvre dans le cadre d’une association sportive :
    Sur une feuille « Inscriptions » j’ai 2 colonnes, commençant ligne 8, recensant les « Noms » des participants sur une 1ére colonne et leurs « Régions » associées sur la 2de colonne
    Sur une autre feuille « Classement », j’ai un tableau répertoriant les médaillés, avec les 2 mêmes colonnes Régions puis Noms
    Dans cette feuille Classement, je voudrais qu’une fois la Région définie dans une cellule Région, une liste déroulante soit produite, dans la cellule Nom, contiguë, avec les seuls noms associés à cette région (en se basant sur les 2 colonnes de la feuille Inscriptions, puis filtrage) .

    Au niveau VBA (que je ne maitrise pas vraiment) de la feuille Classement, j’ai créé un tableau Liste_Noms_Région(), filtrant sur une région, que j’ai essayé d’associer ensuite, soit à un With, soit en passant par la création d’une combo (cf ci-dessous) … sans succés ! ça bloque avec erreurs d’incompatibilité.
    Pourriez-vous m’aider
    Merci d’avance
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Nom_Region  As String
    Dim Liste_Noms_Region()
    Dim Liste_Noms As String
    Dim CmbListe As Object
    Set CmbListe.Name = Liste_Noms_AS() 
     
    Dim Combo As MSForms.ComboBox
    Dim I As Long
     
    Sheets("Classement").Select
    Nom_Region= Range("B6")		‘Colonne B pour les noms de Région
     
    Sheets("Inscriptions").Select
    DLig = Range("C" & Rows.Count).End(xlUp).Row
     
    ‘ Création du tableau, filtrant tous les Noms associés à la Région définie initialement en B6 de Classement
    j = 1
    For I = 0 To DLig
        If Range("D" & I + 8) = Nom_Region Then		‘Colonne D pour les noms de Région
        Liste_Noms_Region(j) = Range("C" & I + 8)	‘Colonne C pour les Noms des participants
        j = j + 1
        End If
    Next
     
    Sheets("Classement ").Select
    Range("C6").Select			‘Colonne C pour les Noms des participants
     
    'Si une valeur change dans la colonne B
    If Not Intersect(Target, [B:B]) Is Nothing Then
           With CmbListe
               .Name = Liste_Noms_Region
               Set Combo = .Object
           End With
     
            'Remplissage de la liste
            For I = 1 To UBound(CmbListe())
                Combo.AddItem CmbListe(I)
            Next I
    End If
    End Sub

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_GotFocus()
       Tbl = Range("B2:B" & [A65000].End(xlUp).Row).Value
       Set d = CreateObject("scripting.dictionary")
       For i = 1 To UBound(Tbl): d(Tbl(i, 1)) = "": Next i
       Me.ComboBox1.List = d.keys
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Merci de t’être penché sur mon pb, mais ce n’est pas tout à fait ça que je voudrais
    Voir ta PJ que j’ai complétée et renseignée par rapport à mon besoin
    Pour prendre un exemple précis, c’est en fait une liste déroulante que je voudrais voir apparaitre dans la cellule C4 de la feuille Classement, mais au lieu de voir tous les noms apparaitre (comme actuellement), je voudrais avoir uniquement les noms qui sont associée à la région définie en B4 (Région2), soit les noms suivants de la feuille Inscriptions : Nom2, Nom6, Nom7, Nom9, Nom10, Nom14
    Est-ce possible ?
    Merci encore pour ton aide

    Classeur1.xlsm

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect([C2:C100], Target) Is Nothing And Target.Count = 1 Then
        Set f = Sheets("inscriptions")
        Set d = CreateObject("Scripting.Dictionary")
        For Each c In f.Range("b2:b" & f.[b65000].End(xlUp).Row)
           If Target.Offset(, -1) = c Then d(c.Offset(, -1)) = ""
        Next c
        Target.Validation.Delete
        Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
      End If
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    SUPER, GENIAL !! Merci beaucoup, c'est exactement ce que je voulais ;-))
    Je vais pouvoir avancer dans le projet

    Encore MERCI !
    François

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

Discussions similaires

  1. [MySQL] Créer une liste déroulante à partir des valeurs de la BDD
    Par enterprise dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/06/2018, 12h53
  2. Création d'une liste déroulante à partir des données d'un tableau
    Par LVSUser dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/04/2017, 17h49
  3. Créer une liste déroulante à partir d'une base de données
    Par shaiyajoueur dans le forum Android
    Réponses: 2
    Dernier message: 13/12/2012, 14h33
  4. Réponses: 3
    Dernier message: 22/03/2009, 18h47
  5. Réponses: 4
    Dernier message: 25/05/2007, 16h25

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