Excel : listes déroulantes conditionnelles.
Résolu/Fermé
A voir également:
- Excel : listes déroulantes conditionnelles.
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
4 réponses
Mytå
Messages postés
2973
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
950
Modifié par Mytå le 10/10/2011 à 00:30
Modifié par Mytå le 10/10/2011 à 00:30
Salut le forum
Tu pourrais utiliser un SOMMEPROD
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)]
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)]
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
Modifié par Vaucluse le 10/10/2011 à 12:48
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?
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?
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
Modifié par Vaucluse le 10/10/2011 à 14:51
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
10 oct. 2011 à 14:58
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
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
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
10 oct. 2011 à 15:48
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
10 oct. 2011 à 16:16
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
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
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
Modifié par Vaucluse le 10/10/2011 à 17:24
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
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
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
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 418
10 oct. 2011 à 19:07
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
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
10 oct. 2011 à 13:25
Je ne comprends pas cette formule et du coup, je ne sais pas où il faudrait la placer.
Cath