Liste déroulante sous conditions

Bonjour tout le monde
Je fais appel à vos lumières car de mon coté je ne trouve pas la solution
J'ai un fichier Excel (en pièce jointe)

19essai.xlsx (10.67 Ko)

avec:
-un onglet viande avec 3 produits
-un onglet fruits avec 3 produits
-un onglet légumes avec 3 produits
-un onglet liste ou sont listés les noms de mes 3 onglets
-un onglet calcul qui me sert pour mes formules
L'objectif est que lorsque je sélectionne un produit dans la liste en case B1 de l'onglet calcul (Légumes ,Fruits ou Viande), automatiquement en case B2 on me propose la liste des ingrédients correspondant au produit
Si je sélectionne fruits en B1, en B2 j'aurai la liste Pomme, Poires et Cerises qui s'affichera et je sélectionnerai un des ingrédients
D'avance merci pour le ou les retours

Bonjour Ricou70, le forum,

A tester....

30ricou-essai.xlsx (12.97 Ko)

Cordialement,

Bonjour Ricou, xorsankukai,bonjour le forum,

Une proposition VBA avec le code ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TB As Variant 'déclare la variable TB (TaBleau)
Dim L As String 'déclare la variable L (Liste)

If Target.Address <> "$B$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en B1, sort de la procédure
If Target.Value = "" Then 'condition : si B1 est effacée
    With Target.Offset(1, 0) 'prend en compte la cellule B2
        .Validation.Delete 'supprime une éventuelle validation de donnée
        .Value = "" 'efface
        Exit Sub 'sort de la procédure
    End With 'fin de la prise en compte de la celllue B2
Else 'sinon (condition)
    Set O = Worksheets(Target.Value) 'définit l'onglet O
    TB = Application.Transpose(O.Range("A1").CurrentRegion) 'définit le tableau TB
    L = Join(TB, ",") 'définit la liste L
    With Target.Offset(1, 0) 'prend en compte la cellule B2
        .Validation.Delete 'supprime une éventuelle validation de donnée
        .Validation.Add xlValidateList, Formula1:=L 'définit la liste L comme liste de validation de données
        .Select 'sélectionne B2
    End With 'fin de la prise en compte de la celllue B2
End If 'fin de la condition
End Sub

Le fichier :

10ricou-ep-v01.xlsm (18.83 Ko)

@Xorsankukai

J'suis vert !... C'est top !

Merci à vous deux pour les réponses et tout particulièrement à XORSANKUKAI car franchement c'est simple et top
Excuses pour ThauThème mais je vais adopter la solution XORSANKUKAI
Cordialement

Re,

@Xorsankukai

J'suis vert !... C'est top !

Moi c'est quand je vois la qualité de tes codes que je suis vert.....de jalousie !

Quelle aisance et avec les commentaires en bonus !

Respect,

Bonjour XORSANKUKAI
Je reviens à la charge: j'ai validé problème résolu peut être un peu trop vite
J'ai transposé ton principe dans un autre fichier (car celui posté était à titre d'exemple) et cela ne fonctionne pas
Dans le fichier que tu a modifié:
- En case B1 je choisi 'viande' dans le menu déroulant
- Je sélectionne la case B2 puis 'validation des données' puis je double click sur '=INDIRECT($B$1) et cela me dirige dans l'onglet 'viande'
Dans mon fichier:
- En case B1 je choisi 'X' dans le menu déroulant
- Je sélectionne la case B2 puis 'validation des données' puis je double click sur '=INDIRECT($B$1) et cela ne me dirige pas dans l'onglet 'X et j'ai un message d'erreur 'la source est reconnu comme erroné'
J'ai essayé de comprendre ce que je n'ai pas fait, mais je ne trouve pas
J'aurais peut être du ouvrir un nouveau sujet...
D'avance merci pour le retour
Cordialement

Bonjour Ricou70, ThauThème, le forum,

J'ai transposé ton principe dans un autre fichier (car celui posté était à titre d'exemple) et cela ne fonctionne pas

  • Dans chaque onglet, j'ai mis la colonne de données sous forme de tableau structuré.

L'avantage du tableau structuré: les données rajoutées sont prises en compte.

  • J'ai ensuite attribué un nom à la plage de données (sans le titre).

Lorsque tu sélectionne un item de la liste déroulante B1, tu fais appel à cette liste.

  • Pour la cellule B1: clic sur "Données" , "Validation des données", dans " Autoriser" : choisir Liste, dans "source" : =INDIRECT($B$1).

(Bien entendu, il faudra rajouter le nom dans ta liste sur l'onglet "Liste" pour qu'il apparaisse dans la liste déroulante en B1).

Je t'ai mis quelques images pour illustrer mes propos (voir feuilles "Calcul " & "X").

L'avantage de la macro de ThauThème, c'est que tout est automatique, .

8ricou-essai.xlsx (139.78 Ko)

Cordialement,

Merci pour la réponse
Je fais le point de mon coté et te ferai un retour sur mes essais

Cordialement

Un grand merci à toi XORSANKUKAI pour les explications détaillées
Cela fonctionne avec mon fichier, je vais pouvoir continuer à le développer
Cordialement

Rechercher des sujets similaires à "liste deroulante conditions"