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 :

Combo box synchronisés


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Par défaut Combo box synchronisés
    Bonjour à tous et à toutes,

    Je dispose d'un fichier excel dans lequel j'ai réussi à intégrer un Userform avec deux listes déroulantes synchronisées à partir de deux colonnes d'un tableau ( colonnes A et B de la feuille Selection).

    Ainsi par exemple si je choisis dans la première liste box un marché ( entreprises, ferroviere , etc...) j'ai une deuxième liste déroulante qui affiche la segmentation que souhaite sélectionner l'utilisateur.
    Cependant j'ai des doublons à l'intérieur de cette deuxième list box.... je souhaiterais lorsque l'utilisateur selectionne le marché qu'il puisse choisir seulement parmis 3 segmentation (PEES, MEES, GEES) et qu'enfin l'utilisateur choisisse ensuite via une listbox 3 la personne qu'il souhaite.

    Ma demande consiste à savoir comment enlever les doublons de la deuxième Combobox et comment ajouter une troisieme liste box qui permettrait à l'utilisateur de selectionner son client.

    Le code que j'utilise est le suivant :

    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()
     
      Set f = Sheets("SELECTION")
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
         d.Item(c.Value) = ""
      Next c
      Me.ComboBox1.List = d.keys
    End Sub
    Private Sub ComboBox1_Change()
      Me.ComboBox2.Clear
      i = 0
      For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
         If c = Me.ComboBox1 Then
           Me.ComboBox2.AddItem c.Offset(0, 1)
           Me.ComboBox2.List(i, 1) = c.Offset(0, 2)
           i = i + 1
         End If
      Next c
      Me.ComboBox2.SetFocus
      SendKeys "{F4}"
    End Sub
    Private Sub ComboBox2_click()
       Me.adresse = Me.ComboBox2.Column(1)
    End Sub

    Merci par avance de votre précieuse aide.

    A bientôt

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    voila deja comment remplir une combobox ou une listbox sans 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
    35
     
    'Attention, si tu rencontres une erreur au moment de l'exécution du code et que celui-ci s'arrêtesur Dim Table as Scripting.Dictionary, _
    dans la Fenêtre VBE(visual basic editor) / barre des menus / outils / références / vérifie bien que "Microsoft scripting Runtime" _
    est coché
     
     
    Private Sub UserForm_Initialize()
    Dim Table As Scripting.Dictionary
     Dim i, j, deja As Boolean, A As Variant
    Set Table = New Scripting.Dictionary
    j = 0
    With Sheets(1) ' À adapter
    For Each A In .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
    'Vérifie si le nom n'est pas une erreur, n'est pas vide
    'n'a pas déjà été récupéré, ne contient pas "utilisateur"
    deja = True
     
    If IsError(A) Then
    deja = False ' on n'y met pas les valeurs d'erreur
     ElseIf Len(A) = 0 Then
    deja = False
     ElseIf Table.Exists(A.Value) Then
    deja = False
    End If
     
     If deja Then Table.Add A.Value, j: j = j + 1 'rajoute Next
    Next
    End With
     For i = 0 To Table.Count - 1
    Debug.Print Table.Keys(i)
    ListBox1.AddItem (Table.Keys(i))
    Next i
     
    Set Table = Nothing ' Nettoyage
    End Sub
    le reste tu saura faire je suppose ?
    n'oublie pas de cocher la reference "Microsoft scripting Runtime"

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Par défaut Doubons dans Listbox
    Bonjour,

    JE vous remercie pour vos lumières.
    Néanmoins après avoir réadapté le script j'ai toujours des doublons qui s'affichent. Si je selectionne dans la listbox 1 le marché Entreprises, il apparait toujours des doublons :

    Voila le script du UserForm :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Dim f
     
     
    Private Sub adresse_Change()
     
    End Sub
     
    Private Sub ComboBox3_Change()
     
    Dim Table As Scripting.Dictionary
     Dim i, j, deja As Boolean, A As Variant
    Set Table = New Scripting.Dictionary
    j = 0
    With Sheets(Selection!) ' À adapter
    For Each A In .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
    'Vérifie si le nom n'est pas une erreur, n'est pas vide
    'n'a pas déjà été récupéré, ne contient pas "utilisateur"
    deja = True
     
    If IsError(A) Then
    deja = False ' on n'y met pas les valeurs d'erreur
     ElseIf Len(A) = 0 Then
    deja = False
     ElseIf Table.Exists(A.Value) Then
    deja = False
    End If
     
     If deja Then Table.Add A.Value, j: j = j + 1 'rajoute Next
    Next
    End With
     For i = 0 To Table.Count - 1
    Debug.Print Table.Keys(i)
    ListBox1.AddItem (Table.Keys(i))
    Next i
     
    Set Table = Nothing ' Nettoyage
    End Sub
     
    Private Sub CommandButton1_Click()
    If ComboBox1.ListIndex > -1 Then
       Sheets("SELECTION").Range("I4") = ComboBox2.Text
    End If
    Unload Me
    cacheronglet
     
    End Sub
     
     
    Private Sub CommandButton2_Click()
    Sheets("SELECTION").Select
    Unload Me
    End Sub
     
    Private Sub Label2_Click()
     
    End Sub
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("SELECTION")
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
         d.Item(c.Value) = ""
      Next c
      Me.ComboBox1.List = d.Keys
    End Sub
    Private Sub ComboBox1_Change()
      Me.ComboBox3.Clear
      i = 0
      For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
         If c = Me.ComboBox1 Then
           Me.ComboBox3.AddItem c.Offset(0, 1)
         End If
     
      Next c
      Me.ComboBox3.SetFocus
      SendKeys "{F4}"
    End Sub
    Private Sub ComboBox2_click()
       Me.adresse = Me.ComboBox2.Column(1)
    End Sub
    Peut être ai je mal intégré le code ?


    Merci pour tes indications

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re

    deja ca:

    c'est pas bon
    ca n'est pas parceque tu met rien dans l'item que l'item disparait

    dans l'exemple que je t'ai donné la colection est vidée a la fin

    maintenant il est vrai que je ne comprend pas tres bien ton code
    surtout que je n'est pas les données sous les yeux

    tu peux pas mettre un exemplaire vidé de toute donné confidentielles???

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Par défaut Re
    Le code, je ne le comprends pas très bien aussi.... c'est quelque chose que j'ai réussi à récupérer mais alors après pour le modifier bon courage.


    Je te donne le fichier :

    Tu trouveras une feuille appelée Selection:
    Colonne A : le marché
    Colonne B : la segmentation qui s'affiche en doublon
    Colonne C : Les personnes qui correspont au marché et à la segmentation.

    A ce jour , j'ai la liste des marchés listbox 1, la liste des segmentations non dédoublonnées listbox 2, et je souhaiterais en plus que l'utilisateur choisisse un client dans la listbox 3 et enfin que la valeur selectionner soit copier coller dans une cellule.

    Je te remercie par avance

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    tiens
    papa noel est passé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [Composant Graphique] List Box "synchronisés"
    Par Raideman dans le forum C++Builder
    Réponses: 9
    Dernier message: 03/11/2006, 19h50
  2. Réponses: 2
    Dernier message: 23/06/2004, 13h56
  3. [VB.NET] Choisir les valeurs des items d'un combo box?
    Par Eithelgul dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/06/2004, 10h13
  4. Réponses: 2
    Dernier message: 11/05/2004, 11h17
  5. Combo box et liste de valeurs contenues dans ma table
    Par TieumB dans le forum C++Builder
    Réponses: 14
    Dernier message: 05/04/2004, 18h47

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