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 si certaine valeur dans une autre combobox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 6
    Par défaut VBA Combobox si certaine valeur dans une autre combobox
    Bonjour,

    J'ai un Userform avec 2 combobox

    La première prend sa source sur des cases de mon Excel et ça fonctionne,

    Mais je n'arrive pas à faire que la combobox n°2 ai certaines cases de mon excel si j'ai une certaine valeur choisi dans la Combobox n°1

    Comment dois-je faire?

    Merci beaucoup

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour theou,

    Je te conseillerai de créer un tableau avec en ligne d'en-tête les noms qui te permettent d'alimenter ta ComboBox1
    Et dans chacune des colonnes, les valeurs composant la Liste que prendra la ComboBox2 (en fonction du nom de l'en-tête)

    Procédure :
    1) Créer ta Liste Déroulante de la ComboBox1 avec la ligne d'en-tête du tableau (.HeaderRowRange)
    2) ComboBox1_Change() -> Utiliser la méthode .Find pour récupérer le numéro de la colonne associé à la valeur choisie en ComboBox1
    3) Alimenter la ComboBox2 en utilisant ce-dit numéro de colonne pour définir sur quelle colonne devra être effectué le remplissage. (.ListColumns(numCol).DataBodyRange.SpecialCells(xlCellTypeConstants) - ne sélectionnera que les cellules non-vides)

    Exemple :

    Peugeot Renault Toyota
    3008 Mégane Prius
    2008 Clio Yaris
    305 Scénic

  3. #3
    Membre confirmé Avatar de ippo_master
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut
    Bonjour,

    Il te faudra coder via l'évènement "On_change" de la combobox1, les modalités de remplissage de la combobox2
    Si valeur A dans combobox1, alors AA et AB dans combobox2

  4. #4
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 6
    Par défaut
    Merci révèr, as tu un exemple de code à insérer dans UserForm_Initialize

    et dans les change des combobox pour ton exemple?

    Merci à toi

  5. #5
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 6
    Par défaut
    Voici ce que j'ai qui ne fonctionne pas :

    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
    Private Sub UserForm_Initialize()
     
        Me.ComboBox1.RowSource = "BDD!B2:B4"
     
    End Sub
    ' ici ça fonctionne
     
    Private Sub ComboBox1_Change()
     
        Me.ComboBox2.Clear
        If ComboBox1.Text = "BDD!B2" Then
     
            Me.ComboBox2.RowSource = "Feuil1!D5:D500"
     
        End If
    End Sub
    'et ça non :/

  6. #6
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    CBTest te permet d'éviter de générer un ComboBox1_Change() dû au "CBTest.Value = ..."
    Je tiens à préciser que je n'alimente pas ma ComboBox initiale avec le HeaderRowRange, puisque je commence directement avec un .Find, la donnée étant figée dès l'ouverture du UserForm. Dans ton cas, l'initialisation se fera à travers un choix.

    Ainsi mon ComboBox1_Change() correspond à ce que j'ai dans mon code. Le ComboBox1_Init() est complètement inventé pour toi. J'espère que tu comprends son fonctionnement.

    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
     
    Private Sub ComboBox1_Init()
    Dim i As Integer
     
    For i = 1 to t.HeaderRowRange.Columns.Count
        CBTest.Value = t.HeaderRowRange.Columns(i).Value
        If CBTest.ListIndex = -1 Then
             CBTest.AddItem t.HeaderRowRange.Columns(i).Value
        End If
    Next i
    ComboBox1.List = CBTest.List
    CBTest.Clear
    End Sub
    Private Sub ComboBox1_Change()
        Dim LF As Range, Cible As Range
     
        Set WbO = WbT.Sheets(3)
        Set t = WbO.ListObjects("t_bic")
        Set LF = t.HeaderRowRange.Find(ComboBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
     
        For Each Cible In t.ListColumns(LF.Column).DataBodyRange.SpecialCells(xlCellTypeConstants)
              If ComboBox2.ListIndex = -1 Then
                    ComboBox2.AddItem Cible.Value
              End If
        Next Cible
    End Sub

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à tous,

    Dan un premier temps,
    Construite une base avec en colonne 1 les marques et en colonne 2 les modèles

    Exemple

    Toyota prius
    Toyota Yarus
    Peugeot 208
    Peugeot 508
    Peugeot 3008
    etc..

    Dans un second temps,
    Alimenter la Combobox 1 sans doublon
    Utiliser l'évènement Change de cette dernière pour alimenter les items de la Combobox 2

    2 liens à consulter
    Combobox sans doublon Beaucoup d'autres exemples sur le Forum
    Combobox en cascade
    ou
    Combobox en cascade

  8. #8
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 6
    Par défaut
    Nikel merci révèr,

    J'ai compris et ça fonctionne,

    Merci

  9. #9
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour theou et Marcel,

    Theou : Ravi que cela fonctionne !

    Marcel : Pour être franc, et je ne sais pas si c'est le plus optimal... mais je préfère avoir les marques en en-tête et les modèles en colonne. Je trouve ça plus agréable visuellement, que d'avoir des centaines de répétitions de la même "marque" dans notre exemple.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 06/08/2008, 14h36
  2. {VBA Excel} Colorier des cases selon la valeur dans une autre
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2008, 09h56
  3. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  4. Modifier une valeur dans une autre table en VBA
    Par baila dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/12/2007, 19h45
  5. [VBA] Somme de certaines valeurs d'une colonne dans une requete
    Par petitelalou dans le forum VBA Access
    Réponses: 7
    Dernier message: 01/08/2007, 00h18

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