Sélection automatique liste déroulante en cascade

Bonjour,

J'ai une liste déroulante en cascade qui dépend d'une condition, et quand la condition change, le menu déroulant change bel et bien pour le nouveau que j'ai affecté, mais j'ai toujours la dernière sélection d'affichée dans ma cellule.

Voici ma situation : En D9, j'ai entré dans ma source =SI(D10="a";Menu_1;SI(D10="b";Menu_2;Menu_3))

Où Menu_1, Menu_2 et Menu_3 sont les noms de différentes listes déroulantes.

En D10, j'ai une liste qui contient les éléments "a", "b" et "c".

Admettons que j'ai sélectionné la valeur "bleu" de mon Menu_1 (D10="a") et que je change D10="b". Le menu déroulant 2 remplace le menu déroulant 1 dans D9, mais j'ai toujours la valeur "bleu" d'affichée. Je voudrais voir afficher une des valeurs de mon Menu 2 à la place (la première préférablement). J'aimerais que cette première sélection s'applique à chaque fois que mon menu déroulant dans D9 change (que ce soit Menu_1, Menu_2 ou Menu_3).

Merci

bonjour

il te faut un code vba de reinitialisation

1) ouvrir l'editeur VBA touches Alt et F11

2)sous vba project : 2 clics sur le nom de la feuille

3) a general : choisir worksheet

il apparait un truc Private ......selection change ........ End sub

entre private et end sub tu saisis

if activecell= range("d9") then

range("celle que veux").clearcontent

end if

ainsi achaque fois que tu vas selectionner la cell D9 ;celle de la cascade (qui garde le resultat du choix precedent ) va s'effacer

rassure toi ,ça ne fusille pas ta cascade

n'oublie pas les " " a range (

cordialement

il y aura plus pro ;mais j'y connais rien en vba

Merci pour la réponse!

Le code semble arrêter à la partie Range("d9").ClearContent

J'ai remplacé "celle que veux" par "d9" (je veux retirer la valeur en D9), était-ce la bonne chose à faire?

J'imagine que ce code ne sélectionne pas un élément de ma nouvelle liste, y a-t-il un moyen de le faire?

Bonsoir,

Si en D9 se trouve la liste dépendante du choix en D10, voilà la procédure qu'il te faut placer dans le module de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$10" Then Me.Range("D9").ClearContents
End Sub

Si tu as d'autres dépendances, il faudrait le signaler car c'est dans la même procédure que ça doit se régler...

Cordialement.

Salut à Tulipe !

Bonsoir MFerrand,

J'ai copié ton code, mais Excel indique une erreur de syntaxe...

Tu as copié mon code où ?

Et quelle erreur ? Car je n'en vois pas dans mon code !

J'ai cliqué sur l'onglet de ma feuille et j'ai fait Alt+F11, et dans la page (Général) j'ai copié collé ceci:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$D$10" Then Me.Range("D9").ClearContents

End Sub

Ensuite, j'enregistre, je ferme et quand je change ma liste en D10, j'obtiens un message d'erreur qui dis :

Erreur de compilation : Erreur de syntaxe

Alt+F11 permet d'accéder à l'éditeur. C'est en cliquant droit sur l'onglet de feuille et en choisissant Visualiser le code qu'on accède directement au module de la feuille où l'on a cliqué.

Général se trouve dans la liste déroulante de gauche de tout module, il convient donc de savoir dans quel module tu as collé la macro, et si c'est bien le module de la feuille dans laquelle tu dois l'avoir.

Si tu as une erreur de compilation, c'est que tu as loupé quelque chose en copiant, ou que la copie ne s'est pas correctement déroulée. Tu effaces et tu recommences ! Si cela persiste, tu effaces, tu cliques sur Worksheet dans la liste déroulante gauche, puis tu vas chercher l'évènement Change dans la liste déroulante droite (tu peux effacer la déclaration de la proc. SelectionChange qui ne servira pas). Dans la ligne entre Sub et End Sub de Change, tu tapes la ligne de commande (sans erreur)...

Cordialement.

Je crois que mon erreur provenait de la première ligne Private Sub...

Ça marche! Merci beaucoup!

Peut-on sélectionner un élément du nouveau menu automatiquement en plus, ou c'est impossible?

Si ta liste est nommée, tu remplaces : Me.Range("D9").ClearContents par :

....... Me.Range("D9") = [NomListe].Cells(1, 1)

Là je vais un peu vite , il s'agit d'une liste dépendante, il faut donc l'identifier avant...

C'est exactement ce qu'il me faut!

Par contre, puisque c'est une liste en cascade en D9, je ne peut pas entrer seulement une liste dans [NomListe], parce que seule une de mes trois listes sera remplacée...

Je le ferais volontiers par moi-même si j'y comprenais quelque chose mais je ne connais rien à ça.

Suffit-il de remplacer NomListe par la source? (mon Excel est en français, je travaille avec SI() et DECALER() et non IF() et OFFSET())

Il faut que je vois ta configuration de sélection des listes... Le code opèrera de la même façon mais transposée en VBA.

=SI($D$10="Point dans x";x;SI($D$10="Point dans x'";x_prime;ct_prime))

C'est la source de D9, avec mes trois listes : x, x_prime et ct_prime

x

x_prime

ct_prime

sont tes noms de listes ?

Oui

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lst$
    If Target.Address = "$D$10" Then
        Select Case Target.Value
            Case "Point dans x": lst = "x"
            Case "Point dans x'": lst = "x_prime"
            Case Else: lst = "ct_prime"
        End Select
        Me.Range("D9") = Range(lst).Cells(1, 1)
    End If
End Sub

Encore une erreur, il y a quelque chose que je dois faire mal. Pourtant, je fais copié-collé, c'est pas une erreur de transcription du code!

Je te fais parvenir des photos de mon écran.

vba 1 vba 2

J'ai déjà eu un tel cas il y a quelques temps... Pas d'explication, le code est bon (du moins les caractères visibles), on ne peut donc que penser que la copie incorpore un élément qui ne convient pas...

Comment tu opères pour copier ? (Clic sur TOUT SELECTIONNER, ou autrement)

Refaire l'opération ou taper le code, je n'ai pas d'autre solution à cet écueil.

Ça marche!!!

Excel aime pas pour une raison étrange que les lignes ne soient pas situées au même niveau (tes lignes étaient décalées les unes par rapport aux autres). C'est incompréhensible, mais l'important c'est que ça marche!

Merci énormément pour ton aide!

Cordialement,

Dek

Excel aime pas pour une raison étrange que les lignes ne soient pas situées au même niveau (tes lignes étaient décalées les unes par rapport aux autres).

Sûrement pas, le bon code est toujours indenté ! Il y a peut-être un problème avec la copie des tabulations, si je retombe sur le problème, j'essaierai de creuser (mais je ne l'ai jamais eu dans mes copies !)

Rechercher des sujets similaires à "selection automatique liste deroulante cascade"