Microsoft 365 Liste de choix dynamique

galoulozere

XLDnaute Nouveau
Bonjour
J'ai eu beau chercher dans de multiples endroits, je ne trouve pas ce dont j'ai besoin

Je souhaite que la colonne A soit une liste de choix pour remplir la colonne D, sans doublons
Et je veux une liste de choix pour la colonne E, les données étant en colonne B, mais dépendants de ce que l'on choisi en D

J'espère que je suis clair

Merci par avance pour votre temps
Gael
 

Pièces jointes

  • Liste de choix dynamique.xlsx
    8.9 KB · Affichages: 14

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @galoulozere,

Un exemple de ce qu'on peut faire avec des formules et deux noms dynamiques.
Le comment est expliqué dans le fichier.

edit : rajouté dans le fichier une MFC qui colore les cellules de la colonne E en rose si le choix dans la colonne D et la valeur de la colonne E sont incompatibles.
 

Pièces jointes

  • galoulozere- Liste de choix dynamique- v1.xlsx
    14.8 KB · Affichages: 15
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour à tous

Par formule nommée tu ne peux créer une liste utilisable en validation à partir des éléments en colonne A et B.
Même en utilisant UNIQUE ou TRIERPAR qui génèrent des matrices dynamiques, ces fonctions n'étant pas directement acceptées par la validation et ces matrices ne pouvant être a priori explorées par EQUIV, DECALER...

Il faut une liste physique comme base de la validation (qui peut être créée par UNIQUE ou TRIERPAR)

Tu peux par contre utiliser PowerQuery pour créer dynamiquement ces listes à partir de A et B, plutôt que des formules
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re, bonjour @chris ;),

Une version par VBA pour la feuille "Feuil2".
Le code est dans le module de la feuille "Feuil2".

nota : on pourrait ne pas effacer la cellule de la colonne E quand la cellule de la colonne D est modifiée. Il vaut mieux alors mettre une MFC sur la colonne E pour montrer que les valeurs de la colonne D et de la colonne E sont éventuellement incohérentes.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count = 1 And Target.Column = Range("d1").Column Then Target.Offset(, 1) = ""
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n&, t, d As New Dictionary, i&
If Target.Count = 1 And Target.Column = Range("d1").Column Then
   n = Application.WorksheetFunction.CountA(Columns("a:a"))
   t = Columns("a:a").Resize(n): d.CompareMode = TextCompare
   For i = 2 To UBound(t)
      If t(i, 1) <> "" Then d(t(i, 1)) = ""
   Next i
   With Target.Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
      xlBetween, Formula1:=Join(d.Keys, ",")
   End With
ElseIf Target.Count = 1 And Target.Column = Range("e1").Column Then
   n = Application.WorksheetFunction.CountA(Columns("a:a"))
   t = Columns("a:b").Resize(n): d.CompareMode = TextCompare
   For i = 2 To UBound(t)
      If t(i, 1) = Target.Offset(, -1) And Target.Offset(, -1) <> "" Then d(t(i, 2)) = ""
   Next i
   With Target.Validation
      .Delete
      If d.Count > 0 Then
         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:=Join(d.Keys, ",")
      End If
   End With
End If
End Sub
 

Pièces jointes

  • galoulozere- Liste de choix dynamique- v2.xlsm
    24.9 KB · Affichages: 11
Dernière édition:

Discussions similaires

Réponses
36
Affichages
2 K
Réponses
17
Affichages
840

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510