Excel : listes déroulantes conditionnelles.

Résolu/Fermé
Cathozie - 10 oct. 2011 à 00:10
 Cathozie - 10 oct. 2011 à 20:00
Bonjour,

En lisant le forum, j'ai bien trouvé une partie de la solution à mon souci, mais il me manque quelque chose.

En effet, j'ai réussi à imbriquer mes listes déroulantes, c'est-à-dire que lorsque je sélectionne un fournisseur dans mon bon de commande, les produits disponibles sont bien ceux de mon fournisseur.

Par contre, dans ce bon de commande, j'ai également des fonctions de recherchev qui doivent m'afficher la référence et le prix du produit, mais certains produits étant identiques chez plusieurs fournisseurs (mais pas les prix ni les références), j'ai un affichage erroné.

Je ne comprends pas comment faire pour que cela n'arrive pas.

Merci beaucoup de votre aide.

Cath

4 réponses

Mytå Messages postés 2969 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 920
Modifié par Mytå le 10/10/2011 à 00:30
Salut le forum

Tu pourrais utiliser un SOMMEPROD
=SOMMEPROD((Col_Fournisseur=Fournisseur)*(Col_Prod=Prod)*Col_Prix)

Mytå
Quelle prétention de prétendre que l'informatique est récente
Adam et Eve avaient déjà un Apple ! [MsProject 2003(FR), Excel 2003-2007(FR)]
0
Hello et merci de ta réponse,

Je ne comprends pas cette formule et du coup, je ne sais pas où il faudrait la placer.

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
Modifié par Vaucluse le 10/10/2011 à 12:48
Bonjour
si chaque produit à sa référence spécifique, un RECHERCHEV devrait permettre de traiter le problème sans parler du fournisseur, en plaçant la liste des références dans la 1° colonne du champ de recherche,non?
crdlmnt
Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique?
0
Hello, et merci de ta réponse,

Le problème est que j'opère ma recherchev sur le nom du produit parce que je n'ai pas la référence de tous les produits selon les fournisseurs. C'est pourquoi j'avais préféré la liste déroulante conditionnelle pour choisir le nom du produit.

Dans mon exemple, je peux commander ma bière chez France-Boissons ou Promocash, les prix sont différents pour le même produit. Quand je choisis dans ma première liste déroulante France-Boissons, cela me donne une liste des produits de chez France-Boissons dans la colonne désignation du produit.

Mais dans mes colonnes conditionnement, référence et prix, ça me choisit le prix de Promocash et pas de référence (puisque je ne la connais pas).

S'il faut organiser mes fonctions de recherches d'une autre manière, je ne vois pas trop comment pour le moment.

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
Modifié par Vaucluse le 10/10/2011 à 14:51
Ok,
alors la solution de Mita devrait convenir pour avoir le prix, en choisissant selon le fournisseur et le produit.
mais ne marche que si dans votre base de données,vous avez le nom du fournisseur sur toutes les lignes produits sans exception

Soir pour l'exemple:

base de données sur feuil1
_votre liste de fournisseur de A1 à A1000
_votre liste de produits en Feuil1 de B1à B1000
_votre liste de prix de C1 à C1000

toutes les cellules de A ont un nom de fournisseur en face du produit en B

dans la feuille d'édition, feuil2
en A2; la liste de choix du fournisseur
en B2 la liste de choix du produit en conséquence
en C2 la formule:
=SOMMEPROD(('Feuil1'!$A$1:$A$1000=A1)*('Feuil1'!$B$1:$B$1000=B1)*($C$1:$C$1000))
vous donnera la valeur de C correspondante au fournisseur et au produit choisit.

Note:
1°)marche uniquement si les deux conditions groupées sont présentes une seule fois dans les listes, sinon, donne le total des identiques.
2°) cette formule ne fonctionne que pour ressortir des valeurs num et ne peut pas, par exemple, éditer des références si elles ne sont pas numériques.

Revenez si quelques soucis, n'hésitez pas.



bonne chance

crdlmnt
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
10 oct. 2011 à 14:58
... suite avec une autre option, les contraintes sont les mêmes, mais celle ci peut ressortir les références si elles ne sont pas num:
avec les mêmes données que message précédent:
=INDEX('feuil1'!$C:$C;EQUIV($A1&$B1;'feuil1'!$A:$A&'feuil1'!$B:$B;0))
cette formule est matricielle et doit être entrée avec la touche enter en maintenant les touches ctrl et shift enfoncées.
(elle doit se retrouver automatiquement entre accolades dans la barre de formule.
Vous pouvez éditer ainsi n'importe quel champ de votre base de données en modifiant le champ de INDEX($C:$C dans l'exemple)
attention aux blocages $ si vous copiez la formule.
crdlmnt
0
Ahhhh ! Merci, merci, merci !

Et merci aussi à Mytå qui a parlé de la SOMMEPROD.

Ta première proposition fonctionne parfaitement et j'ai réglé le problème de la référence qui m'affiche un 0 par une mise en forme conditionnelle, comme ça, quand j'aurai les références, elles réapparaîtront toute seules.

Merci pour le pas à pas qui m'a bien aidée à adapter mes formules à mon cas.

Cordialement

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
10 oct. 2011 à 15:48
Pas de quoi, c'est, comme vous le faites, bien sur Mita qu'il faut remercier.

Petite info:
si vous ne voulez pas du tout d'affichage de 0 dans votre feuille, vous pouvez éviter la MFC avec: Clic sur logo Microsoft en haut à gauche / option excel en bas de la fenêtre
à gauche: "options avancées"
et cherchez dans liste la ligne :"afficher un 0 quand la cellule à une valeur nulle " et décochez la.
vous ne verrez plus de 0

si excel avant 2007: même chose mais barre d'outil / option onglet affichage
crdlmnt
0
Oui, c'est vrai, je connais le truc également.

Merci encore.

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
10 oct. 2011 à 16:16
Re

Clic droit sur le nom de l'onglet concerné
choisir :"visualiser le code"

coller ce texte dans la fenêtre affichée et l'adapter à votre tableau

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim Rw As Long
If Target.Column = 1 Then
Rw = Target.Row
Range("B" & Rw, "C" & Rw).Select
Selection.ClearContents
End If
End Sub



ce code effacera les cellules B et C de la ligne où vous entrez une valeur en colonne A

adaptation:
ligne:
If Target.Column = 1 Then
modifier le 1 et placer le N° de colonne de la feuille où vous entrez la donnée

ligne
Range("B" & Rw, "C" & Rw).Select
placer entre les parenthèses les codes colonnes suivi de &rw pour toutes les cellules à effacer sur la ligne, en séparant chaque adresse par une virgule.

bonne chance

crdlmnt



0
Je ne sais pas si c'est parce que je n'ai pas mis les bon numéros de colonne (ou lettres selon le cas), ou bien si c'est parce que je ne tape jamais une donnée, mais la choisis dans une liste déroulante, mais ça ne fonctionne pas.

Dans le code que tu m'as donné, j'ai remplacé B &row par D &row parce que mes désignations à supprimer sont dans cette colonne (de D18 à D55) et C par I où sont stockées les quantités à commander.
Dans if Target.Column = 1, j'ai laissé 1 parce que ma liste déroulante maître (fournisseurs) est en colonne A.

Mais ces changements bloquent mon Excel 2007 qui semble incapable de résoudre la macro ou quand j'inverse les changements, m'efface les coordonnées du fournisseurs qu'une RECHERCHEV affichait.

Bref ! Me voici bien perplexe ;-).

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
Modifié par Vaucluse le 10/10/2011 à 17:24
re
je ne suis pas un grand spécialiste des macros!!! à priori il ne veut pas prendre plus de deux cellules à la fois.
donc essayez celui ci pour contourner le problème


Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim Rw As Long
If Target.Column = 1 Then
Rw = Target.Row
Range("B" & Rw, "D" & Rw).Select
Selection.ClearContents
Range("I" & Rw).Select
Selection.ClearContents
End If
End Sub

chez moi et sauf erreur, il marche!
voila le modèle

http://www.cijoint.fr/cjlink.php?file=cj201110/cijOx5Sbqi.xls

crdlmnt
0
Ok ! Je crois comprendre - grâce à ton classeur - pourquoi ça ne fonctionne pas.

En effet, mes fournisseurs n'apparaissent pas dans une colonne du bon de commande, mais dans une cellule au niveau des coordonnées (équivalant au destinataire du bon de commande) et ils sont accessibles par le biais d'une liste déroulante maître et donc d'une cellule précise (A11) et ce sont les plages D18 à D55 et I18 à I55 que je veux effacer en fonction du contenu de A11.

Donc ma foi, merci beaucoup de t'être penché sur ma question, mais je vais continuer de prospecter, il y a sans doute une solution.

Cordialement

Cath
0
Vaucluse Messages postés 26495 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 8 avril 2022 6 276
10 oct. 2011 à 19:07
suite
on a encore un peu de ressources:

au même endroit:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$11" Then
Range("D18:D55,I18:I55").Select
Selection.ClearContents
End If
End Sub

crdlmnt
0
Yessssss !

Un tout dernier truc : quelle phrase dois-je inclure pour que les cellules ne restent pas sélectionnées.

Je sais, j'abuse ;-).

En tout cas, un immense merci à toi.

cath
0