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 :

Remplir une combobox selon la selection d'une autre [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut Remplir une combobox selon la selection d'une autre
    bonjour à tous,

    Voilà je crois que le titre est assez explicite

    j'ai deux colonnes dans ma feuille Excel qui alimente chacune une Combobox (par RowSource() )
    ce que je souhaiterais c'est quand je clic sur banane dans la première combobox, je voudrais que dans l'autre combobox la couleur jaune se mettre automatiquement

    Nom : Colonne_fruits.JPG
Affichages : 4178
Taille : 19,9 Ko

    j'ai fait se code mais il me sort une erreur objet requis. et R.offset(0,1) par exemple 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
     
    Private Sub ComboBox1_Change()
    Dim R
     
        If (Not IsEmpty(ComboBox1.Value)) Then
            For Each R In Sheets("Fruits").Range("B6:B19").Value
                If R = ComboBox1.Value Then
                    ComboBox2.Value = R
                End If
            Next R
        End If
    End Sub
    merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    je souhaiterais c'est quand je clic sur banane dans la première combobox, je voudrais que dans l'autre combobox la couleur jaune se mettre automatiquement
    Je ne comprends pas l'intérêt de ne placer qu'une seule valeur dans un contrôle ComboBox. Il serait préférable d'utiliser un TextBox.
    Pourquoi utiliser la propriété Value du ComboBox et pas ListIndex

    Je crois que la lecture de ce tutoriel te sera utile Utiliser les contrôles dans un UserForm, en VBA Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Voilà je crois que le titre est assez explicite
    pas vraiment et je rejoins Philippe!

    j'ai deux colonnes dans ma feuille Excel qui alimente chacune une Combobox (par RowSource() )
    Deux colonnes qui alimente un seul combo?

    ce que je souhaiterais c'est quand je clic sur banane dans la première combobox, je voudrais que dans l'autre combobox la couleur jaune se mettre automatiquement
    Il y a deux combo? Tu veux que le deuxième combo affiche jaune pour banane et comme savoir qu'une banane est jaune car tu le dis dans ton tableau excel?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    du même avis que mes amis contributeurs

    cependant, si l'on reste dans ton cadre :

    - deux combobox dont la liste des valeurs dépend de deux colonnes Excel
    - seule le changement du combobox FRUIT génère une modification du combobox COULEUR (et strictement ce comportement)


    dans la mesure où tu es sur une version Excel 2010, plutôt que de jouer sur RowSource, tu peux transformer ce tableau en tableau structuré (menu Insertion >> Tableau)
    après avoir crée ce tableau, crée un userform vierge avec deux combobox :

    - Combobox_FRUIT
    - Combobox_COULEUR


    voici la procédure à l'initialisation du formulaire, qui va simplement aspirer chacune des deux colonnes de données pour les placer dans tes combobox
    et la procédure au changement de fruit .... où on va tout simplement appliquer le même index d'élément dans les deux combobox

    J'ai nommé le tableau structuré "PRIMEUR", en panne d'idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ComboBox_FRUIT_Change()
        With Me
            .ComboBox_COULEUR.ListIndex = .ComboBox_FRUIT.ListIndex
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        With Feuil1.ListObjects("PRIMEUR")
            Me.ComboBox_COULEUR.List = .ListColumns("COULEUR").DataBodyRange.Value
            Me.ComboBox_FRUIT.List = .ListColumns("FRUIT").DataBodyRange.Value
        End With
    End Sub
    Il est très facile à lire ce code, on utilise le nom des colonnes plutôt que des numéros de colonnes

    Je reste d'avis :

    - d'utiliser un TextBox pour les couleurs
    OU MIEUX ENCORE
    - d'utiliser un contrôle ListBox à deux colonnes .... ainsi t'as tout tes fruits et te couleurs en même temps, et si tu dois utiliser des éléments sélectionné t'as déjà TOUT ce qu'il faut chargé dans ListBox

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut Liste en cascade
    Bonjour,
    Voici un exemple de liste en cascade en utilisant la fonction Split

    Scénario
    Nous avons une liste de données sur deux colonnes avec comme première colonne les éléments à lister dans un contrôle ComboBox nommé cboActivity et la deuxième colonne contenant les éléments à lister dans un contrôle ListBox nommé lstSubActivity dès que l'on sélectionne un élément dans le ComboBox. Les données de la deuxième colonne sont séparées par un ";"
    (Voir illustration ci-dessous).

    Nom : ComboBox ListBox Cascade.png
Affichages : 4837
Taille : 21,9 Ko

    Déclaration des variables en tête du module du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Dim rng As Range, rngData As Range
    Les procédures
    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
    Private Sub UserForm_Initialize()
     InitVariable        ' Initialisation des variables
     With Me.cboActivity
     .RowSource = rngData.Address(external:=True)
     .ColumnHeads = True
     End With
    End Sub
     
    Private Sub cboActivity_Click()
     SelectSecondList Me.cboActivity.ListIndex + 1
    End Sub
     
    Private Sub InitVariable()
     Set rng = shtParam.Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count - 1)
     End With
    End Sub
     
    Private Sub SelectSecondList(IndexNumber As Integer)
     ' Alimente le contrôle ListBox après sélection dans le ComboBox
     Dim Tabl() As String
     Tabl = Split(rngData.Cells(IndexNumber, 2), ";")
     lstSubActivity.List = Tabl
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    déjà merci à tous pour vos réponses.

    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Voilà je crois que le titre est assez explicite
    pas vraiment et je rejoins Philippe!
    je ne vois pas ou il ne lés pas ! Remplir une combobox selon la sélection d'une autre

    j'ai deux colonnes dans ma feuille Excel qui alimente chacune une Combobox (par RowSource() )
    Deux colonnes qui alimente un seul combo?
    Non ! j'ai deux colonnes dans ma feuille Excel qui alimente chacune une Combobox (par RowSource() )

    ce que je souhaiterais c'est quand je clic sur banane dans la première combobox, je voudrais que dans l'autre combobox la couleur jaune se mettre automatiquement
    Il y a deux combo? Tu veux que le deuxième combo affiche jaune pour banane et comme savoir qu'une banane est jaune car tu le dis dans ton tableau excel?
    oui il y à 2 combo ! bon là euh...... ont n'est pas sur un forum de vitamine sur les bananes se sont des données à titre d'exemple


    Philippe Tulliez
    joe.levrai


    Oui vous avez tout les deux raison l'utilisation d'un textbox et plus que recommander ici (ce que j'ai fais)

    Philippe Tulliez

    merci pour le code


    pour info voici le code que j'ai mis avec la textbox

    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
     
    Sub ComboBox1_Change()
    Dim R As Range
     
        If (Not IsEmpty(ComboBox1.Value)) Then
            For Each R In Sheets("Fruits").Range("B6:B19")
                If R.Offset(0, 1) = ComboBox1.Value Then
                    TextBox116.Value = R
                    Exit For
                Else
                    TextBox116.Value = ""
                End If
            Next R
        End If
     
    End Sub

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Une boucle n'est vraiment pas nécessaire, tout comme la recherche depuis ta plage source

    pourquoi pas un ListBox à deux colonnes ?
    pourquoi ne pas tester le tableau structuré ?
    pourquoi ne pas utiliser la puissance de INDEX et/ou EQUIV pour trouver ton élément COULEUR puisque tu es sûr que ton FRUIT existe dans la matrice ?

  8. #8
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    merci pour toute ses pistes

    pourquoi pas un ListBox à deux colonnes ?
    car esthétiquement dans mon userform une combo et un textbox je peux les placé comme veux

    pourquoi ne pas tester le tableau structuré ?
    Très bonne idée je regarder ça

    pourquoi ne pas utiliser la puissance de INDEX et/ou EQUIV pour trouver ton élément COULEUR puisque tu es sûr que ton FRUIT existe dans la matrice ?
    car je voulais en VBA et je trouve pas que mon code et si lourd que ça ?

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Ah !

    si c'est un aspect esthétique qui te bloque sur un ListBox 2 colonnes, ceci peut-être ?

    - un ListBox à deux colonnes MAIS avec uniquement la colonne FRUIT visible

    - Quand tu cliques sur un élément ==> la valeur de la seconde colonne (qui est masquée) est affectée au .Text de ta TextBox

    ainsi, tu charges UNE SEULE FOIS ta listbox et tu n'as plus besoin de retourner sur la feuille Excel (sauf si tu dois à un moment donné rafraichir tes éléments)

    Pourquoi je tiens tant à ListBox ? Parce que contrairement à une Combobox :

    1) Nativement on ne peut pas écrire une valeur qui n'existe pas (on est obligé de changer une option/paramètre au Combobox pour bloquer ça)
    2) Pas besoin de cliquer pour dérouler le menu de tous les fruits, ils sont tous visibles dans ListBox sans devoir cliquer (éventuellement scroller si la liste est longue)


    Ce qui donnerait, en reprenant notre tableau structuré PRIMEUR, un ListBox (ListBox_PRIMEUR) et un TextBox (TextBox_COULEUR)
    Deux procédures réduites à leur plus simple expression !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ListBox_PRIMEUR_Click()
        ' TextBox prend la valeur de la seconde colonne de la ligne cliquée
        With Me
            .TextBox_COULEUR.Text = .ListBox_PRIMEUR.List(.ListBox_PRIMEUR.ListIndex, 1)
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        With Me.ListBox_PRIMEUR
            .List = Feuil1.ListObjects("PRIMEUR").DataBodyRange.Value ' on aspire tout
            .ColumnWidths = "80;0" ' la colonne COULEUR sera invisible
        End With
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir Joe,
    C'est exactement a cela que je pensais !

    Mais vue que notre ami aborde mes questions avec sarcasme... Il n'a pas besoin de mon aide!

    bon là euh...... ont n'est pas sur un forum de vitamine sur les bananes se sont des données à titre d'exemple
    J'avais for bien compris. Mais ridicule d'attribuer une couleur a quoique ce sois par macro sens voire l'information qui lie les données; même sur un forum de bananes.
    Dernière modification par Invité ; 02/04/2017 à 23h46.

  11. #11
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir Joe,
    C'est exactement a cela que je pensais !

    Mais vue que notre ami aborde mes questions avec sarcasme... Il n'a pas besoin de mon aide!


    bon là euh...... ont n'est pas sur un forum de vitamine sur les bananes se sont des données à titre d'exemple

    J'avais for bien compris. Mais ridicule d'attribuer une couleur a quoique ce sois par macro sens voire l'information qui lie les données; même sur un forum de bananes.
    Non ne voie pas de sarcasme la dedans, dans les consignes du forum il et noté aucune donnée confidentielle, de votre entreprise ou d’un tiers.
    j'ai donc modifié les données en fruits et couleurs mais si javais su que cela poserais temps de problème j'aurais mis......... je sais pas des cailloux
    sache également que je respect les programmeurs de tout poil, et en se moment surtout ce qui maitrise le VBA



    joe.levrai merci je vais regarder ça.

  12. #12
    Invité
    Invité(e)
    Par défaut
    En fait la qualité des données n'importe peut des fruits des cailloux hiboux genoux!

    Ce qui compte c'est quelles soient fidèles au raisonnement!

    Ce que tu n'as pas dis c'est si le tableau est une source pour lie les le données entre les colonnes ou si elles sont la cible et là la difficulté étant de définir le lien qui de prime abord n'existe pas.

    Ça nous ramène au problème Séculaire de l'oeuf et la poule.

    Ca si je reprend l'exemple des bananes vert s'applique tout autant.

    Seul les math ne sont pas subjectif!

    Je ne m'offusque jamais si j'estime qu'on ce fiche de moi je passe et c'est tout!
    Dernière modification par Invité ; 04/04/2017 à 08h09.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/05/2013, 00h07
  2. [XL-2007] Répéter une macro selon la valeur d'une ComboBox
    Par Jeromeric dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/12/2011, 13h02
  3. [XL-2007] Filtrer une ListBox selon la valeur d'une ComboBox
    Par Jeromeric dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/11/2011, 23h38
  4. Réponses: 4
    Dernier message: 27/06/2011, 16h41

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