Microsoft 365 Liste déroulante dynamique via données horizontales

sebien0077

XLDnaute Nouveau
Bonjour,

J'ai besoin de votre aide. Je tourne un peu en rond...
Voilà, j'ai un premier tableau structuré, dont la structure est horizontale. Je "coche" certaine colonne.
d'une ligne à une autre, les colonnes cochées ne sont pas forcément les même.

et de l'autre coté j'ai un autre Tableau structuré, dont une colonne, correspond à une valeur d'une colonne du premier tableau.
L'objectif: afficher dans la colonne "Type" de ce tableau 2, une liste déroulante dont les valeurs dépendent des choix coché sur le premier tableau (Récupération de l'en-tete des colonnes cochée).
Exemple : pour Centre 1, la liste déroulante sera Type 1, Type 3
Pour centre 2 : Type 2, Type 3
Pour centre 3 : Type 1, Type 5
Pour centre 4 : Type 2 Type 4 Type5
(dans le fichier en PJ, j'ai mis tout en dur... mais l'objectif c'est de l'automatiser :) )

Je vous remercie bcp pour votre aide. (si possible évitons les formules matricielle et utilisons l'avantage des tableaux structurés)

Bonne soirée !
...
 

Pièces jointes

  • Help.xlsx
    12.3 KB · Affichages: 8
Solution
Bonsoir sebien0077, bienvenue sur XLD,

Même avec des tableaux structurés une solution par formules nécessitera des matricielles.

Et ce ne sera pas simple.

Par contre par VBA ce n'est pas très compliqué, voyez le fichier joint et cette macro dans la 2ème feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Variant, j%, liste$
With [Tableau2].Columns(2)
    .Validation.Delete 'RAZ
    If Intersect(ActiveCell, .Cells) Is Nothing Then Exit Sub
End With
With [Tableau1]
    i = Application.Match(ActiveCell(1, 0), .Columns(1), 0)
    If IsError(i) Then Exit Sub
    For j = 2 To .Columns.Count
        If .Cells(i, j) <> "" Then liste = liste & "," & .Cells(0, j)
    Next
End With
If liste <> "" Then ActiveCell.Validation.Add...

job75

XLDnaute Barbatruc
Bonsoir sebien0077, bienvenue sur XLD,

Même avec des tableaux structurés une solution par formules nécessitera des matricielles.

Et ce ne sera pas simple.

Par contre par VBA ce n'est pas très compliqué, voyez le fichier joint et cette macro dans la 2ème feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Variant, j%, liste$
With [Tableau2].Columns(2)
    .Validation.Delete 'RAZ
    If Intersect(ActiveCell, .Cells) Is Nothing Then Exit Sub
End With
With [Tableau1]
    i = Application.Match(ActiveCell(1, 0), .Columns(1), 0)
    If IsError(i) Then Exit Sub
    For j = 2 To .Columns.Count
        If .Cells(i, j) <> "" Then liste = liste & "," & .Cells(0, j)
    Next
End With
If liste <> "" Then ActiveCell.Validation.Add xlValidateList, Formula1:=Mid(liste, 2)
End Sub
A+
 

Pièces jointes

  • Listes.xlsm
    20.5 KB · Affichages: 12

sebien0077

XLDnaute Nouveau
Bonsoir sebien0077, bienvenue sur XLD,

Même avec des tableaux structurés une solution par formules nécessitera des matricielles.

Et ce ne sera pas simple.

Par contre par VBA ce n'est pas très compliqué, voyez le fichier joint et cette macro dans la 2ème feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Variant, j%, liste$
With [Tableau2].Columns(2)
    .Validation.Delete 'RAZ
    If Intersect(ActiveCell, .Cells) Is Nothing Then Exit Sub
End With
With [Tableau1]
    i = Application.Match(ActiveCell(1, 0), .Columns(1), 0)
    If IsError(i) Then Exit Sub
    For j = 2 To .Columns.Count
        If .Cells(i, j) <> "" Then liste = liste & "," & .Cells(0, j)
    Next
End With
If liste <> "" Then ActiveCell.Validation.Add xlValidateList, Formula1:=Mid(liste, 2)
End Sub
A+
Merci Beaucoup ! ca me convient parfaitement :)
 

Discussions similaires

Réponses
8
Affichages
436

Statistiques des forums

Discussions
312 206
Messages
2 086 222
Membres
103 158
dernier inscrit
laufin