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 :

VBA - ComboBox Conditionnelle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Par défaut VBA - ComboBox Conditionnelle
    Bonjour à tous !

    J'ai besoin d'aide pour une histoire de ComboBox

    Je cherche à mettre dans un UserForm, deux ComboBox, dont la deuxième aurait des propositions qui dépendent de ce qui aura été sélectionné dans la première.

    J'ai une feuille "MARQUE" avec des marques de véhicules, listées dans un tableau à une colonne "TableauMARQUE", pour que l'utilisateur puisse ajouter des marques sans que cela ne nécessite d'ajustement dans la programmation.

    J'ai une feuille "MODEL" avec également un tableau à autant de colonnes qu'il y a de marques dans TableauMARQUE, nommé "TableauMODEL". Ce tableau a une en-tête avec les marques des véhicules, et sous chaque marque, les différents modèles de ces marques.

    Le but étant dans l'UserForm, que l'utilisateur sélectionne dans sa première ComboBox, la marque du véhicule, et que la deuxième ComboBox ne propose que les modèles qui correspondent à la marque.

    Etant donné que l'utilisateur aura la possibilité d'ajouter des marques et des modèles dans les tableaux, il faut que les plages prennent en compte ces ajouts, sans que la ComboBox n'affiche les cellules vides.

    Je bloque, et je n'ai pas vraiment réussi à trouver mon bonheur en surfant sur les forums ...

    J'en appelle à vos compétences !

    A bientôt !

    BarBi

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,
    Le code que j'utilise pour des listbox, a adapter a ton cas:
    il utilise un tableau sur les colonnes G et H de la feuille liste
    MARQUE MODEL
    ma1 mo1
    ma1 mo2
    ma1 mo3
    ma1 mo4
    ma1 mo5
    ma2 mo1
    ma2 mo2
    ma2 mo3
    ma2 mo4

    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
    Private Sub UserForm_Initialize()
    'initialisation des listes, sauf pour celle des polices qui se fait dynamiquement en fonction du choix de l'assuré (voir plus bas)
    'création de la liste des assuré
      Set f = Sheets("liste")
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("G2:G" & f.[G600].End(xlUp).Row)   ' on explore la colonne de niveau 1
        MonDico(c.Value) = ""                                    ' on ajoute l'élément de la famille au dictionnaire
      Next c
      Me.ListBox1.List = MonDico.keys
    end sub
    Private Sub ListBox1_Click()
    'création de la liste des polices en fonction du choix de l'assuré
      Me.ListBox2.Clear
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("G2:G" & f.[G600].End(xlUp).Row)      ' on explore la colonne de niveau 1
         If c = Me.ListBox1 Then MonDico(c.Offset(, 1).Value) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
      Next c
      Me.ListBox2.List = MonDico.keys
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Par défaut
    Bonjour,

    Merci pour ta réponse !
    J'ai essayé ce que tu as dit, et j'ai adapté le code à mon cas, mais à l’exécution j'ai un message d'erreur qui dit : Erreur d’exécution '70' : permission refusée
    Je ne vois pas trop quoi faire du coup ...
    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
     
    Private Sub UserForm_Initialize()
    'initialisation des listes, sauf pour celle des polices qui se fait dynamiquement en fonction du choix de l'assuré (voir plus bas)
    'création de la liste des assuré
      Set f = Sheets("PARC")
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("A2:A" & f.[A600].End(xlUp).Row)   ' on explore la colonne de niveau 1
        MonDico(c.Value) = ""                                    ' on ajoute l'élément de la famille au dictionnaire
      Next c
      Me.ComboBox1.List = MonDico.keys
    End Sub
    Private Sub ListBox1_Click()
    'création de la liste des polices en fonction du choix de l'assuré
      Me.ComboBox2.Clear
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("A2:A" & f.[A600].End(xlUp).Row)      ' on explore la colonne de niveau 1
         If c = Me.ComboBox1 Then MonDico(c.Offset(, 1).Value) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
        End If
      Next c
      Me.ComboBox2.List = MonDico.keys
    End Sub

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    déjà conformément aux règles du forum !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par BarBi-69 Voir le message

    Merci pour ta réponse !
    J'ai essayé ce que tu as dit, et j'ai adapté le code à mon cas, mais à l’exécution j'ai un message d'erreur qui dit : Erreur d’exécution '70' : permission refusée
    Je ne vois pas trop quoi faire du coup ...
    Voici mon code :
    Sur quel ligne l'erreur?
    Si tu travaille avec des combobox trouves-tu normal cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub ListBox1_Click()

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Par défaut
    Oui effectivement c'est pas normal, j'ai changé et ça ne change rien, même message ...
    Bizarrement, le débogage indique l'erreur sur un autre UserForm (ligne 17 ici). Mais quand j'enlève le code que vous m'aviez conseillé, l'autre UserForm marche correctement.

    Mon travail s'appui sur plusieurs UsersForms, une UF0 qui est en quelque sorte une page de garde qui donne accès à d'autres UserForms (UF1, UF2, UF3, UF4), et la problématique des ComboBox inter corrélées se trouve dans la UF1. Sans le code que vous m'avez montré, tous mes UF s'ouvraient comme prévu, mais avec le code que vous m'avez montré, l'UF0 s'ouvre, et donne accès aux UF2, UF3 et UF4, mais lorsque je clique sur le bouton de l'UF1, le fameux message Erreur '70' apparaît.


    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
     
    Private Sub UserForm_Click()
        UF0_Accueil.Show
    End Sub
     
    Private Sub UserForm_Activate()
        With Me
            .StartUpPosition = 3
            .Width = Application.Width
            .Height = Application.Height
            .Left = 0
            .Top = 0
        End With
    End Sub
     
    Private Sub CommandButton1_Click()
        UF1_IndModel.Show
    End Sub
     
    Private Sub CommandButton2_Click()
        UF2_IndMois.Show
    End Sub
     
    Private Sub CommandButton3_Click()
        UF3_IndAnnée.Show
    End Sub
    Private Sub CommandButton4_Click()
        Application.Quit
    End Sub
     
    Private Sub CommandButton5_Click()
        Unload UF0_Accueil
        UF4_ValBDD.Show
    End Sub

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Malheureusement je ne suis pas spécialiste, moi je n'ai qu'un seul Userform avec mes listbox et il fonctionne très bien.
    Je ne saurais pas t'en dire plus.

    Tu peux peut être essayé le code sur un nouveau classeur avec seulement un Userform et deux combobox pour voir si le code fonctionne dans ce cas.

Discussions similaires

  1. Combobox conditionnelle.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2007, 15h13
  2. VBA Combobox textbox
    Par vibalistic dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/11/2007, 14h20
  3. [vba] - Combobox + Filtre Auto + Sans Doublons
    Par RegiO dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/04/2007, 09h43
  4. [Excel] Valeur ComboBox conditionnelle
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/11/2006, 17h37
  5. Sécurité et VBA - Affichage conditionnel de contrôles
    Par Thomas JOUANNOT dans le forum Sécurité
    Réponses: 5
    Dernier message: 23/11/2005, 17h13

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