Condividi:        

Vba excel incollare range variabile da più fogli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 27/11/13 10:41

Ciao a tutti!!!

Sono un neofita del vba for application su excel, mi chiedevo una cosa e spero mi possiate dare una mano.

Ho la necessità di incollare sul foglio 'attivo' i dati presenti su di un solo altro file (aperto), ma di alcuni suoi fogli?

Il range da copiare è variabile. Ovvero all'altezza della seconda riga ho l'intestazione che selezionata compre la lunghezza delle 'colonne' utili, ma ho un range variabile di 'righe' (ad es. foglio1 40 colonne per 20 righe partendo dalla seconda, mentre sul foglio2 ho 40 colonne per 150 righe, il foglio3 invece non lo vorrei considerare, ecc ). I dati da incollare si posizionerebbero nel primo foglio del file 'attivo' uno sotto l'altro. Io sono a conoscenza del comando:

Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Activate

ovvero so posizionarmi (anche se non credo sia il modo più efficiente) poi successivamente dovrei riuscire ad incollare il contenuto copiato.

Se può essere un buon punto di riflessione e se qualcuno può aiutarmi, ne sarei veramente grato.
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Sponsor
 

Re: Vba excel incollare range variabile da più fogli

Postdi Anthony47 » 30/11/13 15:49

Ciao pippovvmaster, benvenuto nel forum.
Quindi hai due file, quello in cui devi copiare (e in cui inserirai la macro) e quello da cui devi copiare: questo secondo ha un nome noto? Lo hai aperto con altra macro e quindi ne puoi conoscere il nome?).
Devi copiare un intervallo variabile di alcuni suoi fogli, quindi da alcuni si da altri no: hai un elenco di fogli da cui copiare? Oppure come si identificano quelli "Si" da quelli "No"?
L' altezza dell' intervallo da copiare e' variabile; quindi la domanda e': quale e' la regola con cui si puo' calcolare il numero di righe da copiare?

Ti aspettiamo con queste informazioni aggiuntive.

(E la prossima volta queste domande pubblicale direttamente in questa sezione, Applicativi Office)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 03/12/13 13:25

Ciao anthony, piacere di conoscerti.

Allora il file da cui devo copiare i dati non ha un nome fisso, ovvero ha un nome che cambia giorno per giorno. Il possibile criterio potrebbe essere copia i folgi X Y Z da tutti i file attivi (aperti) oltre a quello con la macro. Il file viene aperto manualmente dall'utente (nel caso sarebbe l'unico file aperto). L'elenco dei folgi da copiare è fisso, ed hanno sempre il medesimo nome (ad esempio Folgio 1, Folgio 2, Foglio 3) in questo ambito non devo effettuare alcuna scelta in quanto la scelta dei fogli da copiare è dettata dalla costruzione del processo stesso. La regola da seguire per il numero di righe da copiare è: finchè sulla colonna A il campo è valorizzato. Mentre le colonne sono fisse, precisamente 46. Ok, la prox volta vado direttamente nella sezione Applicativi Office.

Grazie
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi Anthony47 » 04/12/13 00:51

Sulla base di quanto ho capito ti propongo questa macro:
Codice: Seleziona tutto
Sub bozzapippo()
Dim Wb As Workbook, ShList, CSheet, myMsg As String, SrcSh As Worksheet
Dim myRows As Long, DestSh As String
'
ShList = Array("Foglio2", "Foglio3")    '<< L' elenco dei fogli da cui copiare
DestSh = "Riepilogo"                    '<< Il nome del foglio (esistente) su cui copiare
'
ThisWorkbook.Activate
Sheets(DestSh).Select
myMsg = "Completata importazione dai seguenti files&fogli:"
For Each Wb In Workbooks
    If Wb.Name <> ThisWorkbook.Name Then
        For Each CSheet In ShList
            On Error Resume Next
            Set SrcSh = Wb.Sheets(CSheet)
            On Error GoTo 0
            If Not SrcSh Is Nothing Then
                With SrcSh
                    myRows = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
                    If myRows > 0 Then
                        Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Resize(myRows, 46).Value = _
                            .Range("A2").Resize(myRows, 46).Value
                        myMsg = myMsg & vbCrLf & "-" & Wb.Name & "&" & SrcSh.Name
                    End If
                End With
                Set SrcSh = Nothing
            End If
        Next CSheet
    End If
Next Wb
'
MsgBox (myMsg)
'
End Sub

Partendo dal file in cui vuoi creare un riepilogo:
-Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
-personalizza le istruzioni marcate <<
Torna su excel, apri il file /i files da cui vuoi leggere, lancia la macro bozzapippo (Alt-F8, seleziona bozzapippo dall' elenco delle macro disponibili, premi Esegui).

Prova e fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 06/12/13 12:24

Buongiorno a tutti!!

grazie Anthony47, funziona a meraviglia!!! Ho fatto alcune piccole modifiche, perchè meglio si adattano alla mia esigenza.
ecco il nuovo listato (niente di trascendentale):

Sub bozzapippo()
'
Application.ScreenUpdating = False


Dim Wb As Workbook, ShList, CSheet, myMsg As String, SrcSh As Worksheet
Dim myRows As Long, DestSh As String
'

ShList = Array("A", "B", "C", "D") '<< L' elenco dei fogli da cui copiare
DestSh = "Riepilogo" '<< Il nome del foglio (esistente) su cui copiare
'

ThisWorkbook.Activate
Sheets(DestSh).Select
myMsg = "Completata importazione dai seguenti files&fogli:"
For Each Wb In Workbooks
If Wb.Name <> ThisWorkbook.Name Then
For Each CSheet In ShList
On Error Resume Next
Set SrcSh = Wb.Sheets(CSheet)
On Error GoTo 0
If Not SrcSh Is Nothing Then

With SrcSh

Range("A1").Select
myRows = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
If myRows > 0 Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(myRows, 46).Value = _
.Range("A2").Resize(myRows, 46).Value
myMsg = myMsg & vbCrLf & "-" & Wb.Name & "&" & SrcSh.Name
End If
End With
Set SrcSh = Nothing
End If
Next CSheet
End If
Next Wb
'
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1").Select
'
Application.ScreenUpdating = True

'
MsgBox (myMsg)
'
End Sub
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 06/12/13 12:35

E fosse, invece:

importare sul medesimo foglio, uno sotto l'altro, dei file in .csv, nominati sempre allo stesso modo (nome generico uguale di giorno in giorno ad es. A, B, C, D), presenti in una cartella sul desktop; sarebbe fattibile? Diciamo che risolverei il problema alla radice.
Tutto questo invece di importare a mano i 4 files su di un unico file, ma su 4 fogli diversi e successivamente prendere il contenuto dei 4 fogli e salvarlo su di un unico foglio di un altro file!!! Risparmierei molto in termini di spazio.
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi Anthony47 » 07/12/13 01:32

Il suggerimento e' di registrarti una macro mentre
-apri un file preesistente, contenente i fogli A, B, C, D
-ti posizioni su foglio A, cancelli tutto, Importi i dati del file A.csv
-ti posizioni su foglio B e ripeti col file B.csv
-idem per C e D

Poi in coda al codice della macro cosi' ottenuta, subito prima di End Sub, inserisci
Codice: Seleziona tutto
Call bozzapippo

Poi invece di avviare bozzapippo avvierai la macro registrata

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 19/12/13 10:11

Fantastico!!!! funziona tutto a meraviglia :-) Grazie per le dritte! l'unica cosa che fa veramente 'incazzare' excel è quando si importa un file .csv completamente vuoto! Purtr. può capitare che i file che importo siano valorizzati o completamente vuoti. Hai mai avuto modo di combattere con questa piaga? Ad esempio nel caso generico d'importazione di un file .csv sul Folgio1 di un qualsiasi file excel.

Ciao
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 19/12/13 11:15

La macro s'interrompe e restituisce un errore di debug: ".Refresh BackgroundQuery:=False". Ho provato ad inserire un controllo sul numerosità delle celle importate con un If prima dell'importazione, ma ovviamente così operando non importa più nulla; neanche quei .csv che sono valorizzati. Probabilmente esiste qualche comando/funzione specifica che prima di importare controlla se il file è valorizzato o completamente vuoto.
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi Anthony47 » 21/12/13 02:38

La macro s'interrompe e restituisce un errore di debug: ".Refresh BackgroundQuery:=False"
Puoi spiegare questa istruzione in che contesto e' presente nel nostro codice?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Vba excel incollare range variabile da più fogli

Postdi pippovvmaster » 03/01/14 13:22

Ragazzi ho risolto!
Semplicemente la macro ora apre un nuovo foglio excel importa il file che può essere vuoto o pieno dopodichè conta i valori presenti se il valore presente è maggiore di uno importa il file altrimenti va avanti al prossimo import.
Sembrava insormontabile, invece ho aggirato il problema.
pippovvmaster
Newbie
 
Post: 7
Iscritto il: 27/11/13 10:27

Re: Vba excel incollare range variabile da più fogli

Postdi fedepoasco » 07/10/14 10:42

Buongiorno,

ho provato ad usare la vostra macro e in effetti risponde alle esigenze di pippovvmaster.
Vorrei chiedervi una mano a risolvere un problema simile al suo, ma non completamente identico.
qui sotto le modifiche di cui avrei bisogno:
- i fogli da dove copiare e incollare i dati e il foglio dove copiare i dati sono nel medesimo file
- le colonne da considerare nel copia e incolla sono 8
- ho bisogno che i dati copiati e incollati siano uno di seguito all'altro (la macro attuale lascia una riga vuota)
- tutti dati devono essere incollati nel foglio finale a partire dalla cella H2

In poche parole ho diverse tabelle identiche che devono alimentare una sola tabella di input per una tabella pivot complessiva.

spero di essere stato chiaro.
Grazie mille dell'aiuto
Ciao
fedepoasco
Newbie
 
Post: 4
Iscritto il: 07/10/14 10:24

Re: Vba excel incollare range variabile da più fogli

Postdi ricky53 » 07/10/14 11:45

Ciao,
anticipo quanto i moderatori ti diranno: conviene, per non creare confusione agli altri utenti, che tu apra una nuova discussione.
Fornisci il maggior numero di informazioni possibili e cerca di essere schematico, se occorre fai riferimento ad intervalli di celle e fornisci la struttura dei tuoi dati.


A ritrovarci nella tua nuova discussione.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Vba excel incollare range variabile da più fogli":


Chi c’è in linea

Visitano il forum: Gianca532011 e 86 ospiti

cron