Macro Filtrage BD à critères multiple et variable

Bonjour à tous,

je découvre le langage VBA et j'ai pas mal de mal, je viens donc vers vous afin de recueillir vos précieux conseils

Je vous explique mon problème, je doit créer une grosse base de données caractérisant différents produits. Aujourd'hui ma base de données comporte des colonnes partant de A jusqu'à AE, ces colonnes caractérisent les produits.

Cette base de données sera consulté et alimenté quotidiennement, pour l'alimenter j'ai réussi à créer une feuille "Update" comportant toutes les caractéristique produits, il suffit à l'utilisateur de remplir les champs et d'appuyer sur un bouton pour les transférer sur la BD.

Le problème est pour la consultation, je souhaiterai créer une feuille "Consultations" avec 3 critères, "Produit" "Sous traitent" et "Programme". Ces trois critères sont à choix multiple, c'est à dire que l'utilisateur ne tape pas manuellement les critères mais un curseur lui permet de les sélectionner. A la suite de cette sélection, je voudrais qu'une macro recherche dans ma base de données (qui se situe sur une autre feuille) toutes les lignes qui remplissent ces conditions et les copie sur ma feuille "consultations" en dessous de mes critères.

La recherche peut être effectué sur un seul critére (uniquement un type de produit) ou bien deux (un type de produit et un sous traitent) ou les 3.

j'éspére avoir étais clair ^^

Avez-vous des idées ?

Bonsoir,

Ce que tu demandes est réalisable avec un code VBA, et en utilisant un filtre avancé (ou élaboré)

Cependant, afin de t'aider au mieux, il serait préférable de joindre un fichier exemple, exempt de toutes données confidentielles, mais ayant exactement la même structure que ton fichier de travail.

@ te relire

Merci de ta réponse,

je peux poster mon fichier à l'aide de quoi ?

Re-,

En lisant ceci, si tu descends, tu trouveras toutes les explications pour joindre un fichier...

La taille maximum est de 300 Ko, mais comme dit plus haut, quelques lignes exemples suffisent...

Bon courage

Voila, j'ai supprimer les datas mais la base de données, à terme pourrait accueillir jusqu'à 4000 produits.

Encore merci de l'attention que vous portez à mon sujet.

Re-,

Si je comprends bien :

  • Dans l'onglet "Base de données", il y a toute ta base...
  • Et tu souhaiterais obtenir dans l'onglet "Feuil3", les données recherchées, en fonction des critères des cellules "D5, E5 et F5" (1, 2 ou 3 de ces critères?
  • Tu as mis dans l'onglet "Feuil1", tes données servant aux validations de données des autres onglets...Ces données sont-elles figées, ou peuvent-elles "grossir"?

PS, est-ce que tes 3 premières colonnes sont indispensables dans cet onglet "Feuil3"? (c'est pas gênant en soi, mais pour un confort visuel, ne serait-il pas préférable de commencer en colonne "A")?

@ te relire

re,

- Exactement

- Voila, je voudrais pouvoir trier ma base selon ces trois critères "D5", "E5" et "F5" de la feuille "feuil 3". Mais il faudrait qu'il soit possible de renseigner qu'un seul critère

(ex: je choisi uniquement le critère POULOP et rien dans "Supplier" ni "Product", il faudrait faire apparaître toutes les lignes comportant POULOP mais avec n'importe quel Supplier et Product)

- Oui, ces données sont susceptible de grossir. (20 lignes supplémentaire au max)

Et non mes 3 premières colonnes ne sont pas indispensable, loin de là.

Je suis d'accord avec toi, niveau confort visuel on peux faire mieux mais c'étais juste une ébauche.

Libre à toi de le modifier

Merci encore

Re-,

Un essai...

Bonne nuit

Génial, c'est exactement l'idée que j'avais en tête !

Il faudrait pouvoir rajouter pour chaque critères un champ libre. Sinon un grand merci, serait-il possible que tu me détail la macro afin que je puisse comprendre la manip ?

En tout cas merci

re,

J'ai essayé de faire en sorte de pouvoir faire une recherche sans critère mais je sais pas quel fonction appliquer:

Private Sub Worksheet_Activate()

Dim Cel As Range

Dim Produit As Object, Program As Object, Supp As Object

Set ShBase = Sheets("Base de données")

Set ShExtract = Sheets("Feuil3")

Set Produit = CreateObject("Scripting.Dictionary")

Set Program = CreateObject("Scripting.Dictionary")

Set Supp = CreateObject("Scripting.Dictionary")

With ShBase

DerLig = .Cells(Rows.Count, "A").End(xlUp).Row

For Each Cel In .Range("A2:A" & DerLig)

If Cel <> "" Then Produit(Cel.Value) = Cel.Value

If Cel.Offset(, 3) <> "" Then Program(Cel.Offset(, 3).Value) = Cel.Offset(, 3).Value

If Cel.Offset(, 5) <> "" Then Supp(Cel.Offset(, 5).Value) = Cel.Offset(, 5).Value

Next Cel

End With

Me.Range("A9:AF5000").Clear

With Me.Range("A5")

.Validation.Delete

.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=Join(Produit.Items, ",")

.Value = ""

End With

With Me.Range("B5")

.Validation.Delete

.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=Join(Program.Items, ",")

.Value = ""

End With

With Me.Range("C5")

.Validation.Delete

.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=Join(Supp.Items, ",")

.Value = ""

End With

End Sub

J'aimerais intégrer un nouveau critère en D5, c'est pour vérifier la validité d'un date.

Je m'explique, dans un de mes champs de ma BD, je doit vérifier la validité des dates qui se trouvent dans la colonne "Validity Date" de ma BD.

C'est une cellule avec filtre:

  • soit on choisi "ALL", à ce moment on sort toutes les lignes, peut importe leurs date.
  • soit "STILL VALID" et là, on sort toutes les lignes dont la date de validité est dépassé.

Si jamais vous avez des idées, je suis preneur.

Je glisse en exemple:

29base-20052015.xlsm (227.97 Ko)

Bonsoir,

Est-ce qu'un UserForm de recherche te dirait?

C'est à dire qu'on oublie tout ce qui a été fait, et on utilise une autre méthode...

@ te relire

Edit : Et j'oubliais... Est-ce que toutes les cellules de la colonne I (Validity Dates) sont remplies? ou est-ce qu'il peut y avoir des cellules sans date? Et dans ce cas, que faut-il faire?

Salut,

le UserForm c'est avec avec des fenêtres de dialogue c'est ça ?

Enfaite j'aime bien cette présentation tel quel est, et ça convient aussi à mes collaborateurs donc si je pouvais la garder. Mais si c'est trop compliqué dit moi. ( à part le fait que tous les boutons soit différents )

Pour les cellules de la colonne "validity date", oui, il peut y avoir des cellule vide.

- Si elle sont vides, on ne les fait pas apparaitre si le critère "STILL VALID" est sélectionné.

- On les fait apparaitre seulement si "ALL" est actif et lorsque rien n'est sélectionné.

Re-,

Ce n'est pas que ce soit trop compliqué, c'est que c'est plus "convivial"... et plus facile d'utilisation (c'est comme si tu réservais sur internet, en mettant tes préférences, et qu'à la fin, tu aies tes choix...)

Dans 2 minutes....


Zut, 5 minutes de trop....

Le fichier :

65base-20052015-v1.xlsm (228.29 Ko)

Enfaite je pensais que ce serait justement moins "convivial", j'ai peur que ça complique les chose mais après, c'est toi l'expert

Je viens de télécharger le fichier que tu a posté, je ne sais pas si c'est du au fait que je suis actuellement sur une beta 2015 d'excel mais je n'arrive pas à visualiser ce que tu a réalisé. En feuille 3 sur la ligne 1 je n'est que le bouton. ? :O

Re-,

Tu as validé les macros?

Je viens de le télécharger, et lorsque j'appuie sur le bouton "Extraire", j'ai un userform qui s'affiche...

Arff,

je crois que les "UserForm" ne tourne par sur ma version ...

Je pourrais le voir que demain matin en arrivant au boulot.

Je posterais un message des que j'ai ouvert le fichier demain matin, merci.

Sinon je voulais savoir comment tu à reussi à me créer un bouton avec une forme ? J'utilise "Controles ActiveX" est le rendu est vraiment beaucoup moins bien.

Re-,

Dans le ruban "Insertion", tu as un onglet "Illustrations"

et à partir de cet onglet, tu peux choisir d'insérer soit une forme, soit une image de ton PC, soit une image du web....

Une fois inséré cette image (forme...), tu fais un clic droit sur icelle, et tu sélectionnes "Affecter une macro"

Et tu choisis la macro qui va bien...

Bon courage

Super, merci !

Pour en revenir au "User Form" je voulais savoir, je peux rajouter facilement des critères si jamais je suis amené à avoir de nouveau sous traitants par exemple ? Car sur les filtres que tu m'avais fait, si jamais un nouveau fournisseur était dans la BD le filtre le reconnaissait.


Et ça c'était TOP !

Salut,

je viens de voir le fichier, et je trouve ça beaucoup mieux, tu a raison c'est bien plus convivial ! MERCI !

Tu peux m'expliquer comment débuguer la macro lorsque je sélectionne aucun critère elle crash. Hors je voudrais pouvoir faire une recherche sans sélectionner aucun critères.

Deuxième et dernier point: Est-il possible lorsque je choisis un "Product" de faire apparaitre uniquement dans le filtre "supplier" les sous traitants du produit. ex: Pour un FDV dans ma BD j'ai des référence que pour 3 sous traitants ( ADS, MOOG, SAFRAN). Donc si je sélectionne FDV est-il possible de faire apparaitre uniquement les 3 sous traitants et pas tous les autres ?

Merci de me dépanner tu semble être le seul a bien vouloir m'aider :/

Bonsoir,

PSycoW a écrit :

Tu peux m'expliquer comment débuguer la macro lorsque je sélectionne aucun critère elle crash. Hors je voudrais pouvoir faire une recherche sans sélectionner aucun critères.

Pour le débogage, j'avais prévu une option, mais j'ai mal configuré le code....

Par contre, pourquoi faire une extraction sans critère??? Vaut autant rester sur l'onglet "Base de données"....

PSycoW a écrit :

Est-il possible lorsque je choisis un "Product" de faire apparaitre uniquement dans le filtre "supplier" les sous traitants du produit. ex: Pour un FDV dans ma BD j'ai des référence que pour 3 sous traitants ( ADS, MOOG, SAFRAN)

Ok, je remplis le cbx 3 en fonction du 1

Regarde l'exemple joint (je n'ai pas intégré l'extraction sans critère, il faut au moins un concernant les dates (sélection de "Still Valid")

PSycoW a écrit :

Merci de me dépanner tu semble être le seul a bien vouloir m'aider :/

Pas du tout, ce n'est pas comme cela que le forum fonctionne.

Comme j'ai pris ton fil en charge, les autres bénévoles ne font que le suivre, mais s'ils ont d'autres idées, ils peuvent également participer.

Bonne soirée

79base-20052015-v2.xlsm (232.49 Ko)
Rechercher des sujets similaires à "macro filtrage criteres multiple variable"