Transfert champs plage filtrée vers une autre feuille

Bonjour,

Je sollicite vos compétences pour une solution que je n’arrive pas à trouver. Je voudrais transférer certains champs filtrés d'une feuille "Base" vers une autre "Budget".

J'utilise une userform avec 3 comboboxs pour effectuer des selections, les valeurs des combo s'inscrivent sur la feuille Budget en respectivement en B1, C1 et D1 (il y a possibilité de faire 1 choix ou 2 ou 3). Ces valeurs sont les critères des autofiltres appliqués sur la feuille Base.

Option Explicit

Sub Tx_Bord()
    Dim i As Long, NBd As Long, NCr As Long, dl As Long
    Dim Departement As String, Centre As String, Responsable As String
    Dim ShBd As Worksheet, ShTxB As Worksheet
    Dim Plage As Range, C As Range

    Application.ScreenUpdating = False

    Set ShBd = Worksheets("Base")
    ShBd.AutoFilterMode = False
    NBd = ShBd.Cells(ShBd.Rows.Count, 1).End(xlUp).Row

    Set ShTxB = Worksheets("Budget")
    With ShTxB
        dl = .Cells(.Rows.Count, 3).End(xlUp).Row
        If dl > 1 Then .Range("A2:F" & dl).Rows.Delete
        Departement = .Range("B1")
        Centre = .Range("C1")
        Responsable = .Range("D1")

        With ShBd

            If Departement <> "" And Centre = "" And Responsable = "" Then
                .Range("A1:N" & NBd).AutoFilter Field:=2, Criteria1:=Departement

            ElseIf Departement <> "" And Centre <> "" And Responsable = "" Then
                .Range("A1:N" & NBd).AutoFilter Field:=2, Criteria1:=Departement
                .Range("A1:N" & NBd).AutoFilter Field:=3, Criteria1:=Centre

            ElseIf Departement <> "" And Centre <> "" And Responsable <> "" Then
                .Range("A1:N" & NBd).AutoFilter Field:=2, Criteria1:=Departement
                .Range("A1:N" & NBd).AutoFilter Field:=3, Criteria1:=Centre
                .Range("A1:N" & NBd).AutoFilter Field:=3, Criteria1:=Responsable
            End If

            'TRANFERT DE LA FEUILLE BASE VERS FEUILLE BUDGET

            'je voudrais transférer après filtrage:
            'colonne B feuille Base vers colonne B feuille Budget
            'colonne C feuille Base vers colonne C feuille Budget
            'colonne M feuille Base vers colonne D feuille Budget
            'colonne E feuille Base vers colonne E feuille Budget
            'colonne N feuille Base vers colonne F feuille Budget

            .AutoFilterMode = False

        End With

    End With

    Set ShBd = Nothing
    Set ShTxB = Nothing
End Sub

Je trouve des difficultés à terminer cette macro. J'ai effectué des tests pour la partie des autofiltres, ça fonctionne bien. Je vous remercie par avance. J'aurais souhaité utiliser des zone de liste activeX, mais je ne les maitrise pas du tout et tous mes tests sont restés vain. Pour avancer j'ai opté pour l'userform que je maitrise mieux (pour lequel j'ai pu trouver pas mal de fichier et d'explication par rapport aux AcitveX).

Encore merci.

Bonjour,

Voir en pièce jointe.

Commentaires :

Il y a un cacafouilli entre f et shBD que je n'ai pas supprimé : à mon avis shBD est bien suffisant.

Moi je n'utiliserai pas une déclaration globale pour instancier une variable feuille. Une déclaration au coup par coup me semble bien préférable. (même si ça parait un peu répétitif)

D'ailleurs la variable f ne sert à rien vu que le USF est "dédié" à la feuille "Budget"

La notation range("...") est préférable au [...]

Même si je vois très bien le pourquoi de la chose... la Sub Tx_Bord() est plus à sa place dans le module USF (in Private...)

A+

63transfert-vg.xlsm (30.17 Ko)

Bonjour

Un essai

Bonjour Gmb,

Je te remercie pour tes explications. Mais ce n'est pas le résultat qu je cherche. Je ne veux pas copier toute la ligne mais seulement certaines colonnes.

D'ailleurs ton fichier "Transfert VG.xlsm" me cause un problème, pourquoi est-ce 2 fichiers s'ouvrent ci-joint image(le 1er "Transfert VG.xlsm:1" et le 2ème "Transfert VG.xlsm:2".

rien compris
je voudrais transférer après filtrage:
Sheets("Budget").Range("B")=Sheets("Base").Range("B")
Sheets("Budget").Range("C")=Sheets("Base").Range("C")
Sheets("Budget").Range("D")=Sheets("Base").Range("M")
Sheets("Budget").Range("E")=Sheets("Base").Range("E")
Sheets("Budget").Range("F")=Sheets("Base").Range("N")

ou bien dites-moi comment mettre une plage filtrée dans un tableau.

Pour le 2ème fichier, il est vide. Je crois que tu t'es trompé de fichier.

Merci beaucoup.

Bonjour à tous,

Ce que j'ai fait hier soir et oublié de transmettre correctement :

            For Each Plage In .[A1].CurrentRegion.SpecialCells(xlCellTypeVisible).Areas
                NBd = NBd + Plage.Rows.Count
            Next Plage
            NBd = NBd - 1
            .[B2].Resize(NBd).Copy ShTxB.[B2]
            .[C2].Resize(NBd).Copy ShTxB.[C2]
            .[M2].Resize(NBd).Copy ShTxB.[D2]
            .[E2].Resize(NBd).Copy ShTxB.[E2]
            .[N2].Resize(NBd).Copy ShTxB.[F2]

eric

Edit: c'est vrai qu'on n'est pas obligé de compter les lignes visibles comme le fait galopin.

Voir aussi ma réponse de 7h10

A+

Bonjour,

Voir aussi ma réponse de 7h10

En effet, j'ai vu ce post et j'ai joint une image pour montrer ce que j'ai obtenu.

Quand j'ouvre le fichier de Galopin01, j'en ai 2 qui s'ouvrent et je n'ai pas compris pourquoi. l'un se nomme "Transfert VG.xlsm:1" et l'autre "Transfert VG.xlsm:2". J'ai eu beau cliqué sur le bouton pour afficher l'userform mais rien ne se passe. Bizarre, je l'ai ouvert et fermé plusieurs fois en prenant soin d'activer les macros sans succès.

Eriiic, ton dernier code répond bien à mes attentes, je vous en remercie beaucoup.

Cordialement,

Re,

Si tu as vu l'édit, tu peux enlever les 4 premières lignes, inutiles.

eric

Re,

Je n'ai pas compris ce que je veux dire, quelles 4 premières lignes je dois supprimer?

Cordialement,

CP4

Les 4 premières lignes du code que j'avais mis.

            .[B2].Resize(NBd).Copy ShTxB.[B2]
            .[C2].Resize(NBd).Copy ShTxB.[C2]
            .[M2].Resize(NBd).Copy ShTxB.[D2]
            .[E2].Resize(NBd).Copy ShTxB.[E2]
            .[N2].Resize(NBd).Copy ShTxB.[F2]

est suffisant.

eric

Bonjour Eric,

C'est ce que j'avais copié sur mon fichier et ça fonctionne très bien. Je t'en remercie beaucoup.

à chaque fois que j'utilise les filtres, j'oublie les syntaxes, et je m'embrouille.

J'ai une autre question en rapport avec les filtres. Comment mettre les lignes filtrées dans un tableau.

Sans filtre je sais le faire mais pas avec filtre. Merci beaucoup.

Bon dimanche

Cordialement,

Paul

Bonjour,

Comment mettre les lignes filtrées dans un tableau.

Le plus simple et sans doute le plus rapide : copier les lignes filtrées dans une feuille temporaire que tu supprimes après, et lire en bloc ces données.

Ex:

    Dim datas As Variant, sh As Worksheet, shTmp As Worksheet
    Application.ScreenUpdating = False
    Set sh = ActiveSheet
    Set shTmp = Sheets.Add
    With shTmp
        sh.[A1].CurrentRegion.Copy .[A1]
        datas = .[A1].CurrentRegion.Value
        Application.DisplayAlerts = False
        .Delete
        Application.DisplayAlerts = True
    End With

eric

Bonsoir Eric,

Astucieux, c'est une très bonne idée, je n'y avais pas pensé à une feuille intermédiaire.

Merci beaucoup pour ton aide.

Cordialement,

Paul

Rechercher des sujets similaires à "transfert champs plage filtree feuille"