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 :

Empecher la selection d'un item dans une liste déroulante [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut Empecher la selection d'un item dans une liste déroulante
    Bonjour à tous,

    Je voudrais associer une liste déroulante à chaque cellule d'une plage et empêcher la sélection de certains items pour ces listes. Est-ce possible?
    Je m'en remets à vous car je ne sais pas trop par quel côté prendre le problème, et n'ai pas trouvé grand chose sur le sujet.

    Par exemple pour une cellule donnée, j'aimerais avoir une liste de la sorte:

    - Famille1
    -- F1_ITEM1
    -- F1_ITEM2
    -- F1_ITEM3

    - Famille2
    -- F2_ITEM1
    -- F2_ITEM2

    et que l'utilisateur ne puisse sélectionner que les items en italique

    Ou alors encore mieux (dans l'esprit de l'explorateur de projet VBA): A l'affichage on aurait :

    - Famille1
    - Famille2


    et en cliquant sur une des familles, l'ensemble des items de la famille apparait
    ex: après clic sur Famille1 on aurait:

    - Famille1
    -- F1_ITEM1
    -- F1_ITEM2
    -- F1_ITEM3

    - Famille2

    Je ne pense pas que ça soit possible via une liste de validation de données même si ça m'arrangerait car je ne suis pas très calé sur les listBox...

    Voilà toute piste sera la bienvenue.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à titre d'info voir ceci

  3. #3
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci Kiki, par contre ça me parait un peu lourd à mettre en place et je n'ai malheureusement pas forcément le temps requis.

    Je préférerais rester sur des listes déroulantes et du coup sur le fait d’empêcher la sélection de certain items.

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 397
    Points
    16 397
    Par défaut
    Bonjour

    J'avais récupéré l'exemple ci-dessous sans doute sur un forum :

    un onglet nommé liste avec dans
    • une colonne les familles (C dans cet exemple) et dans cet exemple le nom de famille est un seul caractère
    • dans une autre (A dans cet exemple) les produits rangés par ordre des familles : le nom du produit doit faire plus d'un caractère et commencer par le caratère de la famille.

    trois noms :
    • debut : =liste!$A$2
    • racine : =DECALER(liste!$C$2;;;NBVAL(liste!$C:$C)-1)
    • liste : =DECALER(liste!$A$2;;;NBVAL(liste!$A:$A)-1)


    dans la validation la formule suivante (sachant qu'on part de la cellule A2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(NBCAR($A$2)=1;A2<>"");DECALER(debut;EQUIV(A2;GAUCHE(liste)*1;0)-1;;SOMME((STXT(liste;1;NBCAR(A2))=TEXTE(A2;"0"))*1));racine)
    Dans la liste on choisit une famille puis on redéroule et on a les produits de la famille.

    Edit :

    J'ai refait le test avec familles F1, F2, F3 et produits commençant par F1 ou F2 ou F3
    la formule est pour une liste en M5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(NBCAR($M$5)=2;M5<>"");DECALER(debut;EQUIV($M$5;GAUCHE(Liste;2);0)-1;;SOMME((STXT(Liste;1;NBCAR(M5))=TEXTE(M5;"0"))*1));Racine)
    Si ce n'est pas clair, je posterai le classeur.

  5. #5
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci 78chris mais je n'arrive pas à faire fonctionner ton exemple.

    j'ai testé avec:

    col A | col C
    itemA1 | A
    itemA2 | A
    itemA3 | A
    itemB1 | B
    itemB2 | B

    Dans la liste déroulante, je n'ai que les familles non dédoublonnées:
    A
    A
    A
    B
    B

    quand tu dis "on redéroule", tu fais comment?

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 397
    Points
    16 397
    Par défaut
    Bonjour

    En fait on déroule une première fois : la liste est celle des familles.
    On déroule une seconde fois : la liste est celle des produits de la famille.

    Je reviens poster l'exemple

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 397
    Points
    16 397
    Par défaut
    Bonjour


    Ci-joins l'exemple avec les 2 cas : l'un orienté plutôt compta avec des valeurs numériques, l'autre plus général.

    A partir de là on peut décliner d'autres variantes...
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Une autre solution éventuelle via un menu popup
    Un petit dessin vaut parfois mieux qu'une longue explication --> voir exemple ci-joint.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci beaucoup Chris!

    ok, il fallait que les items de niveau inférieur soit préfixés par le nom de l'item de niveau supérieur.
    Je vais me pencher sur la formule.

    Sinon une idée pour empêcher la sélection de certains items?

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 397
    Points
    16 397
    Par défaut
    Bonjour

    Dans ton 1er post l'interdiction semblait concerner la saisie d'item ne faisant pas partie de la famille. Ce que fait ce système à double détente.

    Quel serait l'autre cas ?

  11. #11
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Merci beaucoup à tous les 2 de vous être penchés sur le sujet.

    Chris:
    Dans ton 1er post l'interdiction semblait concerner la saisie d'item ne faisant pas partie de la famille. Ce que fait ce système à double détente.
    Oui c'est bien ça, je relançais juste le sujet par curiosité pour savoir si c'était possible

    Fring: Ta solution est, je trouve, très élégante, et je crois que je vais l'adopter

    Je laisse le post en non résolu jusque à la fin de la journée, au cas où quelqu'un saurait comment empêcher la saisie de certains items. Mais je le répète ce n'est que pure curiosité.

    Merci encore à vous 2.

  12. #12
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 397
    Points
    16 397
    Par défaut
    Bonjour

    Soit une plage nommée Saisie où doit se faire le contrôle

    Cette plage a une liste de validation classique avec liste famille et produits
    - Famille1
    -- F1_ITEM1
    -- F1_ITEM2
    -- F1_ITEM3
    - Famille2
    -- F2_ITEM1
    -- F2_ITEM2

    Une autre liste nommée Familles contient les familles
    - Famille1
    - Famille2

    Dans le module de la feuille concernée
    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
    Public CControl As Boolean
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range
    If CControl = True Then CControl = False: Exit Sub
        If Intersect(Target, Range("saisie")) Is Nothing Then Exit Sub
        If Target.Rows.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        For Each C In Range("Familles").Cells
            If Target.Value = C.Value Then
                MsgBox "Valeur non autorisée"
                CControl = True
                Application.Undo
                Exit For
            End If
        Next C
    End Sub

  13. #13
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    ok merci bien Chris

    Bonne soirée

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/05/2015, 13h40
  2. Réponses: 0
    Dernier message: 24/05/2011, 09h59
  3. Sélection d'un item dans une liste déroulante
    Par BizutAccess dans le forum IHM
    Réponses: 3
    Dernier message: 31/03/2011, 09h52
  4. Répétitions des items dans une liste déroulante
    Par Creanet dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2009, 15h13
  5. selection d'un item dans une ComboBox remplie via WCF
    Par Lazslo dans le forum Silverlight
    Réponses: 0
    Dernier message: 18/11/2008, 20h01

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