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 :

Listes dépendantes et données de validation par liste [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développement de produit
    Inscrit en
    Juin 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développement de produit
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2006
    Messages : 124
    Par défaut Listes dépendantes et données de validation par liste
    Bonjour à tous,

    J'ai recherché sur le forum et la FAQ sans succès.
    J'ai trouvé un autre post qui souhaitait faire à peu près la même chose et la solution serait apparemment une combobox. J'ai regardé le tuto associé (http://excel.developpez.com/faq/inde...omboboxCascade) et j'avoue que je ne comprend pas bien comment faire (je n'ai jamais fait de vba). Et surtout je ne pense pas que cela réponde à ma question.

    Dans un tableau, j'ai plusieurs thèmes qui ont des sujets associés.
    Dans un autre tableau, où je liste différentes tâches, j'ai deux colonnes : une pour les thèmes et une pour les sujets. Sur chaque cellule des 2 colonnes, j'ai mis une plage de validation par liste (en prenant les listes associées de thèmes et sujets).
    Lorsque je sélectionne un thème, j'ai une liste déroulante qui me propose les thèmes. J'aimerai que la liste déroulante des sujets ne propose que les sujets associés au thème précédemment choisi.
    Je ne voudrais pas avoir un bouton comme j'ai pu voir dans le tuto.
    Existe-t-il une solution simple ?

    Autre petit problème que je rencontre : la liste déroulante des thèmes me propose également les cellules vides.
    Comment faire pour que la liste ne propose que les cellules où sont écrits les thèmes ? J'ai essayé en fusionnant les cellules, sans succès.

    Auriez-vous des pistes pour m'aider, svp ?
    J'espère avoir été claire dans mes explications. Sinon, au besoin j'ai un fichier d'exemple.

    Merci beaucoup d'avance !
    @ bientôt !

  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,

    afin de pouvoir mieux t'aider, je ne dirais pas non à un petit fichier d'exemple

  3. #3
    Membre confirmé
    Femme Profil pro
    Développement de produit
    Inscrit en
    Juin 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développement de produit
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2006
    Messages : 124
    Par défaut
    Bien sûr ! Je ne l'avais pas mis au début suivant les conseils de Pierre Fauconier.

    Merci beaucoup d'essayer en tout cas !

    Pour le problème des trous dans la liste déroulante, je pourrais le résoudre en faisant une autre liste à coté si il n'y a pas de solution simple.

    C'est surtout la dépendance des listes déroulantes que je n'arrive pas à faire ...

  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
    merci

    comme tu n'avais pas encore fait de vba, c'était plus facile pour moi

    alors ci joint, tu trouvera un fichier qui devrais fonctionner comme tu aimerais

    pour plus de facilité, j'ai travaillé avec les plages nommées, j'ai donc un peu changé le fichier de départ (accent entre autres)

    dans l'événement Change de la feuille, j'ai ajouté 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
    Private Sub Worksheet_Change(ByVal Target As Range)
    'si on change la valeur d'une cellule dans thème
    If Not Intersect(Target, Range("H26:H46")) Is Nothing Then
        Dim ListName
        On Error Resume Next
        'on récupere le nom et on l'adapte pour qu'il corresponde au nom
        'de la plage nommée
        'on fait cela car les plages nommées ne supportent pas les accents
        ListName = Left(Target, Len(Target) - 2) & Right(Target, 1)
        'ici, on redéfinit la validation de la cellule sujet
        Target.Offset(0, 1).Validation.Modify xlValidateList, , , "=" & ListName
        On Error GoTo 0
    End If
    End Sub
    cela peut ou doit être changé suivant ce que tu désires.
    (si c'est bobn, ben tant mieux!
    (si c'est pas bon... euh ben tu peux demander )

    edit: je rajoute le fichier quand même
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé
    Femme Profil pro
    Développement de produit
    Inscrit en
    Juin 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développement de produit
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2006
    Messages : 124
    Par défaut
    Merci infiniment de ta réponse !!

    Le fichier que tu as joint marche effectivement exactement comme j'aimerai !

    Je suis en train de regarder plus en détail pour bien comprendre et essayer d'en apprendre pour pouvoir le refaire.
    Et je suis un peu perdue ... je n'y connais vraiment rien en vba ... et du coup j'ai quelques questions un peu bête car je manque des bases à mon avis ...
    J'ai essayé de regarder dans les tutos du FAQ, mais j'ai vraiment du mal ...

    Tu me dis que tu as travaillé avec des plages nommées. Ok. J'ai vu comment tu avais nommé la liste des Thème sur le 2ème onglet. Mais je ne retrouve pas ce nom dans le code ...
    J'aimerai vraiment comprendre le code pas à pas (pour ne pas dire mot à mot) pour savoir le refaire toute seule et l'appliquer à d'autres fichiers.

    Merci encore d'avance pour ta patience et explications.

  6. #6
    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,
    Tu me dis que tu as travaillé avec des plages nommées. Ok. J'ai vu comment tu avais nommé la liste des Thème sur le 2ème onglet. Mais je ne retrouve pas ce nom dans le code ...
    Non effectivement, je l'ai nommé pour pouvoir y acceder(les validations dans la colonne "Thème") à partir d'une autre feuille. sinon excel ne le permettrais pas! j'ai aussi nommé quatre liste ("Theme1","Theme2","Theme3","Theme4") qui correspondent respectivment au listes "Sujets"
    donc l'idée est d'appliquer une liste de validation à une cellule B suivant la valeur d'une cellule A. On fait donc d'abord en sorte que les noms des listes en cellules B Correspondent à un nom de la liste disponible en cellule A.
    Dans l'exemple ce n'est pas vrai à 100% à cause des espaces(les espaces sont interdit pour les noms de listes. on devra donc ici retravailler le nom pour qu'iil corresponde à 100%. Si les noms de la liste "ListeTheme" avaient été (Theme1","Theme2","Theme3","Theme4") en place de Theme 1","Theme 2","Theme 3","Theme 4"), cela eu été plus facile ).

    explication du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("H26:H46")) Is Nothing Then
    Ici, on lui dis que si la cellule qui est modifiée se trouve dans la plage ("H26:H46") alors on applique la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Dim ListName as string
        On Error Resume Next
        ListName = Left(Target, Len(Target) - 2) & Right(Target, 1)
    On commence par définir une variable texte "ListName"
    puis on l'informe de ne pas prendre en compte les lignes suivantes en cas d'erreur (utile si tu efface la données dans la cellule)
    enfin, on attribue à la variable une données. on reprends la valeur de la cellule modifiée ("Target") afin que du stade "Theme 1" elle prenne la valeur "Theme1". A noter que le code suivant eu été plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListName=replace(Target," ","")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Offset(0, 1).Validation.Modify xlValidateList, , , "=" & ListName
    Alors, ici, c'est la ligne qui fait ce que tu attendais. On informe que la validation de la cellule qui est à coté(".offset(0,1)" -> décalage de 0 ligne et une colonne) de celle qui vien d'être modifiée ("Target") doit être modifié pour correspondre à la liste nommée "ListName" (dans notre exemple "Theme1" donc)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        On Error GoTo 0
    End If
    End Sub
    Pour terminer, on leve la gestion es erreurs, on cloture la condition et la procédure.

    tu as une procédure change pour chaque feuille présente dans ton classeur.
    cette prodédure se lance dès qu'un changement survient dans la feuille et est donc propre à chacune d'entre elles.


    voilà un peu en gros.
    en espèrant avoir été clair et avoir pu t'aider

    Mayekeul

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

Discussions similaires

  1. E-mail avec données excell selectionnées par liste déroulante
    Par jooris dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/03/2012, 02h39
  2. Réponses: 3
    Dernier message: 24/11/2008, 14h09
  3. Réponses: 0
    Dernier message: 15/03/2008, 22h11
  4. Validation des données par liste
    Par Niagala dans le forum Excel
    Réponses: 4
    Dernier message: 10/11/2007, 10h11
  5. zone de liste dépendante d'une autre zone de liste
    Par popof60 dans le forum Access
    Réponses: 3
    Dernier message: 30/03/2007, 15h28

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