2013-04-17 1 views
2

Il s'agit d'une question Visual Basic difficile, donc je ne suis pas sûr que quiconque dans ce forum puisse vous aider. Mais ça vaut le coup d'essayer.Maintenir l'intégrité des lignes dans le collage des lignes non vierges

J'ai écrit un programme dans Visual Basic pour être utilisé comme macro dans Excel.

Dans la macro, je prends des données dans sheet1 (FINAL) et copie & en collant les valeurs dans sheet2 (Data). Ma plage de données dans sheet1 contient de nombreuses cellules vides, donc je voulais créer un programme qui ne colle que des lignes avec des valeurs (par rapport aux lignes avec seulement des cellules vides).

Mon programme modifie maintenant ma plage de données dans la feuille 1 avant de coller dans la feuille 2 et je ne veux pas que ... ..mon formatage soit tout foutu en conséquence aussi. Au lieu de cela, je veux que les données de mon sheet1 restent complètement identiques et que les lignes vierges soient supprimées dans l'action de collage entrant dans sheet2.

Mes données dans sheet1 commencent à la colonne AL et passent à la colonne CD.

Il est très important que l'intégrité des lignes soit maintenue. Je ne veux pas que les cellules vides soient effacées pendant la pâte, mais plutôt les BLANK ROWS de la gamme à effacer pendant la pâte. Donc, s'il y a une ligne entre les colonnes AL et CD qui n'a même qu'un seul point de données, la ligne dans son ensemble doit être maintenue dans la pâte. Mais pour toutes les lignes entre les colonnes AL et CD qui sont complètement vides, elles doivent être supprimées dans l'action de collage entrant dans sheet2.

Mon programme existant est ci-dessous. Toute aide serait grandement appréciée.

Dim ws As Worksheet 

Set ws1 = Worksheets("FINAL") 
Set ws2 = Worksheets("Data") 

With ws1.UsedRange 
lastcolumn = .Cells(1, 1).Column + .Columns.Count - 1 
lastrow = .Cells(1, 1).Row + .Rows.Count - 1 
End With 

ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).AutoFilter field:=1, Criteria1:="<>" 
ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).Copy 

ws2.Range("A1").PasteSpecial xlPasteValues 

Application.CutCopyMode = False 

Répondre

2

Ceci est une question difficile Visual Basic, donc je ne suis pas sûr si quelqu'un dans ce forum sera en mesure d'aide. Mais ça vaut le coup d'essayer.

espère qu'il valait la peine d'essayer: P

Est-ce ce que vous essayez?

Sub Sample() 
    Dim wsInput As Worksheet, wsOutput As Worksheet 
    Dim rng As Range, CellsTobeCopied As Range, aCell As Range 

    '~~> Sheet which has range that you want to copy 
    Set wsInput = ThisWorkbook.Sheets("Sheet1") 

    '~~> Set range that you would like to copy 
    Set rng = wsInput.Range("A1:E4") 

    '~~> Output Sheet where you want to paste 
    Set wsOutput = ThisWorkbook.Sheets("Sheet2") 

    For Each aCell In rng.Rows 
     '~~> Check if the entire row is blank 
     If Application.WorksheetFunction.CountA(aCell) <> 0 Then 
      '~~> Construct your range to be copied 
      If CellsTobeCopied Is Nothing Then 
       Set CellsTobeCopied = aCell 
      Else 
       Set CellsTobeCopied = Union(CellsTobeCopied, aCell) 
      End If 
     End If 
    Next 

    '~~> Copy final range 
    If Not CellsTobeCopied Is Nothing Then 
     CellsTobeCopied.Copy 
     '~~> In case you want to preserve formats 
     wsOutput.Range("A1").PasteSpecial xlPasteAll 

     '~~> If you wan tto paste values then comment the above and use this 
     ' CellsTobeCopied.Copy wsOutput.Range("A1") 
    End If 
End Sub 

Screenshot

enter image description here

+0

Wow! C'est assez impressionnant! Oui ... cela fonctionne parfaitement. Je vous remercie beaucoup pour votre aide. – user2284021

+0

Heureux d'être de l'aide :) –

+0

Je viens de poster une autre question, mais il est plus basé sur Excel que VB, au moins je pense. Puis encore ..... Je ne sais pas si je peux le faire dans Excel sans un type de macro. Mais n'hésitez pas à consulter mon dernier message et à nous faire part de vos commentaires si vous en avez. Il s'agit de boutons radio dans Excel. Vous m'avez très impressionné de résoudre mon dernier problème, alors j'ai pensé que je vous le ferais savoir au cas où vous auriez un aperçu. – user2284021

Questions connexes