VBA - Copier/coller avec filtre

Bonjour,

Etant débutant en VBA et après plusieurs recherche je n'arrive pas à trouver ce qu'il me faut, pouvez-vous svp m'aidez.

Mon problème est le suivant :

J'aimerais créer une macro afin de filtrer dans un fichier, copier toutes les valeurs filtrés puis créer une nouvelle feuille avec le nom d'une de mes valeurs dans un document déjà existant (ou pourquoi pas créer un autre fichier?) et ensuite coller les valeurs dans cette feuille.

Le problème est que mon filtre change à chaque fois.. et je ne sais pas comment faire pour que le filtre puisse s'adapter et changer automatiquement.

J'espère avoir été assez explicite, ci-dessous je vous met un extrait grossier de l'enregistreur pour peux-être mieux comprendre.

Merci à vous !!

Sub Prépa_Liste_Inv()
'
' Prépa_Liste_Inv Macro
' Copier coller des données pour la création des feuilles d'inventaire
'

'
    Windows("Emplacements_BDL_1160.xlsx").Activate ' Fichier de donner des articles à inventorier
    Range("A1").Select
    ActiveSheet.Range("$A$1:$K$900").AutoFilter Field:=1, Criteria1:="1160_1" '1160_1 représente les données de la feuille d'inventaire, les feuilles d'inventaire vont de 1160_1 à 1160_45 / Il y a 20 lignes par filtre 1160_X
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("Liste_inventaire_1160.xlsx").Activate ' Copier les données dans le modèle de feuille d'inventaire
    ActiveSheet.Paste
End Sub

Bonjour Kilian1906 et bienvenue,

merci de joindre un fichier excel à ton message, (juste un exemple de tes données)

note/ pour les données filtrées il est plus facile d'utiliser un Tableau.

pour modifier une plage de cellule en Tableau,

sélectionne cette plage de cellule,

sélectionne au menu, Insertion, Tableau

Sub transfert()
Dim lignes_visibles  As Range
With ActiveSheet.ListObjects("Tableau1")
        Set objListRng = .HeaderRowRange
        objListRng.Copy Sheets("Feuil2").[A1]
        Set lignes_visibles = .DataBodyRange.SpecialCells(xlCellTypeVisible)
        lignes_visibles.Copy Sheets("Feuil2").[A2]
 End With
End Sub

Hello I20100,

Merci pour ta réponse

Ci-joint, voici les fichiers que j'utilise.

J'aimerais sur le fichier DATA_1160.xlsx filter la colonne A, puis copier ces données, créer une nouvelle feuille dans le fichier canevas_1160, et faire de même avec toute les autres sélection de la colonne A DATA_1160.

Ce que je ne sais pas comment faire, c'est dire à ma macro "prend le premier filtre, colle, puis le suivant, colle, etc..."

Le but de ça étant de juste cliquer un bouton sur le fichier Canevas_1160 et que toutes mes listes d'inventaires sois créer et que le nom de la feuille correspondent au texte colonne A de mon fichier DATA_1160, (je penses également que je vais faire dubliquer le fichier et le rename)

Merci

50canevas-1160.xlsx (13.02 Ko)
37data-1160.xlsx (50.39 Ko)

re,

à tester,

Re,

Super merci beaucoup !

Je vais regarder et tester ça

re,

est ce que le problème est résolu ?

Hello,

Pour te répondre, oui ça marche très bien, je te remercie encore.

Par contre, j'ai encore deux trois soucis que je ne sais pas comment faire..

Peux-être peux-tu m'aider.

Ici un exemple pratique, sur la feuille 1160_46 tu peux voir que dans la colonne J il y a trois cellule en vert, celle-ci représentent le total des articles en double (voir formule). J'aimerais pouvoir automatiser ça à la création de la feuille, j'ai essayer avec plusieurs formule, mais sans succès, les critères sont trop "pointilleux" je penses pour pouvoir éxecuter ça sans macro.

J'aimerais également enregistrer le fichier ensuite avec le nom se trouvant en cellule B26, le nom représentent Listing_Inventories_N° magasin_N° première liste_N° Dernière liste.

Pour enregistrer le fichier aucun problème, par contre je ne sais pas comment amener ces n° de feuille.

Merci beaucoup,

Kilian

re,

est il possible de répartir la somme ?

à tester

copier la formule sur la plage J4:J23

=SOMMEPROD(($C$4:$C$23=C4)*($G$4:$I$23))/NB.SI($C$4:$C$23;C4)

Re,

Non cette formule ne marche malheureusement pas..

Déjà essayer avec SOMMEPROD et SOMME.SI.ENS mais je n'arrive pas à trouver la bonne solution.

re,

j'ai ajouté une MFC pour marquer les doublons,

re,

autre possibilité,

=SI(NB.SI($C$4:$C$23;C4)=NB.SI(C$4:C4;C4);SOMMEPROD(($C$4:$C$23=C4)*($G$4:$I$23));SOMME(G4:I4))

Re,

Parfait, la formule

=SI(NB.SI($C$4:$C$23;C4)=NB.SI(C$4:C4;C4);SOMMEPROD(($C$4:$C$23=C4)*($G$4:$I$23));SOMME(G4:I4))

marche bien.

Merci beaucoup

As-tu une solution pour l'enregistrement avec les n° de feuille ?

Et j'arrête de prendre de ton temps

As-tu une solution pour l'enregistrement avec les n° de feuille ?

tu veux enregistre chacun des onglet sous le nom 1160-46 puis l'autre 1160-47 au format "xlsx" ?

Non, après execution de la macro, j'aimerais que le fichier s'enregistre sous le nom : Listing_Inventories_XXXX_XX_XX (Nom en cellule B25 des feuilles)

Ce qui correspond à : Listing_Inventories_Numéro de magasin (Colonne E de la feuille DATA)_Numéro de la première feuille (ex. ici n° 46)_Numéro de la dernière feuille (ex. ici N° 80)

Je ne sais pas comment renvoyer les valeurs 46 et 80, comme avant ça il y a 1160

Je ne sais pas comment renvoyer les valeurs 46 et 80, comme avant ça il y a 1160

je ne comprend d'ou provient le 46 et le 80 ?

Il provient du numéro de liste, il correspond au nom de la 1 feuille (après canevas) et de la dernière feuille

pour créer les onglets

n = 2

For i = 21 To Source.Cells(Rows.Count, "A").End(xlUp).Row Step 20
    modele.Copy After:=Sheets(Sheets.Count)

    With ActiveSheet
    .Name = Source.Range("A" & n).Value

selon la macro le premier onglet créé devrait avoir le nom 1160_1

et le dernier onglet 1160_80

alors pourquoi 46 ?

Car dans la pratique je n'utilise pas le fichier entier, mais je créer plusieurs fichier contenant les listes de 1 - 13 puis un autre de 13-30 etc...

fichier inventaire

Ceux-ci représentant en réalité un jour d'inventaire, d'où l'utilité d'avoir plusieurs fichier.

si j'ai bien compris il devrais y avoir 1160_46 en cellule A2 sur l'onglet DATA ?

Non plus, il s’agit du nom du fichier à l’enregistrement

Mais pas de soucis, ne prend pas plus de temps pour ça je vais regarder pour faire autrement

En tout cas, merci beaucoup pour ton aide !

Rechercher des sujets similaires à "vba copier coller filtre"