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 dépendantes l'une de l'autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut combobox dépendantes l'une de l'autre
    Bonjour,

    Je suis en train de créer un formulaire personnalisé avec des combobox en cascade. En faisant des recherches sur le net j'ai trouvé comment procéder mais il me reste un souci que je ne sais comment traiter.

    La 1ère donnée est l'identification du client.
    Je souhaiterais que l'utilisateur puisse soit choisir le nom du client dans une liste soit saisir directement son numéro s'il le connait par coeur (ce sera plus facile une fois que la liste sera longue). Quelle que soit la méthode utilisée je souhaite bien entendu voir simultanément les 2 données dont une sera utilisée pour définir la liste de ma 2ème combobox.
    C'est là que je coince car si je dis que la saisie d'un numéro entraîne le positionnement de la liste sur le nom correspondant ou que le choix d'un nom dans la liste entraîne la mise à jour du numéro je risque de me retrouver dans une boucle infinie.

    J'espère que vous voyez ce que je souhaite faire.
    Si ça risque de donner une usine à gaz j'ai également envisagé de mettre un bouton OK sur lequel l'utilisateur devra cliquer s'il choisit de saisir le numéro du client.

    Si quelqu'un pouvait me conseiller quant à la méthode vers laquelle m'orienter ce serait vraiment sympa.

    Amicalement

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    je ne comprends pas très bien

    dans un combobox, si tu tape les données il y a déjà une saisie automatique qui va te diriger vers ce qu'il se rapproche le plus de ce que tu veux non?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    Bonjour,

    En fait lorsque la combobox avec le nom du client aura été modifiée la box suivante proposera le choix parmi les établissements dudit client.

    Par contre je souhaiterais que l'utilisateur, plutôt que d'utiliser la box avec la liste des clients, puisse saisir le numéro du client dans une autre box car pour les clients quotidiens les numéros sont généralement connus par coeur.

    Comme j'ignore la méthode choisie par l'utilisateur, si je dit que la box avec le nom se met à jour lorsqu'une modification est détectée dans la box avec le numéro et que dans le même temps je dis qu'une modification de la box avec le nom entraîne une mise à jour de la box avec le numéro je vais me retrouver avec un ping-pong entre les 2 box.

    J'espère que ces explications permettent d'y voir plus clair mais c'est bien parce que le cas semble obscur que je me permets de solliciter ce forum.

    En tout cas merci d'essayer de m'aider et bonnes fêtes de fin d'année.

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    si tu les fait encoder dans une textbox tu peux tjs faire 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
    15
    16
    17
    18
    19
    20
     
    Private Sub TextBox1_AfterUpdate()
    'avant toute chose vérifier si la valeur existe dans la combobox
    Dim se
    Dim CancelEvent As Boolean
    CancelEvent = True
    For Each se In Me.ComboBox1.List
        If se = Me.TextBox1.Value Then CancelEvent = False
    Next se
     
    If CancelEvent Then
        MsgBox "donnée non trouvée"
        Exit Sub
    Else
        Me.ComboBox1 = Me.TextBox1.Value
    End If
     
    End Sub
     
    enfin, si j'ai bien tout compris ;)

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    Re-bonjour,

    mayekeul, ton morceau de code m'a donné le déclic pour ne pas faire de ping-pong, en jouant avec la propriété enableevents.

    Ormonth, je n'avais pas été sur le lien que tu m'as indiqué mais sur d'autres avec des idées simlilaires. En combinant tout ça je devrais arriver au résultat escompté.

    J'y vois plus clair maintenant et vais pouvoir m'attaquer à mon code.
    Une fois ce dernier écrit je reviendrai vers le forum si jamais ça coince à l'exécution.

    Merci pour vos conseils.
    Cdlt.

  7. #7
    Nouveau candidat au Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut Combobox dépendant d'une autre et saisie automatique
    Bonjour à tous,

    J'essaie de mixer deux solutions que j'ai trouvé sur le forum pour avoir une combobox qui dépend d'une autre et garder la saisie automatique/dynamique que j'avais.
    J'y arrive sur la première combobox1 mais pas sur la 2nde.
    Pouvez-vous m'aider svp? C'est pour l'userform3.

    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
    Dim A(), B()
     
    Private Sub UserForm_Initialize()
     
    Set Ws = Sheets("feuil1")
    With Me.ComboBox3
        For J = 2 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("B" & J)
        Next J
    End With
     
    Set F = Sheets("prix de cotation")
    A = Application.Transpose(F.Range("P2:P" & F.[P65000].End(xlUp).Row).Value)
    Me.ComboBox1.List = A
     
    End Sub
     
    Private Sub ComboBox1_Change()
     
    Set F = Sheets("prix de cotation")
    A = Application.Transpose(F.Range("P2:P" & F.[P65000].End(xlUp).Row).Value)
    Me.ComboBox1.List = A
     
    If Me.ComboBox1.ListIndex = -1 Then
        Me.ComboBox1.List = Filter(A, Me.ComboBox1.Text, True, vbTextCompare)
        Me.ComboBox1.DropDown
    End If
     
    With Worksheets("prix de cotation")
        If ComboBox1.ListIndex >= 0 Then
            ComboBox2.ListIndex = -1
            .Range("Q1") = ComboBox1.Value
            ComboBox2.RowSource = "Article"
     
        Else
            ComboBox2.ListIndex = -1
            ComboBox2.RowSource = ""
            .Range("Q1").ClearContents
        End If
    End With
     
    End Sub
    Merci à vous !
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    Bonjour,

    Ca remonte à un certain temps et je n'ai plus touché au VBA depuis plus d'un an.
    Je pense que les morceaux de codes ci-après sont ceux qui m'avaient permis d'avoir les combobox en cascade.
    J'avais une feuille avec tous les établissements de clients, appelés "Revendeurs", une ligne par établissement.
    Dans mon formulaire je choisissais un revendeur dans le menu déroulant et le champ avec les villes où était présent ledit revendeur se complétait avec chacune d'elle en menu déroulant.
    Pour les 2 champs la liste déroulante diminuait au fur et à mesure que je tapais le nom. Par exemple, après avoir tapé un "S" je n'avais que les revendeurs dont le nom commençait par "S".
    Le champ avec les revendeurs était alimenté lors de l'initialisation du formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Initialise le menu deroulant de choix du revendeur lors de l'initialisation du formulaire
    Set Mondico = CreateObject("Scripting.Dictionary")
    For Each c In Worksheets("Revendeurs").Range("Rev_Societe")
        Mondico(c.Value) = c.Value
    Next
    Me.Nom.List = Mondico.items
    Ensuite il me semble que j'avais une procédure événementielle qui lançait la mise à jour des autres champs du formulaire une fois que j'avais choisis un revendeur.

    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 Nom_Change()
    Ville.Clear
    If Nom.ListIndex = -1 Then Exit Sub
    Societe = [Rev_Societe]
    For i = 1 To Worksheets("Revendeurs").Range("Rev_Ville").Count
        If Societe(i, 1) = Me.Nom Then
            With Ville
                .AddItem Range("rev_ville")(i)
                .List(.ListCount - 1, 1) = i + 1 'ajoute le numero de ligne de l'onglet "Revendeurs" dans la combo
            End With
        End If
    Next i
    If Me.Ville.ListCount = 1 Then
        Me.Ville.ListIndex = 0
        Else: Me.Ville.ListIndex = -1
    End If
     
    End Sub
    J'espère que ça aidera mais je ne suis plus du tout dedans.

    Cordialement

  9. #9
    Nouveau candidat au Club
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut
    Merci mais cela j'y arrive effectivement avec les premières lettres mais je voudrais aller plus loin et avoir n'importe quel mot tapé qui me cherche toutes les propositions comprenant le mot.
    Pour être concret, j'ai beaucoup d'articles comprenant le mot épinard, des pousses, des légumes, des feuilles, etc... je voudrais les avoir tous en tapant épinard. Les premières lettres ne suffisent pas.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    Re-bonjour,

    Désolé mais là malheureusement mes connaissances ne me permettent pas de te proposer une solution.

    Bonne continuation.

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

Discussions similaires

  1. Créer une combobox dépendante d'une autre
    Par deeeel dans le forum NetBeans
    Réponses: 5
    Dernier message: 28/02/2014, 12h34
  2. [PHP 4] Deux ComboBox dépendants des uns et des autres
    Par khachkhouch dans le forum Langage
    Réponses: 1
    Dernier message: 25/09/2012, 23h04
  3. Spliter deux lignes dépendantes l'une de l'autre
    Par pop_up dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 14/12/2011, 14h29
  4. Réponses: 5
    Dernier message: 09/05/2011, 12h35
  5. [VBA-E] 2 ListBox avec valeurs "dépendantes l'une de l'autre"
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/03/2007, 10h51

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