1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2016 Liste sous condition

Discussion dans 'Forum Excel' démarrée par ynx69, 11 Janvier 2019 à 16:57.

  1. ynx69

    ynx69 XLDnaute Junior

    Inscrit depuis le :
    14 Février 2018
    Messages :
    58
    "J'aime" reçus :
    2
    Bonjour à tous,

    J'ai une question à poser mais n'arrive à trouver de réponse...

    Dans le fichier ci joint je dispose d'un tableau avec : Le nom et les etudes de chaque individu.

    Je souhaiterais que pour les personnes ayant plusieurs diplome, qu'une liste déroulante s'affiche en pour me permettre de selectionner le diplome que je souhaite.

    A l'inverse pour les personnes n'ayant qu'un diplome, je souhaite que la cellule etude affiche directement leur diplome.

    Pourriez-vous m'aider ?

    Merci pour votre aide
     

    Pièces jointes:

    • ex.xlsx
      Taille du fichier:
      9.4 Ko
      Affichages:
      15
  2. Chargement...

    Discussions similaires - Liste sous condition Forum Date
    XL 2010 incrementer une liste en ligne sous condition une bdd Forum Excel 17 Juin 2017
    XL 2010 Mettre à jour ma liste sous condition Forum Excel 17 Novembre 2016
    XL 2010 Liste déroulante sous condition Forum Excel 28 Juillet 2016
    Ingrémenter une liste déroulante sous condition Forum Excel 25 Janvier 2016
    Une liste déroulante sous condition Forum Excel 23 Novembre 2015

  3. JHA

    JHA XLDnaute Barbatruc

    Inscrit depuis le :
    15 Juillet 2006
    Messages :
    7555
    "J'aime" reçus :
    375
    Sexe :
    Masculin
    Habite à:
    Dunkerque
    Utilise:
    Excel 2013 (PC)
    Bonjour à tous,

    Un essai avec la fonction decaler()
    Code (Text):
    =DECALER($I$7;EQUIV($B$5;$I$8:$I$11;0);1;;4)
    JHA
     

    Pièces jointes:

    • ex.xlsx
      Taille du fichier:
      10 Ko
      Affichages:
      6
  4. youky(BJ)

    youky(BJ) XLDnaute Barbatruc

    Inscrit depuis le :
    4 Février 2009
    Messages :
    2560
    "J'aime" reçus :
    127
    Sexe :
    Masculin
    Habite à:
    69 CALUIRE
    Utilise:
    Excel 2016 (PC)
    Bonjour à tous,
    Ceci pour le fun, c'est avec macro et 2 controls listbox dans la feuille
    Pour tester il faut Activer le contenu ….activer les macros
    Bruno
     

    Pièces jointes:

  5. JHA

    JHA XLDnaute Barbatruc

    Inscrit depuis le :
    15 Juillet 2006
    Messages :
    7555
    "J'aime" reçus :
    375
    Sexe :
    Masculin
    Habite à:
    Dunkerque
    Utilise:
    Excel 2013 (PC)
    Bonjour à tous,

    Une petite amélioration pour mettre la bonne longueur de la liste avec une colonne supplémentaire.

    JHA
     

    Pièces jointes:

  6. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour ynx69, JHA, Bruno,

    Fichier joint avec cette macro dans le code de Feuil1 :
    Code (Text):
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim P As Range, Q As Range, c As Range, n%
    Set P = [B5:C5]: Set Q = [I8:I11] 'à adapter
    If Intersect(Target, P(1)) Is Nothing Then Exit Sub
    P(2).Validation.Delete
    Set c = Q.Find(P(1), , xlValues)
    If c Is Nothing Then P(2) = "": Exit Sub
    n = Application.CountA(c(1, 2).Resize(, 4))
    If n = 1 Then
        P(2) = c(1, 2)
    Else
        P(2) = ""
        P(2).Validation.Add xlValidateList, Formula1:="=" & c(1, 2).Resize(, n).Address
        P(2).Select
    End If
    End Sub
    A+
     

    Pièces jointes:

    • ex(1).xlsm
      Taille du fichier:
      24.7 Ko
      Affichages:
      5
  7. ynx69

    ynx69 XLDnaute Junior

    Inscrit depuis le :
    14 Février 2018
    Messages :
    58
    "J'aime" reçus :
    2
    Hello @job75 ,

    merci pour ta réponse , c'est exactement ce que je cherchais !

    Par contre je n'arrive pas à adapter ton code..

    Dans le cas concret que j'ai , la liste des prénoms + les diplomes associés est dans une autre feuille...

    Saurais-tu comment modifier le code de manière à tenir compte de ca ?

    Merci d'avance
     
  8. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour ynx69,
    Code (Text):
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim P As Range, Q As Range, c As Range, n%
    Set P = [B5:C5]: Set Q = Feuil2.[I8:I11] 'Feuil2 : CodeName de la feuille Source
    If Intersect(Target, P(1)) Is Nothing Then Exit Sub
    P(2).Validation.Delete
    Set c = Q.Find(P(1), , xlValues)
    If c Is Nothing Then P(2) = "": Exit Sub
    n = Application.CountA(c(1, 2).Resize(, 4))
    If n = 1 Then
        P(2) = c(1, 2)
    Else
        P(2) = ""
        P(2).Validation.Add xlValidateList, Formula1:="=" & c(1, 2).Resize(, n).Address(External:=True)
        P(2).Select
    End If
    End Sub
    Remerciez aussi JHA et Bruno.

    A+
     

    Pièces jointes:

    • ex(2).xlsm
      Taille du fichier:
      23.5 Ko
      Affichages:
      2
  9. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    Sur Excel 2003 et versions antérieures les plages externes des listes doivent être nommées :
    Code (Text):
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim P As Range, Q As Range, c As Range, n%
    Set P = [B5:C5]: Set Q = Feuil2.[I8:I11] 'Feuil2 : CodeName de la feuille Source
    If Intersect(Target, P(1)) Is Nothing Then Exit Sub
    P(2).Validation.Delete
    Set c = Q.Find(P(1), , xlValues)
    If c Is Nothing Then P(2) = "": Exit Sub
    n = Application.CountA(c(1, 2).Resize(, 4))
    If n = 1 Then
        P(2) = c(1, 2)
    Else
        P(2) = ""
        c(1, 2).Resize(, n).Name = "Etudes" 'plage externe nommée
        P(2).Validation.Add xlValidateList, Formula1:="=Etudes"
        P(2).Select
    End If
    End Sub
    Fichier .xls joint.

    A+
     

    Pièces jointes:

  10. ynx69

    ynx69 XLDnaute Junior

    Inscrit depuis le :
    14 Février 2018
    Messages :
    58
    "J'aime" reçus :
    2
    Merci à tous pour vos réponses ca m'aide vachement !! :) J'avance petit à petit sur mon projet grâce à vous !

    @job75, j'ai réussi à adapter la macro de manière à ce qu'elle fonctionne sur mon cas mais il me reste juste un point en suspens que je n'arrive pas à résoudre.

    Dans le fichier exemple que je t'ai donné : On sélectionne le nom en B5 et on affiche le résultat en C5. Or, sur mon fichier ( qui ne peut pas être modifiable puisqu'il intéragit avec un autre programme que je ne peux pas modifier, il faudrait que le résultat s'affiche en D5. Je pensais qu'il fallait modifier seulement la ligne B5:C5 de la macro mais visiblement ce n'est pas le cas. Pourrais-tu m'aider et m'expliquer les points à modifier ?

    Merci d'avance

    Ynx
     
  11. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bah remplacez Set P = [B5:C5] par :
    Code (Text):
    Set P = [B5:D5]
    et remplacez P(2) par P(3)...
     
  12. ynx69

    ynx69 XLDnaute Junior

    Inscrit depuis le :
    14 Février 2018
    Messages :
    58
    "J'aime" reçus :
    2
    Merci pour ta réponse ! :)

    Franchement ca m'aide énormément !

    J'ai essayé de modifier la macro car je fais face à un nouveau problème suite à une demande de dernière minute: je souhaite faire exactement la même chose (à quelques conditions près) , cette fois ci entre [B4 ":"D4].

    Contrairement à l'exemple précédent, j'ai (toujours dans la feuille 2) une liste de 3000 noms qui commence en A62 et un code qui est rattaché à chacun des noms (en colonne B).

    ce que je cherche à faire , c'est ajouté la fonctionnalité suivante :

    L'utilisateur choisi le nom en cellule B4
    On contrôle le nom dans la liste présente sur la feuille 2
    Si le nom apparait une seule fois : alors on met en D4 le code qui lui est rattaché
    Si le nom apparait plusieurs fois : alors on crée une liste en D4 avec les codes dispo

    Est ce que tu penses que c'est réalisable ?

    ynx
     
  13. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Rien compris, pour la feuille 2 il n'y a rien en colonnes A ou B.

    Et il est évident que dans cette feuille la liste des noms doit être sans doublon.
     
  14. ynx69

    ynx69 XLDnaute Junior

    Inscrit depuis le :
    14 Février 2018
    Messages :
    58
    "J'aime" reçus :
    2
    Hello Job,

    J'ai mis en pièce jointe un exemple type.

    Pour refaire l'explication lol : sur la feuille 2 , colonne A , ligne 62 jusqu'à 3200 , on a des noms de fournisseurs
    Sur les colonnes suivantes, 1 code associé ou plusieurs .
    Il n'y a pas de doublons

    Ce que je cherche c'est en plus du choix entre B5 et D5, c'est d'avoir un choix sur B4 et D4 ( choix qui seront realisés à partir de la liste qui commence à la ligne 62 ).

    Donc comme pour la première macro, si un code alors on l'affiche en D4 , si plusieurs on affiche la liste des codes en D4.

    Merci vraiment pour ton aide ! si t'es parisien, je paye mon coup à boire !

    Ynx
     

    Pièces jointes:

    • ex(2).xlsm
      Taille du fichier:
      18.6 Ko
      Affichages:
      2
  15. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    26016
    "J'aime" reçus :
    2233
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonsoir ynx69,

    Voyez ce fichier (3) et ces macros :
    Code (Text):
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim P As Range, Q As Range
    Set P = [B5:D5]: Set Q = Feuil2.[I8:I11] 'Feuil2 : CodeName de la feuille Source
    Macro Target, P, Q
    Set P = [B4:D4]: Set Q = Feuil2.[A62:A66]
    Macro Target, P, Q
    End Sub

    Sub Macro(Target, P As Range, Q As Range)
    Dim c As Range, n%
    If Intersect(Target, P(1)) Is Nothing Then Exit Sub
    P(3).Validation.Delete
    Set c = Q.Find(P(1), , xlValues)
    If c Is Nothing Then P(3) = "": Exit Sub
    n = Application.CountA(c(1, 2).Resize(, 4))
    If n = 1 Then
        P(3) = c(1, 2)
    Else
        P(3) = ""
        P(3).Validation.Add xlValidateList, Formula1:="=" & c(1, 2).Resize(, n).Address(External:=True)
        P(3).Select
    End If
    End Sub
    A+
     

    Pièces jointes:

    • ex(3).xlsm
      Taille du fichier:
      26.6 Ko
      Affichages:
      1

Partager cette page