La procedura Indiceriga.

Utilizzo: Copia/Incolla con ricerca della prima riga libera per incollare.

Questa procedura non esiste come funzione predefinita in Excel e non è documentata, quindi non cercatela nella Guida in Linea. Si basa sul dimensionamento di una variabile: "Indiceriga". Esistono altre procedure che consentono di "incollare" dati su fogli di lavoro, cercando la prima riga libera per "scaricare" i dati precedentemente copiati, ma si basano su una ricerca (della prima riga libera), che parte dall' ultima riga, e sale verso la prima: questo vuol dire che se noi  avessimo destinato per l'incollaggio, per esempio, la zona che va dalla prima alla 50esima riga, e nella riga 60 avessimo scritto altri dati, l'incollaggio avverrebbe non nella zona che noi vorremmo (righe 1-50), ma al di sotto della riga 60. La procedura che propongo, permette di "mirare" con esattezza la zona di destinazione, e qui, cercare la prima riga libera per incollare i dati copiati, indipendentemente dalla presenza di dati in altre righe del foglio di destinazione. I riferimenti alle celle di questo esempio dovranno ovviamente essere adattati alle vostre esigenze, come pure il nome del/dei fogli (pincopallino). In verde sono i commenti:

Sub CopiaIncolla()
'dichiaro la variabile Indiceriga
Dim Indiceriga As Integer
ActiveSheet.Range("A1:D1").Select
'seleziono le quattro celle da copiare(o 'quelle che vorrete) sul foglio attivo
Selection.Copy  
'copio il contenuto

Sheets("pincopallino").Select
'poi vado al foglio su cui devo incollare(incollerò a 'partire dalla D2:G2)
For Indiceriga = 2 To 200
'dimensiono la lunghezza in righe in cui incollare (dalla '2 alla 200)
 

'con il foglio di destinazione selezionato
With Worksheets("pincopallino").Cells(Indiceriga, 4)
'qui dico di iniziare con la cella che parte nella '2° riga(di Indiceriga), ma nella colonna 4 (la D)
If .Value = "" Then GoTo 10
' se trovo una cella vuota nella colonna D, passo al '10:
End With

Next Indiceriga
'se ho trovato la cella 2 occupata (non vuota) passo alla 'successiva

Exit Sub

10:
'ho trovato una cella vuota e devo ripetere le selezioni per incollare
Sheets("pincopallino").Select
Cells(Indiceriga, 4).Select
 'seleziono la prima riga vuota trovata Colonna D
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
'incollo solo i valori, non eventuali formule

Application.CutCopyMode = False
'elimina il tratteggio delle celle copiate

'ed esco

End Sub
 

Per chi ha un minimo di conoscenza in Vba non risulterà difficile adattare le istruzioni alle proprie esigenze. La procedura lavora anche sul copia/incolla di più righe: se si fosse selezionato A1:D5, cioè tutti i dati compresi dalla cella A1 alla D5 (cinque righe), il Paste (incollaggio) sarebbe avvenuto occupando 5 righe vuote, in sequenza.