[excel] recherchev et liste...

keiser19 Messages postés 5 Statut Membre -  
LatelyGeek Messages postés 1759 Statut Membre -
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
A voir également:

8 réponses

LatelyGeek Messages postés 1759 Statut Membre 550
 
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
LatelyGeek Messages postés 1759 Statut Membre 550
 
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...
0
keiser19 Messages postés 5 Statut Membre
 
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
0
LatelyGeek Messages postés 1759 Statut Membre 550
 
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????
0
keiser19 Messages postés 5 Statut Membre
 
Je ne connais pas du tout, je suis en train de lire les infos que je trouve à ce sujet sur le net
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
keiser19 Messages postés 5 Statut Membre
 
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 ?
0
LatelyGeek Messages postés 1759 Statut Membre 550
 
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
0
keiser19 Messages postés 5 Statut Membre
 
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 ? ^^
0
LatelyGeek Messages postés 1759 Statut Membre 550
 
Essaye Selection.Paste, peut-être que ça serait mieux...
0