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 :

Remplissage de combobox sans doublon


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut Remplissage de combobox sans doublon
    Bonjour tout le monde,

    D'après le cours de Skyroad, il est possible de remplir une combobox avec des données d'une feuille excel avec le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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
    J'ai essayé d'utiliser cette méthode mais je rencontre un problème :

    La combobox se remplit bien mais impossibilité de sélectionner la donnée que je veux dans la combobox. Quelqu'un n'autait-il pas une idée pour y remédier

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    J'ai mis Locked=false et laissé Enabled=True, la combobox se remplit correctement, mais quelque soit le choix que je fais, seule la dernière valeur entrée dans la combobox est validée

  3. #3
    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 543
    Points
    15 543
    Par défaut
    Peux-tu accéder à ton combo et faire défiler les valeurs ? Si oui, change de souris, c'est ton click gauche qui ne va pas
    Sinon, vérifie que ton userform.Locked ne soit pas à true.
    Sinon, ben je ne vois pas...
    Tu n'as pas simplement fait un load sur un autre userform (sans le .show) ?
    Je crois que j'ai fait le tour de ce que je peux supposer

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    ma combobox se remplit bien, ma souris fonctionne correctement, mais je peux choisir n'importe quelle valeur, seule la dernière est sélectionnée

  5. #5
    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 543
    Points
    15 543
    Par défaut
    Qu'as-tu dans Combo_Exit, combo_Change, Combo_Keyup KeyPress, ... ?
    Tu as forcément un truc qui met Combo.list(Combo.listcount -1) ou autre chose...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    j'ai cette procédure dans ComboBox1_Change() :


    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_Change()
     
    If ComboBox1.Value = "Non enterrés" Then
        Nature_sol.Clear
        Nature_sol.Enabled = False
        Nature_sol.Visible = False
        Cells(22, 3) = ""
     
        Worksheets("Feuil2").Cells(4, 2) = 1
    ElseIf ComboBox1.Value = "Enterrés" Then
        Nature_sol.Enabled = True
        Nature_sol.Visible = True
        Cells(22, 3) = "Nature du sol"
     
        If Cable.ListIndex = -1 Then
            Nature_sol.AddItem "Très humide", 0
            Nature_sol.AddItem "Humide", 1
            Nature_sol.AddItem "Normal", 2
            Nature_sol.AddItem "Sec", 3
            Nature_sol.AddItem "Très sec", 4
        End If
     
        Worksheets("Feuil2").Cells(4, 2) = ""
    End If
     
    End Sub

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Shadow5,

    S'agit-il d'un ComboBox créé sur une Userform ou sur la Feuil1 du classeur ?

    Si c'est bien sur la feuille est-ce avec la barre d'outils "Boite à outils contrôles" que vous l'avez créé ?

    Là encore si c'est le cas votre procédure :

    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 ComboBox1_Change()
    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
    End Sub
    Placée dans un module renseigne bien le ComboBox.

    Ensuite la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    mv = Feuil1.ComboBox1.Value
    End Sub
    Après avoir crée un CommandButton sur la feuil1 affecte bien la valeur sélectionnée à la variable donc vous pouvez y mette votre code.

    Mais ai-je bien compris votre problème ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Le combobox que j'ai cherché à faire est sur une feuille excel.

    Sinon, je pense avoir trouvé un code grâce au FAQ de Skyroad, qui est certe beaucoup plus compliqué que celui que j'avais fait,mais qui a l'air de bien fonctionner

    Le code que j'ai pris finalement a grossomodo la même structure que ci dessous :

    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
    45
    46
    47
    Private Sub UserForm_Initialize()
        Dim Cell As Range
        Dim Tableau()
        Dim TempTab As Variant
        Dim i As Integer, j As Integer
        Dim boolVerif As Boolean
     
        ReDim Tableau(1 To 1)
        Tableau(1) = Cells(1, 1)
     
        'Boucle sur les données de la colonne A, dans la Feuil1
        For Each Cell In Worksheets("Feuil1").Range("A1:A" & _
                            Worksheets("Feuil1").Range("A65536").End(xlUp).Row)
            boolVerif = False
     
            'Vérifie si le contenu de la cellule existe déjà dans le tableau
            For i = 1 To UBound(Tableau)
                'Si la donnée existe déjà dans le tableau
                If Tableau(i) = Cell Then
                    boolVerif = True
                    Exit For
                End If
            Next i
     
            'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau
            'et on ajoute la donnée.
            If boolVerif = False Then
                ReDim Preserve Tableau(1 To UBound(Tableau) + 1)
                Tableau(UBound(Tableau)) = Cell
            End If
     
            'Tri le contenu du tableau par ordre croissant.
            For i = 1 To UBound(Tableau)
                For j = 1 To UBound(Tableau)
                    If Tableau(i) < Tableau(j) Then
                        TempTab = Tableau(i)
                        Tableau(i) = Tableau(j)
                        Tableau(j) = TempTab
                    End If
                Next j
            Next i
        Next Cell
     
        'Alimente le ComboBox
        ComboBox1.List = Tableau
     
    End Sub
    Merci tout le monde

    PS : Je dois des excuses à Starec et à Skyroad, mais je l'ai trouvé par hasard il y a moins d'une heure après une demi après midi de recherches plutot infructueuses.

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

Discussions similaires

  1. Combobox sans doublons
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/03/2016, 14h30
  2. [XL-2007] Erreur dans un combobox sans doublons
    Par formabox dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/04/2012, 20h49
  3. [XL-2003] ComboBox Sans Doublon: ça ne marche jamais
    Par Otmanes dans le forum Excel
    Réponses: 2
    Dernier message: 14/07/2009, 11h53
  4. combobox sans doublon (colonne de reference avec cellule vide)
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/04/2008, 17h08
  5. Combobox sans doublon
    Par Psychoze dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/03/2008, 19h18

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