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 :

Faire interagir 2 combobox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut Faire interagir 2 combobox
    Bonjour à tous,

    Je débute sous VBA et malgré des recherches sur internet, je n'ai pas trouvé de solutions à mon problème, je me tourne donc vers vous.

    Sous excel2007 - VBA 6.3

    J'ai crée une Userform avec différente combobox (liste déroulante) à l'intérieur.
    Je cherche à faire: (je vais essayer d'être clair)

    En fonction du choix sélectionné dans la CBbox1 (a,b,c,d....), je veux qu'apparaisse dans la CBbox2 une liste déroulante (1,2,3,4....) issue d'une plage de cellule donnée. (Une plage par lettre (a,b,c...)
    (En somme définir le RowSource de la CBbox2 en fonction de ce qui est affiché dans la 1)

    Je n'ai pas trop d'idée quand au code à utiliser, j'ai tenter avec If-then mais c'est resté infructueux.

    Merci d'avance pour votre aide!

    Aurel

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bjr, aurel.89
    une piste dans la FAQ:http://excel.developpez.com/faq/?pag...omboboxCascade
    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Ah merci, je n'avais pas encore découvert la FAQ

    Par contre, mon problème n'est pas résolu, la solution est là mais mon VBA ne reconnait pas la fonction "Alim_Combo".

    Pourtant cela fonctionne sous le fichier type livré avec la FAQ.

    Si quelqu'un a une idée merci =)

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    re,
    sans être sarcastique peux-être que l'on aurait plus d'idée si tu m'étais le code et un peu plus d'explication sur les données dans quelles colonnes, dans quelles feuilles etc...

    une discussion avec un probleme comme le tien :
    http://www.developpez.net/forums/d86...eroulante-vba/

    ou encore: http://www.developpez.net/forums/d86...emplir-combox/
    @+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Complément d'info:

    J'ai créer une userform pour contenir mes combobox et des boutons précédents, suivant.

    L'objectif est de découper un mur couche par couche.

    J'ai 7 CBbox les unes en dessous des autres pour choisir les différentes couches, et avec la même liste de matériaux.

    CBbox1: on choisi un matériaux (laine de verre, laine de roche...).
    La liste des matériaux se situe en Feuil4 (Bibliothèque) à partir de B4.

    (Pour l'instant, pour intégrer la liste dans les Cbbox, j'ai nommé la plage B4:B500 "matériaux", => puis intégrer dans les propriétés de chaque CBbox sur la ligne RowSource. Ce que je pense ne doit pas être la bonne méthode.)

    En face de chaque CBbox j'en ai une autre, pour l'instant vide.

    Mon objectif:
    CBbox 1, je selectionne "laine de roche" => la CBbox en face, choix possible: "Panneau", "Rouleau" (sous forme d'une plage quelque part feuil4)

    CBbox 2, je sélectionne "Marque X" => la CBbox en face, la gamme du constructeur en choix possible: "produit 1", "produit 2"... (sous forme d'une plage quelque part feuil4)

    J'espère être assez clair, merci de l'attention que tu portes à mon souci =).

    Je continue de regarder sur les liens que tu as posté.

    ++

  6. #6
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    J'ai eu affaire à ce genre de problème, mais suis moi aussi débutant

    Je dirai à première vue qu'il faudrait que tu définisses toutes les listes possibles (si elles ne sont pas trop nombreuses) en RANGE.

    Tu pourra ensuite faire référence à ces RANGE en ajoutant des conditions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If ComboBox1.Value = X Then
    ComboBox2.RowSource = Range_A
    Etc.

  7. #7
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Re,
    voici un exemple qui utilise la methode AddItem plutot que rowsource et remplie Quatre combo en fonction du choix de la précédente.
    Vois comment tu peux l'adapter à tes besoins
    Fichiers attachés Fichiers attachés

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Me revoilà,

    Alors j'ai adapté le code que ton exemple, (du mieux que j'ai su), et çà me donne ça:
    Juste, j'avais pas précisé, sur ma feuil1 "Accueil" j'ai 2 boutons, chacun permet d'ouvrir une userform différente. Pour l'instant je ne m'occupe que du bouton 1 pour la user1

    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
     
    Private Sub ComboBox1_Change()
    Dim vmateriaux As Range
     
    Me.ComboBox9.Clear
    With Sheets("Bibliothèque")
    Set vmateriaux = .Columns(3).Find(Me.ComboBox1.Value)
     
    If Not vmateriaux Is Nothing Then
    For i = vmateriaux.Row To .Range("C65536").End(xlUp).Row
      If .Range("B" & i) = Me.ComboBox1.Value Or .Range("B" & i) = "" Then
        If .Range("C" & i) <> "" Then
        Me.ComboBox2.AddItem (.Range("C" & i).Value)
        End If
      Else
       Exit Sub
      End If
    Next i
    End If
    End With
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Dim i As Long, derlign As Long
     
    With Sheets("Bibliothèque")
    derlign = .Range("B65536").End(xlUp).Row
     
     
     For i = 1 To derlign
      If .Range("B" & i) <> "" Then
      Me.ComboBox1.AddItem (.Range("B" & i).Value)
      End If
     Next i
    End With
     
    End Sub
    Le problème: ce code bug quand je clique sur le bouton 1 de la page accueil, la userform ne s'ouvre pas. Ca viendrai de mon module qui contient la commande macro du bouton 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub MurOB()
     
    UserForm1.Show
     
    End Sub
    ("MurOB" nom de la macro affecter au bouton 1)

    Je n'arrive pas à faire fonctionner les 2 en même temps, si vous pouvez m'aider.

    Merci d'avance =)

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Le mieux serait de nous faire un petit fichier afin que l'on puisse comprendre comment sont organisé tes données, c'est très important ici, car en fonction de cette organisation, le vba n'est peut être pas requis.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Alors ci-joint une partie de mon document (2007), avec la userform, les combobox, le code est vierge.

    Mon objectif,
    première colonne de comboBox(1 à 8) => colonne B de la bibliothèque (identique pour chacune)

    Deuxième colonne combobox(9 à 16)=> colonne C de la biblio

    CBbx9 en fonction de la CBbox1 etc....

    Si ça vous aide à mieux comprendre mon problème =)

    ++

  11. #11
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Re,
    Dans le code de la Feuille 4 il y a un début de macro qui sert à rien, Supprime le car c lui qui bloque le code.
    ensuite pour remplir les 8 premières combobox avec le contenu de la colonne B remplace ton userform_initialize par celui ci :
    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
    Private Sub UserForm_Initialize()
    Dim i As Long, derlign As Long
    Dim Ctrl As Variant
    With Sheets("Bibliothèque")
    derlign = .Range("B65536").End(xlUp).Row
     
    For Each Ctrl In Array(ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5, ComboBox6, ComboBox7, ComboBox8)
      For i = 3 To derlign
         If .Range("B" & i) <> "" Then
          Ctrl.Object.AddItem (.Range("B" & i).Value)
         End If
       Next i
    Next Ctrl
    End With
    End Sub
    Les 8 combos auront le même contenu.
    Pour le code combobox1_change deux remarques:
    1) tu recherches la valeur de la combo 1 dans la colonne C ou dans le code Columns (3) or c'est en colonne B que se trouve la donnée recherchée,donc Remplace Columns (3) par Columns (2).

    2) tu veux en fonction du choix de la combo1 remplir la combo 9 donc ici remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox2.AddItem (.Range("C" & i).Value)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox9.AddItem (.Range("C" & i).Value)
    A+

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    C'est génial! Pour l'instant ça fonctionne.

    Merci beaucoup!

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Hum, j'ai encore un question^^

    Je n'arrive pas (malgré la Faq de SilkyRoad) à intégré le code pour supprimer les doublons. Un coup la ComboBox est interminable avec des lignes vides, un coup ça saute des lignes sans supprimer les doublons. Et en plus je n'arrive pas à le généraliser pour mes 8 Combo.

    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()
     
    Dim i As Long, derlign As Long
    Dim Ctrl As Variant
    Dim Cell As Range
    With Sheets("Bibliothèque")
    derlign = .Range("B65536").End(xlUp).Row
     
    For Each Ctrl In Array(ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5, ComboBox6, ComboBox7, ComboBox8)
      For i = 3 To derlign
         If .Range("B" & i) <> "" Then
          Ctrl.Object.AddItem (.Range("B" & i).Value)
         End If
     
       Next i
    Next Ctrl
    End With
    End Sub
    Ca c'est mon code, et ensuite le code proposer par Silkyroad pour supprimer les doublons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Cell As Range
     
    'Supprime les données existantes dans le ComboBox
    Feuil1.ComboBox1.Clear
     
    'Boucle sur les cellules de la plage A1:A20 pour
    'alimenter le ComboBox
    For Each Cell In Feuil1.Range("A1:A20")
        Feuil1.ComboBox1 = Cell
        'remplissage sans doublon
        If Feuil1.ComboBox1.ListIndex = -1 Then _
            Feuil1.ComboBox1.AddItem Cell
    Next Cell
    Si quelqu'un a une idée, merci d'avance. =)

    ++

  14. #14
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Slt, j'ai essayer d'adapter le code pour enlever les doublons et remplir en même temps le 8 combo ça à l'air de fonctionner. Voici le 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()
    Dim i As Long
    Dim Ctrl As Variant
     
    With Sheets("Bibliothèque")
      For Each Ctrl In Array(ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5, ComboBox6, ComboBox7, ComboBox8)
       Ctrl.Object.Clear
     
      For i = 3 To .Range("B65536").End(xlUp).Row
        If .Range("B" & i) <> "" Then
          Ctrl.Object = .Range("B" & i)
          If Ctrl.Object.ListIndex = -1 Then Ctrl.Object.AddItem .Range("B" & i)
        End If
      Next i
     
    Ctrl.Object.ListIndex = -1
    Next Ctrl
     
    End With
     
    End Sub
    @+

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Ca fonctionne, un grand grand merci!

    Je classe mes post en résolu dès que j'ai trouvé comment faire

    Bonne journée ++

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

Discussions similaires

  1. [XL-2007] USF faire interagir des combobox
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/07/2015, 10h55
  2. Réponses: 4
    Dernier message: 28/07/2006, 13h10
  3. [C# 2.0]Faire interagir des user controls
    Par cmoiscrat dans le forum Windows Forms
    Réponses: 10
    Dernier message: 28/06/2006, 10h30
  4. Faire interagir 2 menus déroulants...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2006, 14h38
  5. faire communiquer une combobox et textbox
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/12/2005, 10h20

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