Excel : listes déroulantes conditionnelles.

Résolu
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

  1. Contributeur
    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
    1. 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
  2. Contributeur
    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
    1. 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
      1. Contributeur
        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
      2. Contributeur
        ... 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
      3. 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
      4. Contributeur
        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
      5. Oui, c'est vrai, je connais le truc également.

        Merci encore.

        Cath
        0
    2. Contributeur
      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
      1. 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
      2. Contributeur
        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
      3. 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
      4. Contributeur
        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
      5. 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