Buona giornata, Max;
l'unica differenza che posso rilevare tra il Tuo Codice VBA e quello proposto in Risposta #6 è nella definizione delle Colonne da considerare nei Range da copiare.
Nel Tuo Codice VBA è definito in 18 Colonne a prescindere; nel mio Codice VBA il numero delle Colonne è calcolato con la Variabile "Cln".
Questo tipo di soluzione, nel mio Codice VBA, consente di poter gestire l'aggiunta di eventuali ulteriori "Campi" (Colonne) nei tre Fogli di lavoro.
Prendendo ad esmpio il Tuo File proposto in #5, le Colonne calcolate sono 18 nel Foglio di lavoro "dividi" mentre, nel Foglio di lavoro "descrizione", avremo una sola Colonna.
Riporto il Codice VBA con i commenti a margine delle istruzioni.
Option Explicit
Sub Aggiorna()
Application.ScreenUpdating = False
Dim NrcX As Long, NrC As Long, Cln As Long, x As Long ' Definisce le Variabili
NrC = Range("A" & Rows.Count).End(xlUp).Row ' Righe da considerare in "unito"
Cln = Cells(1, Columns.Count).End(xlToLeft).Column ' Colonne da considerare in "unito"
If NrC < 2 Then NrC = 2
Range(Cells(2, 1), Cells(NrC, Cln)).ClearContents '<<< 2,1 = A2 Cln = R (Cln = 18)
With Worksheets("dividi") '<<< nome foglio
Cln = .Cells(2, Columns.Count).End(xlToLeft).Column ' Colonne da considerare in "dividi"
NrcX = .Range("A" & Rows.Count).End(xlUp).Row ' Righe da considerare in "dividi"
NrC = 2 ' Definisce la Riga da cui partire in "unito"
For x = 3 To NrcX ' 3 = Riga da cui partire in "dividi"
Range(.Cells(x, 1), .Cells(x, Cln)).Copy ' Definisce il Range da copiare (Cln = 18)
Cells(NrC, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' Incolla "Valori" in "unito"
NrC = NrC + 2 ' Incremento in "unito"
Next x
End With
With Worksheets("descrizione") ' Nome Foglio di lavoro
Cln = .Cells(2, Columns.Count).End(xlToLeft).Column ' Colonne da considerare in "descrizione"
NrcX = .Range("A" & Rows.Count).End(xlUp).Row ' Righe da considerare in "descrizione"
NrC = 3 ' Definisce la Riga da cui partire in "unito"
For x = 3 To NrcX ' 3 = Riga da cui partire in "descrizione"
Range(.Cells(x, 1), .Cells(x, Cln)).Copy ' Definisce il Range da copiare (Cln = 1)
Cells(NrC, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' Incolla "Valori" in "unito"
NrC = NrC + 2 ' Incremento in "unito"
Next x
End With
Application.CutCopyMode = False ' Dichiara la fine del "Copia"
Application.ScreenUpdating = True
Cells(2, 1).Select ' Posiziona il Cursore in Cella "A2"
End Sub
Allego il File con il quale ho eseguito i miei Test.
A disposizione.
Buona serata.
Giuseppe