XL 2013 Selon valeur de la cellule, enclencher une liste de validation spécifique

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

je suis à la recherche d'un moyen me permettant, selon la valeur de la cellule, d'enclencher une liste de validation plutôt qu'une autre.
Pour faire simple, dans mon tableau de saisie,
je choisis pour la colonne "Support" un item via une liste de validation
puis
je choisis pour la colonne "Activité" un item via une autre liste de validation

Dans ma colonne "Support", il y a tout un tas de valeurs et une entrée "Autre"
J'aimerais que quand en colonne "Support" la valeur "Autre" est sélectionnée, alors en colonne "Activité" soit proposée la liste figurant en "TableFraisGeneraux"
Sinon (i.e. pas "Autre") alors la liste provienne de TableActivités

J'ai bien pensé au début ne proposer qu'une seule liste mais cela laisse le risque qu'on sélectionne des éléments incompatibles,
du type Support = moteur et Activité = téléphone (alors que Activité = téléphone ne devrait être sélectionnable qu'avec Support = "Autre")

Quelqu'un a-t-il une idée comment enclencher l'une plutôt que l'autre liste ?
(en pièce jointe, en onglet "Saisie" un extrait ultra-simplifié du tableau)

Merci d'avance pour votre aide
 

Pièces jointes

  • Question_forum_23022016.xlsm
    17.8 KB · Affichages: 31

job75

XLDnaute Barbatruc
Re : Selon valeur de la cellule, enclencher une liste de validation spécifique

Bonjour Sebast,

Sélectionner B2:B4 => Validation des données => =SI($A2="Autre";FraisGeneraux;Activites)

Attention, pas de $ devant le 2...

Et il n'est pas inutile de compléter par cette petite macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [Tableau4].Columns(1))
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées/effacements multiples
  If r = "" Or r = "Autre" Then r(1, 2) = ""
Next
End Sub
Fichier joint.

Edit: salut djidji59430.

Bonne soirée.
 

Pièces jointes

  • Question_forum_23022016(1).xlsm
    26.5 KB · Affichages: 26
Dernière édition:

Sebast

XLDnaute Impliqué
Re : Selon valeur de la cellule, enclencher une liste de validation spécifique

Bonsoir à tous les deux et merci pour vos propositions

Djidji59430 : marche impeccable, j'apprends en te lisant qu'on peut "paramétrer" les listes, ça ouvre évidemment beaucoup de possibilités.


job75 : marche également parfaitement, La macro événementielle est effectivement utile mais pour être complet, elle laisse la sélection précédente intacte en colonne B quand il ne s'agit pas de "Autre" en colonne A.
Ex : en colonne A2 tu sélectionnes "Autres" donc cellule B2 se vide pour laisser le choix parmi la bonne liste , mettons "Communication"; mais si dans cette cellule A2 tu sélectionnes ensuite "Moteur" alors B2 ne se vide pas et le risque est de voir affiché à tort "Moteur" associé à "Communication" (resté en l'état).

Mais ça reste un détail au vu de mon besoin initial

Un grand merci à vous deux et bonne soirée
 

job75

XLDnaute Barbatruc
Re : Selon valeur de la cellule, enclencher une liste de validation spécifique

Re,

mais si dans cette cellule A2 tu sélectionnes ensuite "Moteur" alors B2 ne se vide pas et le risque est de voir affiché à tort "Moteur" associé à "Communication" (resté en l'état).

Mais ça reste un détail au vu de mon besoin initial

Avec 427 posts vous avez dû voir (et comprendre) du VBA plus compliqué non ? Mais puisque vous y tenez :

Code:
For Each r In r 'si entrées/effacements multiples
  r(1, 2) = ""
Next
A+
 

Sebast

XLDnaute Impliqué
Re : Selon valeur de la cellule, enclencher une liste de validation spécifique

Bonjour job75,

on ne s'est pas compris : c'était juste une remarque, au cas où d'autres voudraient s'inspirer de ce cas. Je n'ai d'ailleurs pas sollicité de correction sur ce point car j'ai de moi-même rectifié.

Encore merci
 

job75

XLDnaute Barbatruc
Re : Selon valeur de la cellule, enclencher une liste de validation spécifique

Bonjour Sebast, le forum,

D'accord et puisque vous effacez systématiquement il est mieux d'écrire :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [Tableau4].Columns(1))
If Not r Is Nothing Then Intersect(r.EntireRow, r(1, 2).EntireColumn) = ""
End Sub
Bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 314
Membres
103 176
dernier inscrit
jean.yvesjean.yves