Recopie de colonnes dans un tableau

Bonsoir à tous,

J'aimerais recopier des colonnes spécifiques d'une feuille dans un tableau.

J'utilise le code suivant :

Sub CopieRangeTB()
    Dim Tb() As Variant
    Dim Lg As Long
    With Worksheets("Feuil1")
        .[F1].CurrentRegion.ClearContents
        Lg = .Cells(.Rows.Count, 1).End(xlUp).Row
        MsgBox "Lg : " & Lg
        'Recopie des colonnes A, C et D dans le tableau Tb()
        Tb = Union(.Range("A1:A" & Lg), .Range("C1:C" & Lg), .Range("D1:D" & Lg))
        .Range("F1").Resize(UBound(Tb, 1), UBound(Tb, 2)) = Tb
    End With
End Sub

Mais je n’obtiens que la première colonne A ?

Une rectification du code ?

Merci d'avance.

Bonjour

Faut croire que cette méthode ne gère pas les plages discontinues

Pas trouvé de solution à mon niveau

Existe bien sur d'autre possibilités de recopie

Wait & See

Bonjour,

Banzai64 a écrit :

Existe bien sur d'autre possibilités de recopie

Wait & See

Lesquelles ?

Bonsoir,

Sub CopieRangeTB()
    Dim Tb As Range
    Dim Lg As Long
    With Worksheets("Feuil1")
        .[F1].CurrentRegion.ClearContents
        Lg = .Cells(.Rows.Count, 1).End(xlUp).Row
        'MsgBox "Lg : " & Lg
        'Recopie des colonnes A, C et D dans le tableau Tb()
        Set Tb = Union(.Range("A1:A" & Lg), .Range("C1:D" & Lg))
        Tb.Copy .Range("F1").Resize(Tb.Rows.Count, Tb.Columns.Count)
    End With
End Sub

Mais avec ton .[F1].CurrentRegion.ClearContents tu n'as pas intérêt à ce que qcq'un saisisse qcq chose en E1. Un peu dangereux je trouve...

eric

Bonjour eriiic,

Tb doit être une variable tableau, parce que j'en ai besoin pour appliquer un traitement ultérieur.

Pour le CurrentRange, j'essaye d'effacer les anciennes données contenues dans cette plage qui commence par la cellule $F$1.

Parce que la plage "A1:D1" est un résultat d'un filtre qui change selon les critères.

18rangetotb-v001.zip (12.01 Ko)

Bonjour,

Tb doit être une variable tableau, parce que j'en ai besoin pour appliquer un traitement ultérieur.

Tu peux travailler avec comme avec un tableau : Tb(2,1) te ramène Philippe.

Sinon inclus la colonne B même si elle ne te sert pas. Sur la feuille tu peux la supprimer ensuite si tu veux (ou bien utiliser ce que je t'ai proposé).

Car à part boucler (ce qui complique et prend du temps pour rien je trouve) pour charger ton tableau sans B je ne vois pas.

Pour le CurrentRange, j'essaye d'effacer les anciennes données contenues dans cette plage qui commence par la cellule $F$1.

Je l'avais bien compris comme ça. Teste ta macro en mettant un simple caractère en E1 avant et tu verras...

Tu connais la largeur, tu peux connaitre la hauteur, tu ferais mieux de passer par là.

eric

Bonsoir eriiic,

Ca fonctionne bien avec un tableau qui contient toutes les colonnes de la plage Range("A1:D" & Lg) (Résultat d'un filtre).

Mais, si on a besoin de boucler sur les colonnes du tableau Tb(), on aura un problème, non ?

Bonsoir,

Si c'est un range tu peux boucler sur lignes et colonnes de la même façon.

Mais oublie ce que je t'avais dit pour le déclarer en range.

Si tb.address retourne bien "$A$1:$A$7,$C$1:$D$7", tb(5,2) retourne Achat qui correspond à la colonne B sensée être absente...

Donc sers-toi en pour la copie en F:H si tu veux. Mais pour tes traitements ultérieurs prend un tableau, et tant pis si des colonnes ne te servent pas. Ca sera beaucoup plus rapide.

eric

Rechercher des sujets similaires à "recopie colonnes tableau"