XL 2010 Apparition d'une liste déroulante uniquement selon la valeur d'une autre cellule

rosabelle

XLDnaute Junior
Bonjour,

Je fais appel à vous une fois encore.

Est-il possible de faire en sorte qu'une liste déroulante ne s'affiche dans une cellule de la colonne B que si dans une autre cellule adjacente dans la colonne A la date 01/01/1976 se présente?
Je précise que cette date 01/01/1976 est le résultat d'une formule et ne se présente pas toujours dans la même cellule de la colonne A.

Je joins un fichier qui sera je l'espère plus parlant.

Merci par avance pour votre aide
 

Pièces jointes

  • TEST LISTE DEROULANTE UNIQUEMENT SI RENCONTRE DATE 01 01 1976.xlsx
    22.8 KB · Affichages: 8
Solution
En VBA c'est très simple, le code de la feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[B:B].Validation.Delete 'RAZ
If ActiveCell.Column = 2 Then If ActiveCell(1, 0) = CDate("1/1/1976") Then _
    ActiveCell.Validation.Add xlValidateList, Formula1:="10,2,12,56,14,47"
End Sub
Bonne nuit.

GALOUGALOU

XLDnaute Accro
re rosabelle, bonsoir le forum
je ne sais pas faire mais votre problématique m'a amusé.
je me suis servi de l'enregistreur de macro et voila ce que cela a donné.
pour poser la liste déroulante (bien sûr il faut adapter le contenu de votre liste)
VB:
Sub Macro2()
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="10,1,2,3,4,5,6"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
pour enlever la liste déroulante
Code:
Sub Macro3()

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub
donc avec cela, ma solution,( avec en cellule D1 la date du 01/01/1976)
Code:
Sub Macro1()
Dim dl As Integer, i As Integer
fin = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To fin
If Cells(i, 1) = Range("d1") Then Cells(i, 2).Select: Macro2
If Cells(i, 1) <> Range("d1") Then Cells(i, 2).Select: Macro3
Next
End Sub

un début de solution en attendant qu'un ténor d'xld vous apporte une solution plus propre
cdt
galougalou
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir @rosabelle

Une astuce : créer 2 noms définis
  • Un pour la plage des Taux (par exemple Plage_Tx)
  • Un qui change en fonction de la valeur en A sur la même ligne (par exemple _Check)​
Si tu es en B2 la définition est =SI($A2=date(1976;1;1);3;0)
attention adresse mixte $A absolu 2 relatif
Renvoie 3 si la date en A est 01/01/1976 et sinon 0.​
Sélectionne tes cellules concernées et dans validation choisis Liste puis dans la barre de saisie tape :​
=DECALER(Plage_Tx;0;0;_Check;1)
Tu vas recevoir un avertissement d'erreur, normal la formule ne renvoie pas toujours une plage, clique sur Oui.​
Voilà c'est gagné​
Petit bémol la flèche de la combobox s'affiche même si la liste est vide, on ne peut pas tout avoir surtout sans macro.​
Je te joins un fichier avec explications.​
Bon courage​
Alain​
 

Pièces jointes

  • Classeur1.xlsx
    45.4 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonsoir à tous,

Liste de validation en B2 à copier-coller sur B2:B1048576 :
Code:
=DECALER($E$13;;;6*($A2=DATEVAL("1/1/1976")))
Inconvénient : la flèche apparaît sur toutes les cellules même quand la liste n'existe pas.

A+
 

Pièces jointes

  • Liste de validation(1).xlsx
    12.7 KB · Affichages: 6

rosabelle

XLDnaute Junior
Bonsoir,
D'hors et déjà merci beaucoup pour la promptitude de vos réponses.
Je les regarderai demain matin avec la plus grande attention.
Bien sûr pour quelqu'un comme moi c'est plus facile (enfin c'est vite dit) de comprendre les formules d'autant plus que cette situation de choix multiple pour certaines années peut se reproduire.
Dommage que la flèche apparaisse dans toutes les cellules....
A demain
Bonne soirée à vous
 

job75

XLDnaute Barbatruc
En VBA c'est très simple, le code de la feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[B:B].Validation.Delete 'RAZ
If ActiveCell.Column = 2 Then If ActiveCell(1, 0) = CDate("1/1/1976") Then _
    ActiveCell.Validation.Add xlValidateList, Formula1:="10,2,12,56,14,47"
End Sub
Bonne nuit.
 

Pièces jointes

  • VBA Liste de validation(1).xlsm
    29.9 KB · Affichages: 11

rosabelle

XLDnaute Junior
Bonjour à tous,

Après avoir regardé vos différentes propositions je pense que celle de Job75 est la plus adaptée à mon fichier même si au départ je préférais une formule. La présence de la flèche me gêne et par ailleurs la formule complique les choses pour moi car il aurait fallu l'ajouter aux formules déjà présentes.
Je ne sais combien vous remercier tous une fois encore.
Bon weekend
 

Discussions similaires

Réponses
12
Affichages
291