Fonction filtre VBA

Bonjour,

Je souhaite créer un bouton me permettant de filtrer certaines données d'une BDD. J'ai donc une première feuille avec ma BDD et une seconde où je souhaite appliquer mon filtre. Je suis donc passer par la formule classique =FILTRE qui va me renvoyer plusieurs valeurs. Cependant je souhaite filtrer davantage de données et c'est pourquoi je suis passé par vba et la création d'une macro. J'ai enregistré la macro =FILTRE et travaillé directement sur le code généré. J'ai rajouté une boucle for afin de vérifier à chaque fois que la cellule est vide.

Je souhaiterais faire évoluer le numéro de ma ligne (ici R6) à chaque fois que ma macro vient écrire/exécuter le filtre dans une cellule vide. Pour être plus précis, le faire évoluer jusqu'à R81 (sans changer la colonne)avant un pas de 1.

J'ai vu des articles sur la fonction "Autofilter" mais je ne vois pas bien comment l'appliquer ici (et si cela renverrait les données que je souhaite). Sachant que chaque cellule que je viens balayer peut renvoyer chacune plusieurs valeurs, d'où ma boucle for pour éviter que les filtres se chevauchent.

Quelqu'un a-t-il une piste ou une solution à m'apporter ? :)

Ludo

Sub test()

For j=1 to 40 
    i=10
    If Cells(j,i) = "" Then 
    Cells(j,i).Select

ActiveCell.Formula2R1C1 = _
    "=FILTER(Tableau1[Référence],Tableau1[Designation]=Feuille2!R6C4)" '<= problème

    EndIf
    Next j 

End Sub 

P.S : je ne peux malheureusement pas joindre le fichier..

Bonjour Ludo, bonjour le forum,

P.S : je ne peux malheureusement pas joindre le fichier..

Je n'ai plus le temps de regarder ton problème en détail mais rien ne t'empêche de créer un fichier avec des données bidons reprenant la structure de ton original...

Ci-joint un fichier qui possède la même structure que l'original.

En gros je souhaiterai pouvoir lorsque je clique sur le bouton 1 (feuille "filtre") venir afficher à la suite les désignations (feuilles BDD) correspond aux produits (et uniquement ces produits) se trouvant dans ma feuille "filtre".

159structurefichier.xlsx (14.36 Ko)

Re,

Ok la structrure est peut-être identique mais les données sont incohérentes !?... J'avoue que je ne comprends pas ton exemple....

Mon exemple est très rapide et je dois bien le reconnaitre pas très structuré. Ce qui n'est bien sur pas le cas du fichier original

Je vais essayer de mieux m'expliquer : J'ai une BDD avec mes produits qui sont associés à des articles (feuille "BDD") et indépendamment de la macro que je veux faire, je viens récupérer certains produits de la BDD à partir d'une date de planification. Ces produits que je récupère de la BDD viennent s'afficher dans ma feuille 2 "Filtre". J'aimerai maintenant afficher dans un autre tableau sur cette même feuille 2 les articles associés à ces produits. Que je puisse avoir les références d'articles que je consomme dans ma journée.

Re,

Heu... Ok mais renvoie un fichier correct !... Pas envie de me taper ton boulot non plus...

Je viens de modifier mon fichier ci-joint avec davantage de précisions

Re,

Enfin, un exemple concret !...

Ton fichier modifié avec le code ci-dessous :

Sub test()
Dim OB As Worksheet 'déclare la variable OB (Onglet Base)
Dim OF As Worksheet 'déclare la variable OF (Onglet Filtre)
Dim TB As ListObject 'déclare la variable TB (Tableau Base)
Dim TVB As Variant 'déclare la variable TVB (Tableau des Valeur Base)
Dim TS As ListObject 'déclare la variable TS (Tableau Source)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeur Source)
Dim TC As ListObject 'déclare la variable TC (Tableau Cible)
Dim PC As Range 'déclare la variable PC (Plage Cible)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OB = Worksheets("BDD") 'définit l'onglet OB
Set OF = Worksheets("Filtre") 'définit l'onglet OF
Set TB = OB.ListObjects("Tableau1") 'définit le tableau structuré TB
TVB = TB.DataBodyRange 'définit le tableau des valeurs TVB
Set TS = OF.ListObjects("Tableau2") 'définit le tableau structuré TS
TVS = TS.DataBodyRange 'définit le tableau des valeurs TVS
Set TC = OF.ListObjects("Tableau3") 'définit le tableau structuré TC
If TC.Range.Rows.Count > 2 Then TC.DataBodyRange.Rows.Delete 'si le tableau structuré cible TC a plus de deux lignes, supprime les lignes des données
For I = 1 To UBound(TVS, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs source TVS
    For J = 1 To UBound(TVB, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs base TVB
        If Trim(TVS(I, 1)) = Trim(TVB(J, 1)) Then 'condition : si les données correspondent
            TC.ListRows.Add 'ajoute une ligne au tableau structuré TC
            Set PC = TC.DataBodyRange 'définit la plage PC
            PC(PC.Rows.Count, 1) = TVB(J, 2) 'renvoie la donnée ligne J colonne 2 tu tableau des valeur base TVB dans la cellule ligne = nombre de ligne de la plage PC, colonne = 1 de la plage PC
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
Application.ScreenUpdating = True 'affiche
End Sub

Le fichier :

229ludo-ep-v01.xlsm (24.23 Ko)

Re,

Je te remercie vraiment pour le temps que tu as pris pour résoudre mon problème !

Je vais adapter et comprendre le code que tu viens d'envoyer à mon fichier original dans le week-end! Merci énormément! depuis le temps que je cherche une solution.. ;)

Rechercher des sujets similaires à "fonction filtre vba"