Actualisation de listes déroulantes

Bonjour,

Je cherche à effectuer une actualisation de listes déroulantes, avec la 2éme qui n'offre plus le choix de la 1ere, la 3éme qui n'offre plus le choix des 2 premiéres...

J'ai fait une macro qui fonctionne, mais mon probléme est que je ne peux pas actionner 2 listes déroulantes sans que çà se bloque.

Et je suis obligé de fermer et réouvrir le fichier pour que çà refonctionne.

Voilà le fichier.

Merci

Bonjour,

Il y a aussi çà qui apparait, c'est bizarre.

image

Bonjour Fronck, bonjour le forum,

Une autre méthode (à développer pour les autres listes de validation de données) qui n'utilise que la plage nommée Nom :

Actualisation1:
TV= Worksheets("Liste").Range("Nom")
For I = 1 To UBound(TV, 1)
    If Not TV(I, 1) = "Choisir" And Not TV(I, 1) = Target.Value Then
        L = IIf(L = "", TV(I, 1) & ",", L & TV(I, 1) & ",")
    End If
Next I
With Target.Offset(3, 0).Validation
    .Delete
    .Add xlValidateList, Formula1:=L
End With

Bonjour Thauthéme,

Cà marche aussi, mais çà bloque dés que tu as fait une liste déroulante.

Tu peux plus faire la 2éme.

Bonjour

Une version PowerQuery + VBA

Bonjour,

ci-jointe autre proposition

Bonjour à tous,

Merci Chris et Thev pour vos réponses, les 2 solutions fonctionnent.

La solution avec power query m'étonne, même si elle est un peu plus lente du fait du lancement de PQ à chaque liste.

image

Pour moi PQ c'était du manuel, donc là la LD est automatisée avec çà :

    If Jour <> "" Then [Dispo].ListObject.QueryTable.Refresh 'MAJ table dispo

Mais par exemple comment on en arrive là pour le poste 2 de lundi ?

image

Voici mes remarques sur le (peu de) code :

image

Pour la solution de Thev, j'ai compris le process mais une bonne partie du code m'est étranger et j'ai mis mes remarques et questions dans le code.

Merci à vous 2

j'ai mis mes remarques et questions dans le code.
ci-jointe réponse :

Bonjour à tous

Code commenté

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [Data]) Is Nothing Then Exit Sub 'si clic en dehors de la plage nommée DATA, sortie
    If Left([Poste], 5) <> "Poste" Then Exit Sub ' si clic en dehors d'une liste déroulante (postion détectée par le plage nommée Poste), sortie
    Post = [Poste].Value 'récupération du poste lié à la liste modifiée
    If Not Intersect(Target, [LUNDI]) Is Nothing Then 'test de la plage jour concernée
        Jour = "LUNDI"
        ElseIf Not Intersect(Target, [MARDI]) Is Nothing Then
            Jour = "MARDI"
        ElseIf Not Intersect(Target, [MERCREDI]) Is Nothing Then
            Jour = "MERCREDI"
        ElseIf Not Intersect(Target, [JEUDI]) Is Nothing Then
            Jour = "JEUDI"
        ElseIf Not Intersect(Target, [VENDREDI]) Is Nothing Then
            Jour = "VENDREDI"
    End If
    If Jour <> "" Then [Dispo].ListObject.QueryTable.Refresh 'actualisation de la requête listant les dispos

End Sub
Mais par exemple comment on en arrive là pour le poste 2 de lundi ? image

Voir la formule nommée Dispos

Ici les formules nommées sont le clé

Bonjour,

Merci. Pour terminer:

@Chris

Voir la formule nommée Dispos

Elle est ou cette formule ?

@Thev

For i = 1 To .Areas.Count 'c'est déterminé ou ou comment les 4 postes en Areas ?

Merci

RE

Les formules nommées sont toujours dans le gestionnaire de noms... Onglet Formules

A noter que les formules sans $ sont interprétées selon la cellule active

@Thev

For i = 1 To .Areas.Count 'c'est déterminé ou ou comment les 4 postes en Areas ?

Merci

Chaque référence de jour est composée de 4 cellules discontinues.

Par exemple, la référence de nom : lundi_sélection = =Sélection!$D$4;Sélection!$D$7;Sélection!$I$4;Sélection!$I$7 fait référence aux cellules D4,D7,I4,I7 de la feuille Sélection. Ces cellules étant discontinues, lundi_sélection est donc divisé en 4 "Areas", car une "Area" correspond à une plage de cellules continues.

Rechercher des sujets similaires à "actualisation listes deroulantes"