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 :

Données d'une liste modifiable ( combobox) dépendant d'un autre liste modifiable ( 4 Niveaux ) [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Points : 87
    Points
    87
    Par défaut Données d'une liste modifiable ( combobox) dépendant d'un autre liste modifiable ( 4 Niveaux )
    Bonjour,
    Cela fait 4 mois que je "connais" ( j'ai bien mis des guillemets ) VBA Excel mais là je ne trouve aucune réponse à ma question :
    Dans un USERFORM :
    Je souhaite créer plusieurs combobox dont le contenu change en fonction de la première ( pour la liste de la 2ème ) et ceci jusqu'au niveau 3.
    Dans ma colonne A de ma feuille DVL ( qui signifie Département Ville Lycée ) figure les départements 14, 50 et 61
    Dans ma colonne B figure les villes du 14
    dans ma colonne C celle du 50 ( et D pour 61 )
    Si on clique sur 61 ( par exemple ) je souhaite voir apparaître les villes suivantes dans la combobox2 ( Alençon, Argentan, Flers, La Ferté Macé et Mortagne ).
    Ensuite, si je clique sur Alençon ( par exemple ), je souhaite voir apparaitre les différents lycées professionnels de cette ville dans une autre combobox3 ( Mézen, Leclerc ou St François ). Ensuite le reste est fait...
    Conclusion : J'arrive bien à configurer une combobox mais pas une succession.

    Mille MerciSSSSS d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Pouvez-vous mettre, en pièce jointe, votre classeur édulcoré des données confidentielles ?

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Points : 87
    Points
    87
    Par défaut Fichier à utiliser pour m'aider à créer un userform avec les combobox emboitées
    Merci d'avance PMO2017. Je vois que tu veux bien essayer de résoudre mon problème.
    Je t'ai envoyé les 2 feuilles. L'une contenant les départements, villes et lycées. L'autre comportant les formations par lycées.
    Pour le reste je me débrouille ( avec les différents contrôle.source )

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut remplissage combo
    Bonjour
    Je me suis permis de modifier la feuille DV
    j'ai placer les departements en ligne1 et les villes le composant en dessous

    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
    Private Sub userform_Initialize()
    Dim cell As Range
    Me.Departement.Clear 'vide les trois combo avant de les recharger
    Me.Ville.Clear
    Me.Lycee.Clear
    'toutes les cellules de la ligne 1
    For Each cell In Feuil5.Range(Feuil5.Cells(1, 1), Feuil5.Cells(1, Feuil5.Cells(1, 1).End(xlToRight).Column))
    Me.Departement.AddItem cell 'ajoute le departement
    'pour ajouter un departement, rien d'autres a faire que d'ajouter une colonne
    'dans la feuille, celui ci sea pris automatiquement en compte
    'sans intervention sur le code
    Next cell
    End Sub
     
    Private Sub Departement_Change()
    Dim cell As Range
    Dim c As Integer
    Me.Ville.Clear
    Me.Lycee.Clear
    c = Me.Departement.ListIndex + 1
    For Each cell In Feuil5.Range(Feuil5.Cells(2, c), Feuil5.Cells(Feuil5.Cells(2, c).End(xlDown).Row, c))
    Me.Ville.AddItem cell
    Next cell
    End Sub
     
     
    Private Sub Ville_Change()
    Dim c As Range
    Dim firstaddress As String
    Me.Lycee.Clear
    'recherche la ville selectionne dans lal  ligne 1 de diplome par lycee
    With Feuil4.Rows(1)
        Set c = .Find(Me.Ville, LookIn:=xlValues)
        If Not c Is Nothing Then
            firstaddress = c.Address
            Do
            'et rempli la combo si une occurence est trouvée
                Me.Lycee.AddItem c
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstaddress
        End If
    End With
    End Sub
    Si je puis me permettre, on a deja vu plus simple pour stocker les données.

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Points : 87
    Points
    87
    Par défaut Réponse pour keygen08
    Merci pour ton travail que je me suis dépêcher de tester.
    Tu me dis qu'il y a plus simple pour stocker des données. Le problème c'est que je ne maitrise pas tout loin de là! ( je ne prends pas mal ta remarque bien au contraire je suis preneur de nouvelles techniques...)
    Pour ce qui est de ton programme, il fonctionne à MERVEILLE. Toutefois j'ai quelques questions à te poser.
    Lorsque je choisis le département, la combobox2 m'affiche bien les Villes correspondantes.
    Losrque je choisis une ville, la combobox3 m'affiche bien les noms des lycées de la ville AVEC AU BOUT ENTRE PARENTHESES LES VILLES ECRITES.
    Et c'est bien là le premier problème : Lorsque je modifie la ligne 1 de la feuille "Diplomes par lycées" ( autrement dit j'efface la ville ) cette dernière ne s'affiche plus lorsque j'exécute la macro. ( exemple avec Saint François où ALENCON a été effacé )

    Deuxième problème :
    Lorsque je prends le fichier d'origine avec la macro de KEYGEN08 ( qui fonctionne très bien ) je n'arrive pas à récupérer la cellule qui correspondrait à la sélection. Avec mes autres macros, j'écrivais : Me.Section2.ControlSource = "Programmation!A101" dans Private Sub userform_Initialize() ça fonctionnait mais là je ne sais vraiment pas comment faire. JE NE PEUX EXPLOITER LA SELECTION




    Car ensuite, je veux afficher le nom de ce lycée dans un textbox et afficher toutes les formations en dessous avec des futures combobox qui demanderont ( à mes collègues ) le nombres de classe par formation et leur Acronymes ( exemple 1ASSP pour des premières en Accompagnement Soins et Services à la Personne )
    Un grand souci sera d'afficher un nombre variable de textbox
    en effet, suivant le lycée, si ce dernier comporte une formation BAC pro, il faudrait 4 Textbox ( une pour afficher la formation et 3 pour chacun des niveaux ) tandis qu'un autre lycée peut avoir 3 Bac Pro et 2 CAP ( soit 4+4+4 + 3+3 = 18 Textbox )

    Dans un premier temps , je vous remercie par avance de m'aider à résoudre les 2 premiers problèmes.....
    Je joints mon fichier ( dernière version )


    NOVICE 72





    Encore merci

  6. #6
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonsoir, premier problème
    remplacer dans sub ville change
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.Lycee.AddItem RTrim(Left(c, InStr(c, "(") - 1))
    ceci afin de permettre d'eliminer le texte entre parenthese dans la combo
    et seulement dans la combo puisque lon utilise se morceau de texte pour le rechercher dans le tableaux

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    J'ai fait un exemple qui ne traite que 2 choses
    1) organisation d'une base de données tabulaire
    2) et une technique (entre autres) de ComboBoxes en cascade

    C'est plus un exemple didactique qu'une solution à votre problème et j'espère qu'il vous apportera bienfait.
    Pour ce faire, je n'ai conservé qu'une feuille "DVL" et l'UserForm "Depart" dans lequel les 3 ComboBoxes subsistent.

    Dans la feuille "DVL", la colonne A (LYCEE) pourra servir de clé pour construire une autre base avec les classes, nom des élèves, etc.
    Le code du UserForm est le suivant
    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
    Dim var As Variant  'variable déclarée au niveau module
     
    Private Sub Lycee_Enter()
    Dim i&
    Dim varTab As Variant
    '---
    Lycee.Clear
    If Ville = "" Then Exit Sub
    '---
    On Error Resume Next
    Lycee.List = GetList(ColSearch:=1, Filtre:=Ville, ReferToCol:=2)
    End Sub
     
    Private Sub Ville_Enter()
    Dim i&
    Dim varTab As Variant
    '---
    Ville.Clear
    Lycee.Clear
    If Departement = "" Then Exit Sub
    '---
    On Error Resume Next
    Ville.List = GetList(ColSearch:=2, Filtre:=Departement, ReferToCol:=3)
    End Sub
     
    Private Sub Departement_Enter()
    Dim i&
    Dim varTab As Variant
    '---
    Departement.Clear
    Ville.Clear
    Lycee.Clear
    '---
    Departement.List = GetList(ColSearch:=3)
    End Sub
     
    Private Sub UserForm_Initialize()
    '### On stocke toute la feuille Base de données dans un Variant ###
    '###   de portée Module (voir tout en haut Dim var As Variant)  ###
    Dim R As Range
    Set R = Sheets("DVL").[a1].CurrentRegion
    var = R
    End Sub
     
    '############################################################################################
    '### La fonction GetList recherche les éléments sans doublon et triés par ordre croissant ###
    '### et retourne un Variant Tableau                                                       ###
    '###                                                                                      ###
    '### Les arguments :                                                                      ###
    '### ColSearch  : N° de colonne de la base de données dont les éléments seront affichés   ###
    '###              dans la liste de la ComboBox                                            ###
    '### Filtre     : La valeur de la ComboBox Parent qui filtre les éléments correspondants  ###
    '### ReferToCol : N° de colonne du filtre                                                 ###
    '############################################################################################
    Private Function GetList(ColSearch As Long, Optional Filtre As Variant, Optional ReferToCol As Long) As Variant
    Dim SL As Object
    Dim i&
    Dim T()
    '---
    Set SL = CreateObject("System.Collections.SortedList")
    On Error Resume Next
    For i& = 2 To UBound(var, 1)    'on part de la ligne 2 pour omettre la ligne de titres
      If IsMissing(Filtre) Then
        SL.Add var(i&, ColSearch), var(i&, ColSearch)
      Else
        If var(i&, ReferToCol) = Filtre Then
          SL.Add var(i&, ColSearch), var(i&, ColSearch)
        End If
      End If
    Next i&
    On Error GoTo 0
    '---
    If SL.Count > 0 Then
      ReDim T(1 To SL.Count)
      For i& = 0 To SL.Count - 1
        T(i& + 1) = SL.GetKey(i&)
      Next i&
      GetList = T
    End If
    End Function
    Bon courage et bonne extrapolation.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2015
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2015
    Messages : 211
    Points : 87
    Points
    87
    Par défaut modification du contenu des cellules avec influence sur combobox
    Citation Envoyé par keygen08 Voir le message
    Bonsoir, premier problème
    remplacer dans sub ville change
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.Lycee.AddItem RTrim(Left(c, InStr(c, "(") - 1))
    ceci afin de permettre d'eliminer le texte entre parenthese dans la combo
    et seulement dans la combo puisque lon utilise se morceau de texte pour le rechercher dans le tableaux

    Bonsoir,
    pourquoi doit-on utiliser ce "morceau de texte" ( que j'avais mis et qui finalement ne sert plus à rien ) pour la recherche du tableau ?
    Autrement dit pourquoi la recherche ne se fait-elle pas comme pour les villes ( en effet, si tu as remarqué j'avais mis Vire dans la manche au lieu du Calvados et il n'y a pas eu de bug ) ?
    N'est-il pas possible que la combobox utilise le contenu des cellules????? Comme ça si il a une erreur dans le nom du Lycée ( ou autre ) : plus de problème.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/08/2009, 18h03
  2. Liste deroulante qui modifie les valeurs de plusieur autres listes
    Par luan220 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/08/2008, 19h06
  3. ADO remplir une zone de liste modifiable (combobox)
    Par frack dans le forum VBA Access
    Réponses: 9
    Dernier message: 06/02/2008, 14h04
  4. Modifier une liste déroulante (Combobox)
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/06/2007, 12h22
  5. générer des listes deroulantes qui decoule d'1 autre liste
    Par amarcil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/04/2006, 10h44

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