Menu déroulant VS Si
Fermé
vemcnico
-
24 avril 2017 à 21:09
via55 Messages postés 14494 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 octobre 2024 - 26 avril 2017 à 20:05
via55 Messages postés 14494 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 26 octobre 2024 - 26 avril 2017 à 20:05
A voir également:
- Menu déroulant VS Si
- Menu déroulant excel - Guide
- Excel menu déroulant en cascade - Guide
- Udp vs tcp - Guide
- Menu déroulant google sheet - Accueil - Guide bureautique
- Windows 11 menu démarrer classique - Guide
5 réponses
via55
Messages postés
14494
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 octobre 2024
2 734
24 avril 2017 à 21:52
24 avril 2017 à 21:52
Bonsoir,
tu peux ne le faire que par une macro
ALT + F11 pour ouvrir l'éditeur VBA
Double clic sur la feuille concernée par cette manip dans l'arborescence de gauche
Copier-coller la macro suivante dans la page et fermer l'éditeur
Cdlmnt
Via
tu peux ne le faire que par une macro
ALT + F11 pour ouvrir l'éditeur VBA
Double clic sur la feuille concernée par cette manip dans l'arborescence de gauche
Copier-coller la macro suivante dans la page et fermer l'éditeur
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G8")) Is Nothing Then Range("D21").Select With Selection.Validation .Delete If Target.Value = "Externe" Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Firme" Else .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween End If End With End If End Sub
Cdlmnt
Via
Bonjour, Merci énormément, ça fonctionne. Par contre, j'ai essayé de faire la même chose pour un autre champ (D22) qui celui-ci affiche le menu déroulant indirect à D21. Voici ce que j'ai essayé de faire, et ca marche pas. En fait quand c'était EXTERNE en G8, il faut le menu déroulant "Firme" en D21 et le menu déroulant INDIRECT(D21) en D22.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G8")) Is Nothing Then
Range("D21").Select
With Selection.Validation
.Delete
If Target.Value = "Externe" Then
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Firme"
Else
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
End If
End With
End If
If Not Intersect(Target, Range("G8")) Is Nothing Then
Range("D22").Select
With Selection.Validation
.Delete
If Target.Value = "Externe" Then
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(D21)"
Else
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
End If
End With
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G8")) Is Nothing Then
Range("D21").Select
With Selection.Validation
.Delete
If Target.Value = "Externe" Then
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Firme"
Else
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
End If
End With
End If
If Not Intersect(Target, Range("G8")) Is Nothing Then
Range("D22").Select
With Selection.Validation
.Delete
If Target.Value = "Externe" Then
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(D21)"
Else
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
End If
End With
End If
End Sub
via55
Messages postés
14494
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 octobre 2024
2 734
26 avril 2017 à 18:27
26 avril 2017 à 18:27
Bonjour
Il faut que le placement de la formule INDIRECT se fasse quand D21 contient une valeur valide, donc au choix dans la liste déroulante en D21
Essaie plutôt quelque chose comme :
Cdlmnt
Via
Il faut que le placement de la formule INDIRECT se fasse quand D21 contient une valeur valide, donc au choix dans la liste déroulante en D21
Essaie plutôt quelque chose comme :
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G8")) Is Nothing Then Range("D21").Select With Selection.Validation .Delete If Target.Value = "Externe" Then .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Firme" Else .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween End If End With Exit Sub End If If Not Intersect(Target, Range("D21")) Is Nothing And Range("G8") = "Externe" Then Range("D22").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=INDIRECT(D21)" End With End If If Not Intersect(Target, Range("D21")) Is Nothing And Range("G8") = "Interne" Then Range("D22").Select With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween End With End If
Cdlmnt
Via
Merci ça fonctionne. Par contre si j'efface la valeur de D21 (ma firme) en premier, il me met un bug tout de suite.
Je pourrais peut-être rajouter une fonction au changement de valeur G8, cleaner tous les champs de valeurs (D21 et D22) ?!
Je pourrais peut-être rajouter une fonction au changement de valeur G8, cleaner tous les champs de valeurs (D21 et D22) ?!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
via55
Messages postés
14494
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
26 octobre 2024
2 734
26 avril 2017 à 20:05
26 avril 2017 à 20:05
Re,
Oui mais de toutes façons il faut shunter la Private Sub Worksheet_Change lorsque D21 ou D22 devient vide en mettant en début de Sub :
If Range("D21") = "" or Range("D22") = "" Then Exit Sub
Oui mais de toutes façons il faut shunter la Private Sub Worksheet_Change lorsque D21 ou D22 devient vide en mettant en début de Sub :
If Range("D21") = "" or Range("D22") = "" Then Exit Sub