Ancora una procedura per Copiare/Incollare

Utilizzo : Copia/Incolla dati in celle NON contigue con destinazione in celle contigue.

ovvero: copia dei nuovi dati inseriti nella prima riga libera di un elenco, non tutte le celle, ed incollaggio su una tabella elenco posta su un altro foglio.

La procedura  si basa sulla necessità di NON copiare tutte le celle di un elenco, ma solo alcune, e di ricostruire un nuovo elenco in altra zona, con i dati inseriti in celle contigue per successivi conteggi. Il codice cerca l'ultima riga dell'elenco nel quale sono stati inseriti i nuovi dati, seleziona le celle che devono essere copiate, si sposta sul foglio di destinazione, nel quale sono state definite le celle iniziali, qui cerca la prima riga libera, e "scarica" (incolla) i dati copiati. La procedura esegue il "copia/Incolla" una cella per volta, selezionando alternativamente il foglio con la cella da copiare e quindi il foglio con la cella dove incollare, ma grazie all'istruzione : Application.ScreenUpdating = False , non si notano saltellamenti. Questa è la routine:

Sub copiazza()
'I caratteri in verde, dopo l'apice, sono commenti
'e se vuoi li puoi togliere.


Application.ScreenUpdating = False
Worksheets("Foglio1").Select
Range("A4").Select

Selection.End(xlDown).Select
Selection.Copy
 'copio il nome (1° colonna partendo dalla B)

Worksheets("Foglio2").Select  ' seleziono il foglio2
Range("B5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
  'trovo la prima cella libera
'nella colonna B, la seleziono e incollo
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'------------------------------
Worksheets("Foglio1").Select  'poi torno sul foglio1
Range("A4").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Select
 'copio la data (2° cella 2° colonna dell'elenco)
Selection.Copy

Worksheets("Foglio2").Select 'torno sul foglio2
Range("B5").Select
Selection.End(xlDown).Select
 'vado alla cella ultima occupata
ActiveCell.Offset(0, 1).Select  'seleziono la colonna accanto
'e incollo
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'-------------------------------
Worksheets("Foglio1").Select
Range("A4").Select
Selection.End(xlDown).Select

ActiveCell.Offset(0, 3).Select 'copio il primo valore (4° cella 4°colonna)
Selection.Copy

Worksheets("Foglio2").Select
Range("B5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'--------------------------------
Worksheets("Foglio1").Select
Range("A4").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 5).Select
 'copio il secondo valore (6°cella 6°colonna)
Selection.Copy

Worksheets("Foglio2").Select
Range("B5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 3).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'--------------------------------
Worksheets("Foglio1").Select
Range("A4").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 8).Select
  'copio il terzo valore (9° cella 9a colonna)
Selection.Copy

Worksheets("Foglio2").Select
Range("B5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 4).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'-------------------------------
Worksheets("Foglio1").Select

Application.CutCopyMode = False 'questo evita i trattini intorno alla/alle
'celle copiate

End Sub
 

I riferimenti alle celle di inizio elenco e di inizio destinazione si capiscono meglio se scaricherete il file allegato. la procedura, anche se appare lunga, è semplice, e si ripete tante volte quante sono le celle da copiare. Sotto due immagini, il foglio1 con l'elenco in cui si inseriscono i dati, ed il foglio2 con le destinazioni.

File consultabile e scaricabilie :  cartelennius.zip   16 kb