Liste déroulante conditionnelle évolutive

Fermé
princessemoutarde Messages postés 7 Date d'inscription jeudi 6 novembre 2014 Statut Membre Dernière intervention 31 mars 2015 - 6 nov. 2014 à 22:19
via55 Messages postés 14405 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 25 avril 2024 - 7 nov. 2014 à 18:52
Bonjour,

Voici la situation : je gère des inscriptions pour un salon et j'ai différents exposants à intégrer dans différentes salles. Par exemple :

Salle boisson : plusieurs places qui sont A, B, C, D, E, F, G, L, X
Salle nourriture : plusieurs places qui sont M, N, O, P, R, U, Q, S, T
Salle jeux : plusieurs places qui sont V, W, H, I, J, K,

J'ai fait un tableau avec liste déroulante conditionnelle si bien que quand un exposant s'inscrit,
sur la colonne A, je coche s'il veut aller dans la nourriture, boisson ou jeux. Dans ma colonne B, je lui attribue une place de façon arbitraire ou non s'il a une préférence.

Comme j'ai envie de gérer efficacement les inscriptions, j'aimerais qu'une fois que j'ai déjà attribué une place pour chaque salle, quand j'inscris les prochains, ma liste déroulante ne présente que les places restantes.

Au cas où je n'explique pas bien :

Exposant 1 est en salle boisson, place A
Exposant 2 en salle boisson, place E
Exposant 3 m'appelle il veut aller en salle boisson, j'aimerais que dans la colonne qui propose les places, ma liste déroulante ne propose que les places restantes....


Est-ce qu'il existe une super manip pour le faire ?

Merci pour votre aide !
A voir également:

6 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
6 nov. 2014 à 22:24
Bonsoir PM, bonsoir le forum,

Où (onglet / adresse) sont situées les listes de validation, les données ?
0
princessemoutarde Messages postés 7 Date d'inscription jeudi 6 novembre 2014 Statut Membre Dernière intervention 31 mars 2015
6 nov. 2014 à 22:29
Bonsoir ThauTheme

Elles sont dans la même feuille de calcul que le tableau que j'ai créé

A+

PM
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
6 nov. 2014 à 23:14
Bonsoir PM, bonsoir le forum,

en pièce jointe un exemple pour t'inspirer. Les Listes sont dans l'onglet Listes. Les données dans l'onglet Feuil1. La colonne A de cet onglet contient une validation de données. Au changement dans la colonne A, une validation de données dans la cellule de la même ligne en colonne B est créée en tenant compte des places déjà attribuées...
le code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Object 'déclare la variable L (onglet Listes)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim TCL As Variant 'déclare la variable TCL (Tableau de Cellules de l'onglet L)
Dim LV As String 'déclare la variable LV (Liste de Validation)

If Target.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
If Application.Intersect(Target, Range("A2:A30")) Is Nothing Then Exit Sub 'limite l'action à la plage A2:A30
Set L = Sheets("Listes") 'définit l'onglet L
COL = L.Rows(1).Find(Target.Value, , xlValues, xlWhole).Column 'définit la colonne COL
TCL = L.Range(L.Cells(2, COL), L.Cells(Application.Rows.Count, COL).End(xlUp)) 'définit la tableau de cellules TCL
For I = 1 To UBound(TCL, 1) 'boucle sur toues les lignes du tableau TCL
    'définit la recherche R (recherche la valeur entière de TCL(I,1) dans la colonne 2 (=B) de cet onglet)
    Set R = Columns(2).Find(TCL(I, 1), , xlValues, xlWhole)
    'si R n'existe pas, àjoute TCI(I,1) à la liste de validation LV
    If R Is Nothing Then LV = IIf(LV = "", TCL(I, 1), LV & "," & TCL(I, 1))
Next I 'prochaine ligne de la boucle
With Target.Offset(0, 1).Validation 'prend en compte la validation de données de la cellue adjacente en colonne B
    .Delete 'supprime une éventuelle validation de données existante
    .Add xlValidateList, Formula1:=LV 'ajoute la liste LV comme validation de données
End With 'fin de la prose en compte de la cellule adjacente en colonne B
End Sub

Le fichier :
https://www.cjoint.com/?DKgxtTi2X0k
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
6 nov. 2014 à 23:50
Bonsoir PM, boonsoir le forum,

Dans le fichier en pièce jointe de mon post précédent , remplace le code par celui ci-dessous où un message s'affiche quand toutes les places d'une salle sont attribuées. Je ne te renvoie pas un nouveau fichier en pièce jointe...
Le code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Object 'déclare la variable L (onglet Listes)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim TCL As Variant 'déclare la variable TCL (Tableau de Cellules de l'onglet L)
Dim LV As String 'déclare la variable LV (Liste de Validation)

If Target.Cells.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
If Application.Intersect(Target, Range("A2:A30")) Is Nothing Then Exit Sub 'limite l'action à la plage A2:A30
Set L = Sheets("Listes") 'définit l'onglet L
COL = L.Rows(1).Find(Target.Value, , xlValues, xlWhole).Column 'définit la colonne COL
TCL = L.Range(L.Cells(2, COL), L.Cells(Application.Rows.Count, COL).End(xlUp)) 'définit la tableau de cellules TCL
For I = 1 To UBound(TCL, 1) 'boucle sur toues les lignes du tableau TCL
    'définit la recherche R (recherche la valeur entière de TCL(I,1) dans la colonne 2 (=B) de cet onglet)
    Set R = Columns(2).Find(TCL(I, 1), , xlValues, xlWhole)
    'si R n'existe pas, àjoute TCI(I,1) à la liste de validation LV
    If R Is Nothing Then LV = IIf(LV = "", TCL(I, 1), LV & "," & TCL(I, 1))
Next I 'prochaine ligne de la boucle
'si LV est vide, message, sort de la procédure
If LV = "" Then MsgBox "Il n'y a plus de place disponibles pour la salle " & Target.Value & " !": Exit Sub
With Target.Offset(0, 1).Validation 'prend en compte la validation de données de la cellue adjacente en colonne B
    .Delete 'supprime une éventuelle validation de données existante
    .Add xlValidateList, Formula1:=LV 'ajoute la liste LV comme validation de données
End With 'fin de la prose en compte de la cellule adjacente en colonne B
End Sub


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
princessemoutarde Messages postés 7 Date d'inscription jeudi 6 novembre 2014 Statut Membre Dernière intervention 31 mars 2015
7 nov. 2014 à 17:37
Waouhhh merci ! Je vais essayer de faire ça ce week-end ! Merci beaucoup !!!
0
via55 Messages postés 14405 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 25 avril 2024 2 703
7 nov. 2014 à 18:52
Bonsoir

Une autre possibilité uniquement par formules sans macro

https://www.cjoint.com/?0Khs46MO6WX

Cdlmnt
0