Apparition d'une liste déroulante ou non selon la valeur d'une cellule

Bonjour , je voudrais conditionner l'apparition d'une liste déroulante dans une cellule selon la valeur d'une autre cellule.

je m'explique, si la cellule D3 est différente de "" (rien), alors la liste déroulante (lieudea) apparait en E3, dans le cas contraire je voudrais que la liste déroulante ainsi que la valeur disparaissent de la cellule E3.

J'ai donc utilisé cette formule dans la validation des données de la cellule E3 : =IF(D3<>"";Lieudea;"")

Lorsque la valeur de la cellule D3 est différente de "" (rien) alors la liste déroulante s'affiche correctement dans la cellule E3 ,

image

mais lorsque la valeur est égale à "" (rien), la dernière valeur s'étant affichée reste dans la cellule E3 et la flèche de la liste déroulante aussi.

image

Comment faire ou quelle est l'écriture de la formule pour que lorsque la valeur de la cellule D3 est égale à "" (rien), il n'apparaisse plus aucune valeur dans la cellule E3 et plus de flèche de liste déroulante?

Merci pour votre aide

Bonjour et bienvenue,

Malheureusement, on ne peut pas tout mélanger : les cellules avec liste déroulante dans lesquelles vous entrez une valeur... ne peuvent pas être modifiées par une fonction. Il faudrait que la fonction soit dans la cellule. Or si c'est le cas, vous ne pouvez pas entrer une valeur...

C'est donc uniquement possible via VBA.

Mais une solution simple sans VBA est de simplement regarder si les deux cellules D3 et E3 ont des valeurs "possibles" et ensuite faire votre calcul.

re-Bonjour,

Merci pour votre réponse, ce n'est que en fonction de la présence ou non d'une valeur dans la cellule D3 que j'aimerais conditionner la présence ou l'absence de la liste déroulante dans la cellule E3, effectivement la solution simple sans VBA me parait compromise.

Je n'ai aucune notion de VBA mais je vais essayer de m'y atteler.

Merci encore pour votre aide

Bonjour,

Saboh12617 vous l'a écrit, ce n'est pas possible en liste de validation mais il existe une autre "semi" solution sans VBA

Si vous voulez que la valeur dans la liste ne soit pas visible lorsque D3 est vide, vous pouvez créer votre liste via la boite à outils Formulaire disponible dans le menu Developpeur -> Insérer contrôle de formulaire et choisir "Zone de liste déroulante"
Une fois créée, clic droite et allez dans "Format de contrôle" pour définir votre plage et la cellule liée D3

Par contre la flèche de liste déroulante restera visible mais aucune valeur ne sera vue si D3 est vide.

Un petit exemple des possibilités dans le fichier réalisé par Amadéus --> https://forum.excel-pratique.com/s/goto/64429

Bien entendu ce sera un objet sur votre feuille ce qui n'est pas toujours idéal et cela reste une "demi" solution.

Cordialement

Bonjour,

Je viens de l'essayer, mais la valeur de la cellule D3 ne peut être figée et j'ai toujours la possibilité de faire un choix dans la liste déroulante qui conditionne alors la valeur de la cellule D3 (1,2,3,4 ou 5) selon mon choix dans cette liste, ce que je ne souhaite pas.

Merci pour votre aide

Cordialement

re

Alors vous devez passer par un code VBA.

Si on considère que la valeur D3 est entrée via votre clavier vous pouvez faire ceci

- Clic droite sur l'onglet concerné par votre demande
- Choisir l'option "Visualiser le code"
- Dans la fenêtre collez le code ci-dessous

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D3")) Is Nothing Then
    With Target
        If .Value = "" Then
            Range("E3").Validation.Delete
        Else:
            With Range("E3").Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=lieudea"
                .ErrorMessage = "Veuillez choisir uniquement dans la liste !"
            End With
        End If
    End With
End If
End Sub

- enregistrez votre fichier avec l'extension XLSM (pour accepeter l'utilisation des macros)

Pour le test : changez la valeur de D3

NB : cela suppose que D3 n'est pas le résultat d'une formule

Crdlt

Re,

Merci pour le code, cela fonctionne quand la valeur de D3 est saisie manuellement, existe-t'il une solution si D3 est le résultat d'une formule ? (ce qui est le cas malheureusement dans ma feuille).

voici la formule dans D3 :

=IF(AND(I1="FR";OR(B3="Da";B3="Ea";B3="DDa"));"Lieu Da/Ea/DDA";IF(AND(I1="DE";OR(B3="ZE";B3="ZV";B3="VZZE"));"Ort ZE/ZV/VZZE";""))

Merci pour votre aide et votre patience

re

Donc vous entrez une valeur en B3 manuellement ?

Re,

non c'est le choix d'une liste déroulante conditionnée:

image

re

heu je ne comprends plus rien là

Vous parliez de E3 qui a une liste de validation en fonction de la valeur trouvée en D3 (donc vide ou pas)
Votre formule mentionne deux valeurs I1 et B3. Si ces deux cellules ont une valeur, D3 prend la valeur mise dans la formule

Donc merci d'expliquer ce que vous faites.


EDIT :

Essayez le code comme ceci plutôt

Option explicit
Private Sub Worksheet_Calculate()

With Range("D3")
    If .Value = "" Then
        With Range("E3")
            .Value = vbNullString
            .Validation.Delete
        End With
    Else:
        With Range("E3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Lieudea"
            .ErrorMessage = "Veuillez choisir uniquement dans la liste !"
        End With
    End If
End With
End Sub

Si ok et terminé pensez à cloturer le fil lors de votre réponse

Si ton problème est résolu, n'oublie pas de marquer les posts qui ont permis de résoudre le problème à l'aide du bouton

Crdlt

re

la valeur de D3 est conditionnée à la formule si dessous inscrite dans la cellule:

=IF(AND(I1="FR";OR(B3="Da";B3="Ea";B3="DDa"));"Lieu Da/Ea/DDA";IF(AND(I1="DE";OR(B3="ZE";B3="ZV";B3="VZZE"));"Ort ZE/ZV/VZZE";""))

les valeurs de B3 et I1 sont conditionnées chacune par une validation de donnée:

image image

Vous m'avez rendu attentif en écrivant ceci :

NB : cela suppose que D3 n'est pas le résultat d'une formule

ma question est la suivante , comme la valeur de D3 est le résultat d'une formule , est-il possible d'écrire un code dans VBA qui donnerait le même résultat que si on entrait une valeur saisie manuellement dans D3 ?

Re

le code que je vous ai donné dans mon post précédent devrait fonctionner
Il sera exécuté à chaque fois que la valeur de D3 est changée

Là je pense que pendant que vous écriviez vous n'avez as vu que j'ai édité mon post

re

J'ai effectivement changé le code, le soucis maintenant c'est qu'à chaque changement de la valeur de I1, Excel se ferme automatiquement .

re

Je suis obligé de me rendre en réunion, je reprendrai le fil de notre conversation dès que possible,

Merci énormément pour votre aide et votre collaboration

Cordialement

Re

....à chaque changement de la valeur de I1, Excel se ferme automatiquement .

Remplacez tout pour le code ci-dessous :

Option explicit
Dim stpevt As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If stpevt = True Then Exit Sub
With Range("D3")
    If .Value = "" Then
        With Range("E3")
            stpevt = True
            .Value = vbNullString
            .Validation.Delete
        End With
    Else:
        With Range("E3").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Lieudea"
            .ErrorMessage = "Veuillez choisir uniquement dans la liste !"
        End With
    End If
End With
stpevt = False
End Sub

Désolé mais sans le fichier on y va a toujours un peu par tâtonnement

Bonjour,

le code marche à merveille !!! Merci encore pour votre précieuse aide

Cordialement

Rechercher des sujets similaires à "apparition liste deroulante valeur"