[excel] recherchev et liste...

Bonjour,

Dans un classeur excel, j'ai ma base de données sur des produits chimiques.

j'essaie d'automatiser des sorties sur un autre classeur en utilisant la fonction "recherchev" qui remplie une colonne B(formule1):

=SI(ESTVIDE(A11);"";RECHERCHEV(A11;'C:\Specifiques\Produits_Dangereux\[Liste Produits Chimiques.xls]BDD Produits chimiques'!C5:Z820;21;FAUX))

Jusque là tout va bien, elle va bien cherchée les bonnes infos et les place correctement.

Mais mon souci vient du fait que la colonne A se remplira de la même manière (formule2) en fonction cette fois, d'une seule variable.

Exemple: je rentre secteur A en C5

je devrais avoir la liste complete des produits présent en secteur A dans la colonne A, et dans la colonne B les caractéristiques adéquates en fonction des produits de la colonne A.

Or avec recherchev, elle s'arrête seulement au premier résultat :-s

Alors qu'il peut y avoir plusieures lignes (elle ne me sort que le premier produit qu'elle trouve dans "secteur A")

Si quelqu'un a une idée simple sous excel, ou en VBA pour qu'en fonction du secteur rentrée en C5, elle me sorte la liste complète, je suis preneur !!
j'avoue que je patauge depuis un bon moment...

Merci d'avance
Configuration: Windows XP
Excel 2003

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Dans le menu Données, tu choisis Données externes - Créer une requête, ta source de connées c'est XLFiles, et après tu tatonnes...
    1. Ca me paraît plus du ressort de MSQuery que de la RECHERCHEV, mais je ne trouve pas comment rendre le critère variable.

      Fichtre!!! Il doit y avoir une solution, quand même!!!

      Au cas où tu ne connaîtrais pas MSQuery:

      A partir du classeur où tu veux voir apparaître tes données extraites:
      Menu Données
      Données externes
      Créer une requête - Source de données Excel Files*
      Tu choisis ton fichier, les champs qui t'intéressent, tu mets un critère si tu veux... Mais c'est là que je bloque. Tu peux mettre "A" pour le secteur, mais je ne sais pas rendre ce "A" variable.

      Peut-être qu'on peut modifier ça dans le SQL mais je ne connais pas la syntaxe. Il va bien y avoir un spécialiste qui va passer derrière moi... J'espère!

      J'espère ne pas t'avoir mené dans une impasse...
      1. Bon comme j'ai l'impression que je n'ai pas été très clair, je mets une image de mon fichier:

        [URL=https://imageshack.com/][IMG]http://img106.imageshack.us/img106/121/imagefichexm9.th.png[/IMG][/URL]

        Comment ça marche ?

        La personne choisi la civilité (menu déroulant) puis rentre le nom de la personne en case C5 et le prénom en case D5

        Une petite formule recherchev va chercher le nom dans une liste dans un autre classeur excel(j'ai d'ailleurs un souci si deux personnes ont le même nom.. je pensais créer une clé avec la concaténation nom+prenom, mais dans ce cas comment s'écrit la formule ? =recherchev(C5&D5; etc ) est-ce que cette valeur cherchée correspondra bien à la clé que je créerai ?), pour en sortir le secteur où travail cette personne dans la case B7.

        Bon continuons, pour arriver à mon problème ou je bloque et que j'évoquais dans mon post précèdent:

        dans la colonne A, je veux obtenir la liste complète de tous les produits suivant le secteur obtenu en B7.(Sachant que dans un autre classeur j'ai référenté tous les produits par secteurs) Or si je fais une recherchev du type =SI(ESTVIDE(B7);"";RECHERCHEV(B7;'P:\Specifiques\Produits_Dangereux\[Liste Produits Chimiques.xls]BDD Produits chimiques'!C5:Z820;2;FAUX)), (Les secteurs se trouvant dans la colonne C et les produits dans la colonne D) je n'aurai que le premier produit du secteur qui sortira et non pas la liste complète...

        Toute aide sera la bienvenue merci bcp d'avance,

        signé: un chargé d'HSE qui commence à désespérer

        PS: merci Latelygeek, mais je ne connais pas du tout msquery, et de plus je ne pourrai l'utiliser (si c'est une logiciel) pour cause de demande de validation qui prendra 1 mois..or je dois aboutir avant...
        Merci en tout cas pour l'intérêt que tu portes à mon sujet
        1. On a bien compris ton problème, mais RECHERCHEV ne te renverra qu'UNE valeur. Tu peux laisser tomber cette piste. Tu as essayé MSQuery????
          1. Je ne connais pas du tout, je suis en train de lire les infos que je trouve à ce sujet sur le net
        2. Je ne suis plus très loin... je suis passé par les macros :
          
          '
          ' test
          ' Macro enregistrée le 02/04/2008
          '
              Selection.AutoFilter Field:=22, Criteria1:="<>1", Operator:=xlAnd
              ActiveWindow.SmallScroll ToRight:=1
              Windows("fiche d'exposition.xls").Activate
              Sheets("Fiche d'exposition").Select
              Range("B7").Select
              Windows("Liste Produits Chimiques.xls").Activate
              Selection.AutoFilter Field:=2, Criteria1:="Microbiologie"
              Range("C4:C1000").Select
              Selection.Copy
              Windows("fiche d'exposition.xls").Activate
              Range("A11").Select
          
          J'ai créer cette macro en effectuant un test pour le secteur "Microbiologie"
          Cette macro sélectionne bien tous les produits d'un secteur et les colle la ou il faut (en A11).
          
          Mon soucis actuel est de rendre le critère de recherche aléatoire, cad suivant le secteur
           préchoisi dans le dossier fiche d'exposition.xls, onglet "fiche d'exposition" en D7.
          
          Possible d'intégrer un boucle ? du style si c'est égal a microbiologie alors faire ça: 
          Selection.AutoFilter Field:=2, Criteria1:="Microbiologie"
          
          si c'est égal à chimie alors faire ça: Selection.AutoFilter Field:=2, Criteria1:="Chimie"
          
          
          Et ça je ne sais pas du tout faire.... help ?
          1. Tu déclares une variable:

            Dim ChoixSecteur as String

            Tu lui donnes la valeur de ta cellule B7:

            ChoixSecteur = Range("B7").Value

            Et tu utilises ChoixSecteur comme critère:

            Selection.AutoFilter Field:=2, Criteria1:=ChoixSecteur
            1. J'avais réussi avec plusieures boucles IF, mais j'adopte ta méthode, beaucoup beaucoup plus courte, merci Lately ^^

              j'obtiens malheureusement une erreur dans les deux cas exactement au même endroit Tout à la fin, à la ligne "activesheet.paste":

              Sub macro7()
              '
              'test
              'avec definition de variable
              '

              '

              Windows("liste Produits Chimiques.xls").Activate
              Sheets("BDD Produits Chimiques").Select
              Selection.AutoFilter field:=22, Criteria1:="<>1"
              Windows("fiche d'exposition.xls").Activate
              Sheets("fiche d'exposition").Select
              Range("D7").Select

              Dim ChoixSecteur As String
              ChoixSecteur = Range("D7").Value

              Windows("liste Produits Chimiques.xls").Activate
              Sheets("BDD Produits Chimiques").Select
              Selection.AutoFilter field:=2, Criteria1:="=ChoixSecteur"
              Range("C4:C1000").Select
              Selection.Copy
              Windows("fiche d'exposition BLEDINA.xls").Activate
              Sheets("fiche d'exposition").Select
              Range("A11").Select
              ActiveSheet.Paste

              End Sub

              UNe idée du pourquoi ?

              EDIT:

              Bon j'ai compris pourquoi ça bug. Le tableau de destination est trop petit par rapport à la liste à copier dedans.

              Il faudrait en fait que la macro rajoute 5000 lignes au tableau de destination, puis supprime toute celle dont la valeur est "vide". Ce serait parfait ça..

              Une idée ? ^^