Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Non ho però capito se il Range destinato a Foglio2 e Foglio3 sul Foglio1 può cambiare, cioè se A4:H12 e A14:H30 sono fissi sul Foglio1 o se possono/devono espandersi/contrarsi.
Si, il Range destinato al Foglio 1 può cambiare cioè A4:H12 e A14:H30non sono fissi ma devono appunto espandersi/contrarsi (solo per il numero di righe però).
Ho provato tutte e due le macro: in quella di elianof, la riga 14 rimane fissa quando invece dovrebbe adattarsi alla fine del range che desume dal Foglio 2 (ma il resto è perfetto :-)), mentre nella macro di Gamberini la riga 14 viene "sovrascritta" qualora il range di dati nel foglio 2 sia superiore alle 9 righe (mi pare di aver capito che viene sovrascritto dal codice:
sh3.Range("A1").CurrentRegion.Copy _
Destination:=.Range("A14")
In teoria bisognerebbe fare in modo che la CurrentRegion.Copy _ si riferisca ad una destinazione variabile e che non necessariamente deve essere copiata a partire da A14. Potrebbe essere A20, A200 etc etc.
Inoltre, se possibile, tra i vari Destination:=.Range("XYZ") dovrebbe rimanerci una riga bianca, o quantomeno qualcosa che mi faccia capire dove finisce una destination range e ne inizia un'alltra. Poi eventualmente per il cartiglio posso lavorare anche a mano.
Grazie ancora di tutto.
Public Sub m()
'dichiaro le variabili
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim rng As Range
Dim lUltRiga As Long
Dim s1 As String
Dim s2 As String
'nelle due stringhe metto cosa deve trovarsi
'come intestazione dei dati dei fogli Foglio2
'e Foglio3 in Foglio1(modifica a tuo piacimento)
s1 = "Titolo dei dati derivanti dal Foglio2"
s2 = "Titolo dei dati derivanti dal Foglio3"
'metto un riferimento ai fogli
With ThisWorkbook
Set sh1 = .Worksheets("Foglio1")
Set sh2 = .Worksheets("Foglio2")
Set sh3 = .Worksheets("Foglio3")
End With
With sh1
'trovo l'ultima riga utilizzata nel Foglio1
lUltRiga = .Range("A" & .Rows.Count).End(xlUp).Row
'cancello il contenuto ed eventuali
'formattazioni del Foglio1 da A3 a H(n)
.Range("A3:H" & lUltRiga).Clear
'inserisco in A3 l'intestazione per i dati
'del Foglio2
.Range("A3").Value = s1
'copio/incollo i dati di Foglio2
sh2.Range("A1").CurrentRegion.Copy _
Destination:=.Range("A4")
'trovo l'ultima riga utilizata adesso in Foglio1
lUltRiga = .Range("A" & .Rows.Count).End(xlUp).Row
'inserisco in A(n) l'intestazione per i dati
'del Foglio3 lasciando una riga bianca
.Range("A" & lUltRiga + 2).Value = s2
'copio/incollo i dati del Foglio3
sh3.Range("A1").CurrentRegion.Copy _
Destination:=.Range("A" & lUltRiga + 3)
'eventuali formattazioni alle intestazioni
'(commenta o elimina il codice se non ti serve)
'***INIZIO FORMATTAZIONE***
Set rng = .Range("A3,A" & lUltRiga + 2)
With rng.Font
.Size = 14
.ColorIndex = 3
.Bold = True
'ecc
End With
'***FINE FORMATTAZIONE***
End With
'Set a Nothing delle variabili oggetto
Set rng = Nothing
Set sh1 = Nothing
Set sh2 = Nothing
Set sh3 = Nothing
End Sub
Se(se) servono altre formattazioni in aree distinte del Foglio1, fai sapere quali e come vuoi formattarle. Grazie.
--
La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.
--
Mauro Gamberini - Microsoft© MVP(Excel)