1 votes

Comment copier une plage de données filtrées et la coller dans une nouvelle feuille de travail en Excel VBA (sans utiliser le presse-papiers) ?

Je veux copier les colonnes A et B dans une nouvelle feuille avec les plages A et B (le filtre de la feuille source est appliqué dans la colonne H).

Ce code est enregistré, lorsque je l'utilise, une erreur aléatoire se produit. Parce que j'ai 5 sous-macro et quand j'appelle ces sous-macro, elles ne fonctionnent pas correctement. Mais les macros individuelles fonctionnent parfaitement.

J'ai donc besoin de copier sans utiliser le presse-papiers comme cette méthode. Elle n'est pas utilisée lorsque la condition de filtre est appliquée.

Sheets("GROUP1").Range("A:B").Value = Sheets("Sheet3").Range("A:B").Value

Macro enregistrée

Sub Copypaste()
'Application.ScreenUpdating = False

    Sheets("GROUP1").Select

    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1:H1").Select
    Range("H1").Activate
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A:$H").AutoFilter Field:=8, Criteria1:="K-True", Operator:=xlFilterValues
    Columns("A:B").Select
    Application.CutCopyMode = False
    Selection.Copy

       DoEvents
    Sheets("Sheet3").Select
    Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

1voto

Edu Garcia Points 107

Ce que vous pourriez faire, c'est boucler la feuille de source en vérifiant par Cell.RowHeight > 0 puis le réglage DestinationCell.Value = SourceCell.Value . Ex :

Sub Copypaste()
    Dim lRow As Long, lLastRow As Long, LRowCount As Long

    Sheets("GROUP1").Select

    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("A1:H1").Select
    Range("H1").Activate
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A:$H").AutoFilter Field:=8, Criteria1:="K-True", Operator:=xlFilterValues        
    lRowCount = 1
    lLastRow = ActiveSheet.Cells.SpeciallCells(xlCellTypeLastCell).Row

    For lRow = 1 to lLastRow

        If ActiveSheet.Range(lRow).RowHeight > 0 Then
            Sheets("Sheet3").Range("A" & lRowCount & ":B" & lRowCount).Value = ActiveSheet.Range("A" & lRowCount & ":B" & lRowCount).Value
            lRowCount = lRowCount + 1
        End If

    Next

End Sub

P.S. : Si vous avez des problèmes, faites-le moi savoir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X