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 :

Combobox variant selon la selection dans une autre combobox.


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Points : 72
    Points
    72
    Par défaut Combobox variant selon la selection dans une autre combobox.
    Bonjour,
    J'ai un peyit problème...en fait ce que je souhaite c'est selon la valeur choisie dans la combobox-domaine, la combobox_metier selectionne les valeurs de la feuille domaine correspondante sans doublons.
    Voici le code.
    Merci de votre aide.


    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 Combobox_Domaine.click()
     
     
    If Combobox_Domaine = "Mécanique" Then
    Worksheets("mécanique").Select
    'Supprime les données existantes dans le ComboBox
        Me.ComboBox_metier.Clear
     
     
        'alimenter le ComboBox
        For Each Cell In Worksheets("mécanique").Range("A2:A50,C2:C50,E2:E50,G2:G50")
            Me.ComboBox_metier = Cell
            'remplissage sans doublon
            If Me.ComboBox_metier.ListIndex = -1 Then _
                Me.ComboBox_metier.AddItem Cell
        Next Cell
    End If
     
    If Combobox_Domaine = "Comptabilité" Then
    Worksheets("Comptabilité").Select
    'Supprime les données existantes dans le ComboBox
        Me.ComboBox_metier.Clear
     
     
        'alimenter le ComboBox
        For Each Cell In Worksheets("Comptabilité").Range("A2:A50,C2:C50,E2:E50,G2:G50")
            Me.ComboBox_metier = Cell
            'remplissage sans doublon
            If Me.ComboBox_metier.ListIndex = -1 Then _
                Me.ComboBox_metier.AddItem Cell
        Next Cell
    End If
     
    End Sub

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Combobox_Domaine_Change()
    Dim CbVal As String, Cell As Range
     
    CbVal = Combobox_Domaine.Value
     
    Me.ComboBox_metier.Clear
     
    For Each Cell In Worksheets(CbVal).Range("A2:A50,C2:C50,E2:E50,G2:G50")
        Me.ComboBox_metier = Cell
        'remplissage sans doublon
        If Me.ComboBox_metier.ListIndex = -1 Then Me.ComboBox_metier.AddItem Cell
    Next Cell
     
    End Sub
    Je pense que l'évènement click fonctionne également mais tu dois l'écrire avec un underscore(_) et pas un point(.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Combobox_Domaine_Click()

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Points : 72
    Points
    72
    Par défaut
    Le problème de doublons etait résolu mais pour l'autre question je sais pas trop comment m'y prendre. Si qqun a une idée...lol.
    Merci

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Peux-tu préciser ta demande ? Qu'est-ce qui, lors de la sélection dans un combo, précise les données à placer dans le second ? Bref où prends-tu tes données pour le second combo ?
    A+

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Re

    Si j'ai bien tout comprendu, le Combo2 va cherchée les données soit dans la feuille "mecanique", soit dans la feuille "compta" selon la sélection du Combo1.

    mais pour l'autre question je sais pas trop comment m'y prendre. Si qqun a une idée...lol.
    euuh...ca serait déjà bien de savoir si tu as essayé l'idée de modif du code original que j'ai proposée.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Points : 72
    Points
    72
    Par défaut
    En fait le code marche si je mets une plage de données de "A2:A5" mais en mettant la plage de données suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("mécanique").Range("A2:A50,C2:C50,E2:E50,G2:G50")
    Il y a un message d'erreur, en fait ce que je souhaiterais c est que si la combobox_domaine est égale à Mécanique alors on va sur la feuille mécanique et dans la combobox_metier on mets l'ensemble des metiers qui sont dans les colonnes A C E G en supprimant 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub Combobox_Domaine_click()
     
     
    If Combobox_Domaine = "Mécanique" Then
    Worksheets("mécanique").Select
    'Supprime les données existantes dans le ComboBox
        Me.ComboBox_metier.Clear
     
     
        'alimenter le ComboBox
        For Each Cell In Worksheets("mécanique").Range("A2:A50,C2:C50,E2:E50,G2:G50")
            Me.ComboBox_metier = Cell
            'remplissage sans doublon
            If Me.ComboBox_metier.ListIndex = -1 Then _
                Me.ComboBox_metier.AddItem Cell
        Next Cell
    End If
     
    If Combobox_Domaine = "Comptabilité" Then
    Worksheets("Comptabilité").Select
    'Supprime les données existantes dans le ComboBox
        Me.ComboBox_metier.Clear
     
     
        'alimenter le ComboBox
        For Each Cell In Worksheets("Comptabilité").Range("A2:A50,C2:C50,E2:E50,G2:G50")
            Me.ComboBox_metier = Cell
            'remplissage sans doublon
            If Me.ComboBox_metier.ListIndex = -1 Then _
                Me.ComboBox_metier.AddItem Cell
        Next Cell
    End If
     
    End Sub
    Merci

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    En effet, tu ne peux pas renseigner un combo de 4 colonnes avec Additem
    Ce que tu peux faire est simplement un tableau() de tes données et renseigner ton combo avec List
    On fait ça en deux temps : On renseigne une colonne du combo avec les données de la colonne A (la colonne dont il faut supprimer les doublons) et on crée un tableau(NoLigne, NoCol) qui servira à renseigner toutes les colonnes du combo..
    Ceci fini, on vide le combo et on affecte à Combo.list() = tableau(,)
    Pour le principe...
    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
    Sub Init()
    Dim Tableau() As Variant, plage As Range
    Dim DerLig As Long, DerCol As Integer
    Dim NoLig As Long, NoCol As Integer
        'On fixe le nombre de colonne à la dernière colonne de la plage
        ComboBox1.ColumnCount = 7
        ComboBox1.BoundColumn = 1 'on fixe la première colonne pour identifier les doublons
        ReDim Tableau(50, 7)
        For Each Cell In Worksheets("feuil1").Range("A2:A50,C2:C50,E2:E50,G2:G50")
     
            'Lecture de chaque ligne afin de renseigner la liste sans doublon col. 1
            If Cell.Column = 1 Then
                Me.ComboBox1 = Cells(Cell.Row, 1)
                'Remplissage exempt de doublon
                If Me.ComboBox1.ListIndex = -1 Then
                    Me.ComboBox1.AddItem Cells(Cell.Row, 1)
    'Si la cellule appartient à la colonne 1, si ce n'est pas un doublon...
    '... on enregistre la ligne dans le tableau de la colonne 1 à 7
                    For NoCol = 0 To 6
                        Tableau(NoLig, NoCol) = Cells(Cell.Row, NoCol + 1)
                    Next
                    NoLig = NoLig + 1
                End If
            End If
        Next
        'On vide le combo
        ComboBox1.Clear
        'on le remplit avec le tableau
        ComboBox1.List() = Tableau
        'On masque les colonnes 2, 4 et 6 puisqu'elles ne t'intéressent pas
        ComboBox1.ColumnWidths = "100;0;60;0;50;0;50"
    End Sub
    Ceci est une méthode qu'on peut sans doute améliorer. Il est probable qu'il y en ait une autre... mais avec suppression des doublons, je ne vois pas.
    Tu adaptes les noms et tu testes
    A+

    NB - Inconvénient de la méthode, ton tableau fait 50 lignes.
    Ceci car le premier indice du tableau est le N° de ligne, le second le N° de colonne
    Or, si on peut redimensionner le second indice, on ne peut pas redimensionner le premier. On est donc contraint de dimensionner le premier indice du tableau au nombre de ligne dès le départ... sauf à faire deux boucles au lieu d'une seule... Et là, c'est toi qui vois... mais c'est possible.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Edit
    J'ai pensé à une autre méthode... Je teste
    A+

    Voilà ! En limitant le nombre de lignes à celui des données sans doublon et le nombre de colonnes exact.
    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
    Sub Init2()
    Dim Tableau() As Variant, Tablo() As Variant, plage As Range
    Dim DerLig As Long, DerCol As Integer
    Dim NoLig As Long, NoCol As Integer, j as integer, i as long
        'On fixe le nombre de colonne à la dernière colonne de la plage
        ComboBox1.ColumnCount = 4
        ComboBox1.BoundColumn = 1 'on fixe la première colonne pour identifier les doublons
        ReDim Tableau(50, 7)
        For Each Cell In Worksheets("feuil1").Range("A2:A50,C2:C50,E2:E50,G2:G50")
     
            'Lecture de chaque ligne afin de renseigner la liste sans doublon col. 1
            If Cell.Column = 1 Then
                Me.ComboBox1 = Cells(Cell.Row, 1)
                'Remplissage exempt de doublon
                If Me.ComboBox1.ListIndex = -1 Then
                    Me.ComboBox1.AddItem Cells(Cell.Row, 1)
    'Si la cellule appartient à la colonne 1, si ce n'est pas un doublon...
    '... on enregistre la ligne dans le tableau de la colonne 1 à 7
                    For j = 0 To 6
                        If j = 0 Or j = 2 Or j = 4 Or j = 6 Then
                            Tableau(NoLig, NoCol) = Cells(Cell.Row, j + 1)
                            NoCol = NoCol + 1
                        End If
                    Next
                    NoLig = NoLig + 1
                    NoCol = 0
                End If
            End If
        Next
        'On dimensionne le nombre de ligne au nbre de ligne sans doublon
        ReDim Tablo(NoLig, 3)
        For i = 0 To NoLig - 1
            For j = 0 To 3
                Tablo(i, j) = Tableau(i, j)
            Next
        Next
        'On vide le combo
        ComboBox1.Clear
        'on le remplit avec le tableau
        ComboBox1.List() = Tablo
        'On n'a pas à masquer de colonne... donc...
        ComboBox1.ColumnWidths = "100;60;60;60"
        ComboBox1.ListIndex = -1
    End Sub
    Et là tu n'auras que 4 colonnes et le nombre de lignes exact

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Points : 72
    Points
    72
    Par défaut
    Ok merci pour l'aide, j'ai testé et je l'ai adapté a mes contraintes. Merci pour ton aide.
    Bonne journée

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

Discussions similaires

  1. Alimenter combobox selon selection d'une autre combobox
    Par bacio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/02/2009, 11h33
  2. [Débutant] Select dans une autre db en transact-sql
    Par vilveq dans le forum Développement
    Réponses: 5
    Dernier message: 29/10/2008, 10h58
  3. {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
  4. Réponses: 11
    Dernier message: 10/06/2008, 10h31
  5. Réponses: 3
    Dernier message: 13/06/2006, 16h36

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