XL 2013 Forcer la MAJ de l'affichage d'un menu déroulant lié à un autre

TGO77

XLDnaute Nouveau
Bonjour, 


J'ai un menu déroulant en B2 dont la liste se met à jour en fonction de ce qui est sélectionné dans le menu déroulant en A2, en utilisant la fonction =DECALER($J$2;;EQUIV($A$2;$K$1:$N$1;0);4)
sur la table de correspondance. Ca fonctionne parfaitement. 

Mon problème : lorsque je sélectionne un nouvel item en A2, la cellule du menu en B2 garde affichée l'ancienne sélection. Il faut que je clique sur l'ascenseur pour que la liste se mette à jour. 

Est-ce qu'il existe une fonction pour forcer la mise à jour de l'affichage de la cellule B2 automatiquement ?

Merci
Thierry
 

Pièces jointes

  • test.xlsx
    9.9 KB · Affichages: 35

TGO77

XLDnaute Nouveau
Hello JHA .. merci !! Effectivement ça résous mon problème ...
ma seule crainte .. c'est d'avoir des utilisateurs qui vont penser qu'il n'y a rien à compléter si B2 reste en blanc alors qu'ils ont sélectionné un item en A2 ... :mad: C'est pourquoi je cherchais une astuce de forcer le rafraichissement de la liste:)

Mais s'il n'existe aucun autre moyen .. j'achète ta solution!!!

Thierry
 

job75

XLDnaute Barbatruc
Bonjour TG077, JHA,

Avec une macro c'est beaucoup mieux, le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [A2:B6]) 'à adapter
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each r In r 'si entrées/effacements multiples
  With r(1, 3 - r.Column) 'cellule en colonne B
    If .Offset(, -1) = "" Then
      .Value = ""
    ElseIf Evaluate("NOT(COUNTIF(OFFSET(J2,,MATCH(A" & .Row & ",K1:N1,0),4),B" & .Row & "))") Then
      .Value = "A modifier avec la liste"
    End If
  End With
Next
Application.EnableEvents = True
End Sub
Noter que si l'on tente d'effacer "A modifier avec la liste" ce texte se réécrit .

Fichier joint.

A+
 

Pièces jointes

  • MFC + alerte VBA(1).xlsm
    23.1 KB · Affichages: 30
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Une variante qui peut être très utile : les listes de validation et la MFC sont définies sur les colonnes entières.

Cela évite d'avoir à modifier la référence de la plage étudiée.

La macro adaptée :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Range("A2:B" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each r In r 'si entrées/effacements multiples
  With r(1, 3 - r.Column) 'cellule en colonne B
    If .Offset(, -1) = "" Then
      .Value = ""
    ElseIf Evaluate("NOT(COUNTIF(OFFSET(J2,,MATCH(A" & .Row & ",K1:N1,0),4),B" & .Row & "))") Then
      .Value = "A modifier avec la liste"
    End If
  End With
Next
Application.EnableEvents = True
End Sub
Fichier (2).

A+
 

Pièces jointes

  • MFC + alerte VBA(2).xlsm
    23.8 KB · Affichages: 25
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87