XL 2016 Liste sous condition

  • Initiateur de la discussion Initiateur de la discussion ynx69
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ynx69

XLDnaute Junior
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

Bonjour ynx69, JHA, Bruno,

Fichier joint avec cette macro dans le code de Feuil1 :
Code:
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

Bonjour ynx69, JHA, Bruno,

Fichier joint avec cette macro dans le code de Feuil1 :
Code:
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+

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
 
Bonjour ynx69,
Code:
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

Re,

Sur Excel 2003 et versions antérieures les plages externes des listes doivent être nommées :
Code:
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

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
 
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
 
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

Bonsoir ynx69,

Voyez ce fichier (3) et ces macros :
Code:
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

Merci beaucoup pour ton aide !! J'ai compris la logique tu utilises (après de longues minutes).

Par contre j'ai un point de blocage sur lequel je trouve pas comment procéder.

En B5 et B4 on a nos listes dans lesquelles l'utilisateur choisi ce qu'il veut. Avant ca , lorsque je tapais "m" par exemple et que je cliquais sur la liste, ca m'affichait les éléments donc la première lettre commencait par M. Je faisais ça via une formule dans la liste de validation.

Cette fonctionnalité n'est plus dispo et ca pose un problème. Dans la cellule B4 , la liste fait 3000 lignes .. Est ce qu'il y a un moyen de corriger ca ?

Ynx
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
133
Réponses
7
Affichages
137
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
502
Réponses
1
Affichages
153
Retour