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 :

Synchronisation de 3 combobox listes déroulantes


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 Synchronisation de 3 combobox listes déroulantes
    Bonjour à tous,
    Après avoir parcouru avec attention le forum, je me heurte à une difficulté : synchroniser 3 listes déroulantes:

    En fonction du pays choisi et en fonction de la région choisie, je souhaiterai pouvoir choisir un client ( qui habite en France et en paca par exemple)
    Avec le code VBA ci-dessous j'arrive à synchroniser la deuxième combobox sur la base du choix de la première :

    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
    Private Sub UserForm_Initialize()
    Set f = Sheets("feuil1")
    Set mondicoA = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("A2", f.[A65000].End(xlUp))
    If Not mondicoA.Exists(c.Value) Then mondicoA.Add c.Value, c.Value
    Next c
    'Me.ComboBox1.List = mondico.items
    'Me.ComboBox1.ListIndex = 0
    Me.ComboBox1.AddItem "*"
    For Each i In mondicoA.items
    Me.ComboBox1.AddItem i
    Next
    Me.ComboBox1.ListIndex = 0
    End Sub
    Private Sub ComboBox1_Change()
    ComboBox2.Clear
    For n = 2 To Range("B65536").End(xlUp).Row
    If Range("B" & n) = ComboBox1 Then
    ComboBox2.AddItem Range("E" & n)
    End If
    Next n
    End Sub
    Private Sub ComboBox2_Change()
    ComboBox3.Clear
    For n = 2 To Range("E65536").End(xlUp).Row
    If Range("B" & n) = ComboBox1 And Range("E" & n) = ComboxBox2 Then
    ComboBox2.AddItem Range("F" & n)
    End If
    Next n
    End Sub
    j'ai tenté d'intégrer un " AND" mais sans résultat.

    Je vous remercie par avance pour votre aide précieuse.
    Cordialement

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    a première vue je ne vois aucune référence à ta troisième liste déroulante dans ton code ...

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Pour remplir le combobox 3 (j'ai trouvé une petite erreur) :
    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
     
    Private Sub ComboBox2_Change()
     
        ComboBox3.Clear
     
        For n = 2 To Range("E65536").End(xlUp).Row
     
            If Range("B" & n) = ComboBox1.Text And Range("E" & n) = ComboxBox2.Text Then
     
            'ComboBox2.AddItem Range("F" & n) <-- petite erreur ici !
     
            ComboBox3.AddItem Range("F" & n)
     
            End If
     
        Next n
     
    End Sub
    Hervé.

  4. #4
    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 Comobobox3
    Merci pour votre réponse, néanmoins j'ai un peu de mal à ce stade.

    J'ai rectifié le petit problème de la combobox 3 en corrigeant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox2_Change()
    ComboBox3.Clear
    For n = 2 To Range("E65536").End(xlUp).Row
      If Range("B" & n) = ComboBox1 And Range("E" & n) = ComboxBox2 Then
        ComboBox3.AddItem Range("F" & n)
      End If
    Next n
    End Sub

    Le problème c'est que je ne suis pas sur d'avoir intégrer correctement le and... en effet je pars de n=2 to range E65537 , mais il m'aurait fallu une deuxième condition avec n=2 to range C65537.

    Vous pourriez me filer un coup de main?

    Merci par avance

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Le problème c'est que je ne suis pas sur d'avoir intégrer correctement le and... en effet je pars de n=2 to range E65537 , mais il m'aurait fallu une deuxième condition avec n=2 to range C65537.
    Tu souhaite quoi au juste ? Si toutes les lignes de ton tableau sont renseignées, que tu fasse "n=2 to range E65536" ou "n=2 to range C65536" ne change rien puisque tu cherche à récupérer le numéro de la dernière ligne utilisée en partant du bas de la feuille. Juste une parenthèse, il est maintenant préférable d'utiliser" Rows.Count" plutôt que "E65536" car depuis Excel 2007, le nombre de lignes et colonnes a grandement augmenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    With Worksheets("Feuil1")
     
        'pour le numéro de ligne
        MsgBox .Cells(.Rows.Count, 1).End(xlUp).Row
     
        'pour le numéro de colonne
        MsgBox .Cells(1, .Columns.Count).End(xlToLeft).Column
     
        'pour la ou les lettres de colonne
        MsgBox Split(Cells(1, .Columns.Count).End(xlToLeft).Address(1, 1), "$")(1)
     
    End With
    Je ferme la parenthèse.
    Si tu veux seulement les lignes ayant des valeurs correspondantes au combos en colonnes B et E, le "And" est bien utilisé.

    Hervé.

Discussions similaires

  1. [XL-2003] ComboBox Liste déroulante - MàJ cellule
    Par jeanpierre78 dans le forum Excel
    Réponses: 1
    Dernier message: 17/03/2014, 09h02
  2. ComboBox (liste déroulante) en vbs
    Par hamza.rezgui dans le forum VBScript
    Réponses: 2
    Dernier message: 03/01/2014, 22h22
  3. [XL-2003] Combobox - Liste déroulante amovible
    Par Chakalaka dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/06/2012, 09h48
  4. Création d'une combobox liste déroulante
    Par ThieBEN dans le forum IHM
    Réponses: 14
    Dernier message: 15/11/2007, 09h52
  5. Test sur une ComboBox (Liste déroulante).
    Par SeaWolf601 dans le forum IHM
    Réponses: 5
    Dernier message: 05/10/2006, 17h29

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