Non de tableau "dynamique"

Bonjour à tous

Je me pose la question suivante, de savoir si il serai possible de nommer un tableau de manière "dynamique"?

Contexte:

Je crée, via un onglet menu, un onglet Fournisseur_x

Sub Dupliquer_Modele()
    Sheets("Modèle").Copy after:=Sheets(Sheets.Count)
    With ActiveSheet
    .Range("e1").Value = "Fournisseur " & Sheets.Count - 5
    .ListObjects(1).Name = "tbl_Four_" & Sheets.Count - 5
     End With

End Sub

Cette macro me permets donc de créer l'onglet et de renommer le tableau sous la forme tbl_Four_x

Sur mon onglet fournisseur, j'ai créer un macro pour extraire les données.

J'ai donc le code suivant:

Sub Extraire()
'
' Extraire Macro
'

    ActiveWindow.SmallScroll ToRight:=1
    Range("E15").Select
    Application.CutCopyMode = False

        Range("tbl_Four_[#All]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("Modèle!Criteria"), CopyToRange:=Range( _
        "Modèle!Extract"), Unique:=False

    Range("o8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Cut

    Sheets("BD-Achats").Select
    Range("c15").End(xlDown).Offset(1, 0).Select

    ActiveSheet.paste
 End Sub

cette macro est issue de l’enregistreur...

Est il possible que le nom du tableau soit automatiquement reconnu tbl_Four_1, tbl_Four_2, tbl_Four_3,...

J'ai essayé, mais pour l'instant....

Un idée?

Merci

Jean Yves

Si tu n'as qu'un seul tableau par page remplace à tout hasard ...

Range("tbl_Four_[#All]").AdvancedFilter

par

ActiveSheet.ListObjects(1).Range.AdvancedFilter

merci Steelson pour ton aide

Je viens d'essayé, mais ça ne fonctionne pas, le tableau n'est pas sélectionné..

j'ai essayé d'ajouter la propriété DataBodyRange, mais sans plus de résultats....

bon je suis pas un pro de VBA, donc je fait à "tatons"....

Merci

Ah ! le tableau est-il sur la même page que les critères ?

Oui, le tableau est sur la mème page

Un essai chez moi ... c'est ok !

Sub Filtrer()
    ActiveSheet.ListObjects(1).Range.AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range("A1").CurrentRegion, Unique:=False
End Sub

Bonjour Steelson

Autant pour moi..ça fonctionne du moins en partie. l'erreur viens de moi

Voici je que j'ai mis:

ActiveSheet.ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("Modèle!Criteria"), CopyToRange:=Range( _
        "Modèle!Extract"), Unique:=False

Car mon souhait est de faire l'extraction dans la zone "Modèle!Extract" mais comme j'ai créer et renommer l'onglet (nouveau fournisseur) forcément ca mache pas

et donc question subsidiaire....comment peut ton nommer la zone de critère et la zone d'extraction.

Sachant que le nom de l'onglet actif est en E1...

Merci

Tout simplement

Sheets("feuille_machin").ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1").CurrentRegion, CopyToRange:=Range("A4").CurrentRegion.Resize(1), Unique:=False

si tes critères sont en A1+++++++ et le résultat en A4++++++

sans mention de la feuille si c'est la feuille active

et donc question subsidiaire....comment peut ton nommer la zone de critère et la zone d'extraction.

Sachant que le nom de l'onglet actif est en E1...

Tu aurais pu aussi mettre :

Range("'" & [E1] & "'!Criteria")

mais je préfère la solution que j'ai postée ci-dessus

Merci Steelson pour tes réponse.

En effet, j'ai opter pour le 1er soution, qui fonctionne tres bien.

Quand on débute en VBA, on cherche toujours plus compliqué qu'il ne faut....

Merci encore pour ton aide

Un rajout ... si tu veux aller encore plus loin dans l'indépendance du code par rapport aux noms ... mets ta base de données dans la première feuille ...

Sub filtrercopier()
    Sheets(1).ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1").CurrentRegion, CopyToRange:=Range("A4").CurrentRegion.Resize(1), Unique:=False
End Sub
Rechercher des sujets similaires à "tableau dynamique"