Copia in prima colonna libera
Hai un problema con Excel? 
Copia in prima colonna libera
di Valeria80 (utente non iscritto) data: 07/05/2013 12:24:00
Buongiorno a tutti,
vi spiego cosa dovrei fare: vorrei copiare una range di celle definito e incollarlo nella prima colonna libera di uno sheet di un'altra cartella di lavoro.
Quindi:
- devo copiare da I2 a I67 dello sheet "Forecast" del File "Pippo";
- devo trovare la prima colonna libera (a partire dalla colonna I) nello sheet "Recap" del File "Pluto" e incollare valori e formato del range copiato al passaggio precedente;
- salvare e chiudere il File "Pluto".
Il file Pluto potrebbe trovarsi anche in un'altra directory rispetto a quella del file "Pippo".
Spero di avervi fornito con chiarezza le informazioni necessarie.
Grazie a tutti in anticipo.
Buona giornata
Valeria
Ordine fra i documenti
di Luca (utente non iscritto) data: 07/05/2013 12:33:21
Buongiorno, ho un quesito da proporvi nella speranza che qualcuno mi possa dare una mano.... ho un foglio che chiamerò "sorgente" nel quale io quotidianamente registro dei dati che mi forniscono. Ogni riga contiene una serie di dati che fanno riferimento a un singolo documento.
Le colonne principali invece sono due; il mese nel quale è stato registrato e la tipologia di documento espressa con dei numeri ( es alla tipologia reclami so che corrisponde il codice 001 quindi tutti i reclami avranno come codice 001)
Ora quello che serve a me è avere su di un foglio di lavoro due testbox che mi consentano:
1. Di ricercare tutti i documenti registrati in un preciso mese o Ancora meglio in un lasso di tempo ( es da 01/01/2013 al 15/02/2013 )
Sarebbe utile però, una volta visualizzati tutti i documenti di quel mese, che questi siano anche in ordine di codice ( ma se questa è una cosa difficile gli ordino successivamente io )
2. Di poter ricercare per tipologia ( es tutti i reclami con codice 001)
La cosa più importante per me è che una volta che io vado a modificare il file sorgente automaticamente le mie ricerche siano aggiornate a quelle modifiche.
Se qualcuno ha un idea di come poter realizzare questo codice mi faccia sapere.
Grazie
di totygno71 data: 07/05/2013 13:18:56
@Valeria80
Tu hai già scritto qualcosa di codice? se si puoi postare?
@Luca
devi aprire una nuova discussione e non continuarne una già aperta_
Ciao
di Valeria80 data: 07/05/2013 14:04:32
Grazie Totygno71 della rapidità di risposta.
Questo è il codice, ma:
1) mi copia i dati in tutte le colonne da colonna 9 a colonna 100;
2) Il file "Pluto" deve essere nella stessa directory del file di origine;
3) copia solo i valori e non il formato.
Grazie ancora
Valeria
Sub Esporta_Report()
Dim wk1 As Workbook
Dim wk2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim Intervallo As Range
On Error GoTo RigaErrore
Application.ScreenUpdating = False
Set wk1 = ThisWorkbook
Set wk2 = Workbooks.Open(wk1.Path & "/" & "Pluto.xlsx")
Set sh1 = wk1.Worksheets("Forecast")
Set sh2 = wk2.Worksheets("Report")
Set Intervallo = sh1.Range("I2:i67")
x = MsgBox("Sta per essere estratto il Report. Procedere?", vbYesNo)
If x = vbYes Then
Intervallo.Copy
For colonna = 9 To 100 Step 1
Cells(2, colonna).Select
If Cells(2, colonna).Value = "" Then
Cells(2, colonna).PasteSpecial xlPasteValues
End If
Next
wk2.Save
wk2.Close
Application.CutCopyMode = False
Worksheets("Input").Select
MsgBox "Report con dati consuntivi creato correttamente", vbInformation
RigaChiusura:
Set sh2 = Nothing
Set sh1 = Nothing
Set wk1 = Nothing
Set wk2 = Nothing
Exit Sub
RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura
End If
End Sub
|
di totygno71 data: 07/05/2013 14:42:43
cit" Questo è il codice, ma:
1) mi copia i dati in tutte le colonne da colonna 9 a colonna 100;
e tu vorresti che lo copiasse solo nella prima colonna libera?
3) copia solo i valori e non il formato.
e tu vorresti copiare tutto
For colonna = 9 To 100 Step 1
Cells(2, colonna).Select
If Cells(2, colonna).Value = "" Then
Intervallo.Copy Cells(2, colonna)
Exit for
End If
Next
2) Il file "Pluto" deve essere nella stessa directory del file di origine;
Cosa intendi dire?
di Valeria80 (utente non iscritto) data: 07/05/2013 15:30:07
cit" Questo è il codice, ma:
1) mi copia i dati in tutte le colonne da colonna 9 a colonna 100;
e tu vorresti che lo copiasse solo nella prima colonna libera? ESATTO
3) copia solo i valori e non il formato.
e tu vorresti copiare tutto ESATTO, VALORI E FORMATO (NON LE FORMULE)
2) Il file "Pluto" deve essere nella stessa directory del file di origine;
Cosa intendi dire? NEL CODICE CERCO IL FILE NELLO STESSO PATH DEL W1 (W1 IS THIS WORKBOOK) --> Set wk2 = Workbooks.Open(wk1.Path & "/" & "Pluto.xlsx"). SE IO VOLESSI SPOSTARE IL FILE PLUTO DI DESTINAZIONE IN UN'ALTRA CARTELLA, COSA DOVREI SCRIVERE?
Grazie!
di totygno71 data: 07/05/2013 15:38:33
il percorso per raggiungerlo tipo:
Set wk2 = Workbooks.Open Filename:="\documentivaleria80Pluto.xlsx"
ciao
di Valeria80 (utente non iscritto) data: 07/05/2013 15:55:56
Esatto. Scusa non sono molto esperta di vba, il codice che ti ho inviato è frutto di ricerche su internet e modifiche da me apportate con n tentativi...
Quindi direi che il punto 2 è risolto...
di Baz (utente non iscritto) data: 07/05/2013 16:17:25
Ciao,
provo intromettermi, sperando possa essere utile
vedi se ti va bene
'punto 1: trovo la prima colonna free della 2^ riga
Colfree = Cells(2, 1).End(xlToRight).Column + 1
'punto 2:
'copio i formati
Cells(2, Colfree).PasteSpecial xlPasteFormats
'copio i valori
Cells(2, Colfree).PasteSpecial xlPasteValues |
di Valeria80 data: 07/05/2013 16:49:40
Risolto!
Grazie mille Baz e totygno71.
Allego il codice completo, per altri utenti interessati (ho inserito 9 nella riga Colfree = sh2.Cells(2, 9).End(xlToRight).Column + 1
perchè nel mio caso le prime 9 colonne devono essere escluse).
Grazie ancora e buona giornata
Valeria
Sub Esporta_Report()
Dim wk1 As Workbook
Dim wk2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim Intervallo As Range
On Error GoTo RigaErrore
Application.ScreenUpdating = False
SProteggi_File
Set wk1 = ThisWorkbook
Set wk2 = Workbooks.Open(wk1.Path & "/" & "Pluto.xlsx")
Set sh1 = wk1.Worksheets("Forecast")
Set sh2 = wk2.Worksheets("Report")
Set Intervallo = sh1.Range("I2:i67")
x = MsgBox("Sta per essere estratto il Report. Procedere?", vbYesNo)
If x = vbYes Then
Intervallo.Copy
Colfree = sh2.Cells(2, 9).End(xlToRight).Column + 1
Cells(2, Colfree).PasteSpecial xlPasteFormats
Cells(2, Colfree).PasteSpecial xlPasteValues
wk2.Save
wk2.Close
Application.CutCopyMode = False
MsgBox "Report con dati consuntivi creato correttamente", vbInformation
RigaChiusura:
Set sh2 = Nothing
Set sh1 = Nothing
Set wk1 = Nothing
Set wk2 = Nothing
Exit Sub
RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura
End If
End Sub |
di Valeria80 data: 07/05/2013 17:12:32
Ancora una cosa: per adattare in automatico l'area di stampa ("allungandola" alla nuova colonna inserita) che comando devo inserire?
Grazie, ciao
Valeria
di totygno71 (utente non iscritto) data: 07/05/2013 18:10:14
Prova così ...
Intervallo.Copy
Colfree = sh2.Cells(2, 9).End(xlToRight).Column + 1
Cells(2, Colfree).PasteSpecial xlPasteFormats
Cells(2, Colfree).PasteSpecial xlPasteValues
'a questo punto Aggiungi
sh2.PageSetup.PrintArea = Colfree |
di Valeria80 (utente non iscritto) data: 08/05/2013 09:14:27
Provato, ma mi dice "1004 Riferimento non valido". Mi apre il file Pluto, mi aggiunge la colonna, adegua l'area di stampa ma poi non riesce a salvare e chiudere il file Pluto...
grazie, ciao
Valeria
di Vecchio Frac data: 08/05/2013 10:16:19
Non sono sicuro che davvero con quel codice ti "...adegua l'area di stampa" perchè PrintArea vuole un riferimento ad un range sottoforma di stringa (e non un numero come Colfree).
Prova a riscrivere l'ultima riga come segue, che imposta l'area di stampa da riga 2 della colonna 9 fino a riga 67 della colonna "colfree".
sh2.PageSetup.PrintArea = sh2.Range(sh2.Cells(2, 9), sh2.Cells(67, Colfree)).Address |
di Valeria80 (utente non iscritto) data: 08/05/2013 10:29:10
Perfetto, così funziona.
Grazie Vecchio Frac, e ancora grazie e totygno71 e Baz per il prezioso supporto.
Buona giornata a tutti
Valeria
di Vecchio Frac data: 08/05/2013 10:49:17
Bene.
Se ritieni conclusa la discussione, puoi marcarla come "Risolta" spuntando la relativa casellina in una nuova risposta, grazie.
di Valeria80 data: 08/05/2013 10:58:24
Mi sembrava di aver spuntato la casella, ma provvedo subito.
Ciao
Vuoi Approfondire?