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

VB.NET Discussion :

Filtre conditionnelle d'une liste déroulante


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Filtre conditionnelle d'une liste déroulante
    Bonjour,

    Je vous serais reconnaissant de m'aider à résoudre ce problème:

    Je suis en visual basic. J'ai deux listes déroulantes (combobox) cbx1 et cbx2.

    Au lancement du Form :
    - cbx1 est rempli par une liste d'éléments de type String (A, B, ..., M)
    - cbx2 est rempli par une suite d'éléments de type Integer (1,2,3, ..., 100).

    Mon objectif:

    Si je sélectionne A de cbx1 , cbx2 se met à jour en limitant sa liste au nombre d'éléments correspondants à A et ainsi de suite.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If cbx1.text = A Then
    cbx2.text = 1 to 6 '(1,2,3,...,6)
     
    If cbx1.text = B Then
    cbx2.text = 1 to 25 '(1,2,3,....,25)
    Et ainsi de suite.

    Je vous remercie de pouvoir m'aider.

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Je suppose qu'au moins les valeurs de dbx2 sont ordonnées.
    Si les Integer de cbx2 forment une liste continue, il devrait être facile de recharger cbx2 selon le choix en cbx1.
    Si non, une copie de cbx2 dans une table interne permettrait d'effacer de cbx2, toutes les valeurs inutiles. Lors d'un changement de choix en cbx1, cbx2 pourrait être rechargé par les valeurs utiles, ou bien avec toutes ses valeurs dont on supprime les inutiles ensuite.

    J'espère que ces suggestions t'inspireront ...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bonjour,

    Je suppose qu'au moins les valeurs de dbx2 sont ordonnées.
    Si les Integer de cbx2 forment une liste continue, il devrait être facile de recharger cbx2 selon le choix en cbx1.
    Si non, une copie de cbx2 dans une table interne permettrait d'effacer de cbx2, toutes les valeurs inutiles. Lors d'un changement de choix en cbx1, cbx2 pourrait être rechargé par les valeurs utiles, ou bien avec toutes ses valeurs dont on supprime les inutiles ensuite.

    J'espère que ces suggestions t'inspireront ...
    Bonjour Phil et merci pour votre réponse. Cependant, ce dont j'ai besoin c'est d'un code qui puisse rendre la chose possible.

    Pour le Cbx2, c'est une propriété "additem"

    Ex:
    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
    Sub cbx1_change()
     
    cbx.text= cbx1.additem "A"
    cbx.text= cbx1.additem "B"
    cbx.text= cbx1.additem "C"
    cbx.text= cbx1.additem "D"
    ....
    End sub
     
    Sub cbx2_change()
    Dim Nb as Integer
    For Nb = 1 To 100
    If cbx1.text= B
    cbx2.text= 1 To 6 ' <=== Tout mon problème se situe à ce niveau. Car cela ne marche pas
    End sub
    Merci de m'aider.

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    cbx2.text= 1 To 6 'Tout mon problème
    Le ComboBox a bien sûr ce qu'il faut pour y ajouter des éléments, mais je ne lui connais pas de méthode ou propriét AddItem. S'agit-il bien d'un ComboBox et travailles-tu bien en VB.Net ?

    Par ailleurs, l'extrait de code que tu as posté est soit incomplet, soit erroné. Mais en le considérant comme un "croquis" de ton code réel, je te propose quelques pistes :

    Avec des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cbx2.text= "1 To 6"

    En ajoutant les valeurs dans la liste du ComboxBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Items.Add("1 to 6")
    Ou encore, avec la variable de boucle (au fait, pourquoi une boucle de 1 à 100 ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Items.Add(NB.ToString)
    ...

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci Phil pour toute la peine prise de m'aider. C'est vrai que c'est une petite application que j'avais commencé par élaborer en VB6. Revenu en VB.NET avec l'EDI csharp, je comprends bien ce que vous me proposez. Sauf que cela n'a pas encore marché.

    Je cherche un moyen pour remplir automatiquement le Cbx2 avec une liste de nombres entiers ordinaux (1 à n). Je ne sais quelle méthode utiliser. Seule la boucle For ... Next me permet de le faire, mais elle s'est révélée inefficace par la suite.

    Je continue de faire des recherches. Si entre temps, vous avez pu trouver mieux, je vous en remercierais.

    Bonne soirée.

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Un code comme le suivant (c'est un exemple) devrait pourtant d'aider :

    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
     
    ' ...
            Dim MinFor As Integer
            Dim MaxFor As Integer
     
            Select Case cbx1.Text
                Case "A"
                         MinFor = 1
                         MaxFor = 6
                Case "B"
                         MinFor = 7
                         MaxFor = 18
                Case "C"
                         MinFor = 100
                         MaxFor = 125
            End Select
     
            cbx2.items.clear
     
           For N As Integer = MinFor to MaxFor
                        cbx2.Items.Add(N.ToString)
           Next
    ' ...
    Bon amusement ....

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/04/2017, 13h52
  2. Réponses: 2
    Dernier message: 02/12/2013, 16h11
  3. Sharepoint Designer 2007 : Formatage conditionnel selon une liste déroulante
    Par rohstev dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 03/08/2010, 07h18
  4. [XL-2007] Effectuer un filtre à partir d'une liste déroulante
    Par Fenrhir dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/11/2009, 17h32
  5. [filtre][formulaire] filter une liste déroulante
    Par efk pharos dans le forum IHM
    Réponses: 0
    Dernier message: 10/12/2007, 05h37

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