Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Importare da fogli diversi

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

[Excel] Importare da fogli diversi

Postdi Omocaig » 12/05/15 11:49

Buongiorno,
dopo una lunga ricerca sono giunto su questo post: viewtopic.php?f=26&t=94574.
Purtroppo per direttive di compagnia devo usare Excel 2003 senza possibilità di aggiornarlo, con S.O. Windows XP, in passato ho già usufruito del forum prendendo qualche macro per incrementare le funzioni di Excel 2003, come il filtra per colore cella ad esempio.

Avrei necessità di creare una macro molto simile a quella di cui necessitava ahidai nel topic linkato sopra, quindi che importi dei dati dal "foglio 1" di più files, chiamati: Corinna contatti, Katia contatti etc.. ( in tutto 13 Files nominati: "Nome contatti.xls" ) in maniera sequenziale, rinnovando i dati da importare ad ogni salvataggio di ognuno dei 13 files, in un unico file, in un unico foglio, chiamato Nuovo Calcolatore.xls

I dati vengono inseriti dalla riga 14 fino all'ultima riga Numero X e dalla colonna A fino alla colonna AD,( formato, formule, spessore linee, praticamente tutto ). Dunque, il numero di colonne da copiare rimane costante ma varia il numero di righe da importare che deve corrispondere a quelle compilate.

Esempio di cosa vorrei riuscire a fare:

Alle ore 13 vengono aggiunte 5 nuove righe su 3 files nominati, Jacopo contatti.xls, Fabrizio contatti.xls, Giacomo contatti.xls, compilate con cambio colore sfondo cella e caratteri vari da alla colonna A a quella AD e salvati.
Alle 14 viene aperto il file Nuovo calcolatore.xls, la macro aggiorna il file inserendo in maniera sequenziale i dati aggiornati dai contatti.
I 13 Files sono nella stessa cartella di un disco condiviso, a seguire la foto del file Nuovo calcolatore.xls che è lo stesso dei 13 files nominati Nome contatti.xls, solo con formule di interconnessione tra i fogli dello stesso file.

Immagine

Vi ringrazio in anticipo ! Buona Giornata !
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Sponsor
 

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 12/05/15 22:58

Ciao omocaiG, benvenuto nel forum.
Non mi e' chiaro dalla tua esposizione come si dovrebbero distinguere i "nuovi record" da quelli gia' presenti nel file di riepilogo, ne' come pensi di distinguere i dati importati da un contatto da quelli importati da un altro contatto.
Puoi chiarire?

Ciao, ti aspettiamo.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 13/05/15 12:14

Ciao, grazie, in realtà non ho specificato bene che i files Nome contatti.xls vengono aggiornati dai collaboratori non solo aggiungendo records ma anche togliendoli (elimina riga), quindi è necessario che all'apertura del file Nuovo calcolatore.xls vengano aggiornati i dati ed il colore cella di ogni record ( quindi, ogni riga da A fino a AD ),
-sovrascrivendo i dati dei nomi già presenti nel file Nuovo calcolatore.xls, come se considerassi che questi siano stati aggiornati ad ogni salvataggio del file del collaboratore (Jacopo contatti.xls)
-aggiungendo quelli non presenti nel file Nuovo calcolatore.xls e presenti solo nel file del collaboratore Nome contatti.xls ( per tutti e 13 i files )
-ed eliminando dal file Nuovo calcolatore.xls quelli cancellati nei file Nome collaboratore.xls ( ad esempio Jacopo contatti.xls ) ( capisco che calcolatore e collaboratore siano due parole simili che si confondono, chiedo scusa )
Il tutto ripetuto per ognuno dei 13 files.

Quindi, ogni funzione elencata sopra dovrebbe lavorare ( nella mia immaginazione profana ) confrontando i nomi presenti nella colonna Nominativi ( colonna C ) del file Nuovo calcolatore.xls e quello del Collaboratore contatti.xls senza che venga aggiunto un dato ad ogni riga che distingua se il record è stato modificato prima dell'ultimo salvataggio o meno, decretandone la sovrascrizione, cancellazione o aggiunta riga + copia record, nel file Nuovo calcolatore.xls

Quindi un controllo simile a questo:

Record del NominativoX è presente sia in Jacopo contatti.xls che in Nuovo calcolatore.xls ---> sovrascrivi record da Jacopo contatti.xls a Nuovo calcolatore.xls
Record NominativoX è presente solo in Jacopo contatti.xls ma non in Nuovo calcolatore.xls ---> aggiungi riga in Nuovo calcolatore.xls e copia Record X nella riga aggiunta
Record NominativoX non presente in Jacopo contatti.xls ma presente in Nuovo calcolatore.xls ---> cancella record ( elimina riga ) in Nuovo calcolatore.

Per quanto riguarda la distinzione dei dati importati da un Collaboratore piuttosto che da un altro, la colonna E di ogni record è siglata di default con l'iniziale del nome del collaboratore da cui il record proviene, elenco dei 13 files con le relative sigle:

Franca contatti.xls : F
Voltri contatti.xls : V
Corinna contatti.xls : C
Jacopo contatti.xls : J
Paola contatti.xls : P
Fabrizio contatti.xls : F
Katia contatti.xls : K
Pinuccia contatti.xls : P
Alessio contatti.xls : A
Giacomo contatti.xls : G
Luigi contatti.xls : L
Maria Elena contatti.xls : E
Marco contatti.xls : M

Pensavo che l'ultimo controllo (Record X non presente in Jacopo contatti.xls ma presente in Nuovo calcolatore.xls ---> cancella record ( elimina riga ) in Nuovo calcolatore.) potesse anche essere lavorato considerando il numero di J presenti nei files:
Se il numero di J presenti in colonna E del file Nuovo calcolatore.xls è maggiore rispetto al numero di J presenti nel file Jacopo contatti.xls ,allora, confronta i nomi e cancella ( ovviamente sempre nel file Nuovo calcolatore.xls ) i record siglati J i cui nomi non corrispondo a quelli presenti nel file Jacopo contatti.xls e così per le relative sigle presenti nella colonna E dei vari file contatti collaboratore.

Se non fosse possibile un controllo di confronto tra i nomi, allora ho in mente un’altra soluzione: nel file Nome contatti.xls, al posto di eliminare la riga quando non mi serve più un record, potrei colorare i caratteri in bianco dei record del file ( prendo come esempio Jacopo contatti.xls ) che non mi servono più, e poi, indistintamente dall’ordine di aggiunta cronologico, conto quanti Record hanno la sigla J scritta in bianco, quanti Record hanno la J siglata in nero ( sempre sul file Jacopo contatti.xls ) e genero un numero di record siglati J ( o una riga con una J nella colonna E ) in Nuovo calcolatore.xls pari alla differenza di J nere del file Nuovo calcolatore.xls meno quelle bianche del file Jacopo contatti.xls ( da ripetere ovviamente per tutte le altre sigle ) ( cancellando anche i contenuti precedenti del file Nuovo calcolatore.xls senza nessun problema ).
Così che il file Nuovo calcolatore.xls e il file Nome collaboratore.xls dispongano sempre dello stesso numero di record siglati J e rimanga da impostare solo un controllo costante, “sovrascrivi i record siglati J del file Nuovo calcolatore.xls con i record siglati J del file Nome contatti.xls” e non avrei più bisogno di un controllo per generare un numero di righe in Nuovo calcolatore ogni volta che viene creato un nuovo record in uno dei files dei collaboratori, perché è già incluso nel controllo che genera un numero di record pari a J nere Nuovo calcolatore.xls – J bianche Jacopo contatti.xls da sovrascrivere con i record siglati J nero del file Jacopo contatti.xls

Grazie mille, spero che tutto questo sia di utilità anche per altri utenti come i post di altri utenti sono stati utili per me !

E sangue scorrerà in piazza di città, alè alè, alè aleeee forza Picche alè aleee ;)
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 13/05/15 22:29

Ma invece di tutti questi controlli, non basta ripartire da zero e reimportare nel file di riepilogo tutto il contenuto di ogni file Contatto.xls? A me pare che dia lo stesso risultato ed e' piu' semplice da attuare.

Forza tuchini
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 14/05/15 00:06

Si, ci ho pensato subito ma abbiamo 13 postazioni ed andiamo ad aprire contemporaneamente il file, questo genera dei problemi abbastanza grossi. Ho provato a ragionarci molto e forse ho sbagliato approccio, ho anche controllato questo post ( viewtopic.php?t=95919 ) ma non è una soluzione che possiamo adottare.
Alla fine quanto ho scritto confusamente ( scusa ) e che ti riassumo non mi sembrava una cattiva idea:

- Conto quanti Record in J Contatti.xls hanno nella colonna E la J scritta in bianco, quanti Record hanno la J in nero
- Genero N. righe con una J nella colonna E nel file principale (Nuovo calcolatore.xls) = N. J nere del file J contatti.xls ed elimino N. righe con J nero nel file principale = N. Righe con J bianche del file J contatti.xls
- Sovrascrivo i record con J Nero del file J Contatti.xls sulle righe con J Nero nella colonna E che ho creato nel file principale
Questo ripetuto per ogni lettera di ogni file Nome contatti.xls

Conosci altre soluzioni che potrebbero aiutarmi ?

Grazie mille
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 14/05/15 11:14

Si, ci ho pensato subito ma abbiamo 13 postazioni ed andiamo ad aprire contemporaneamente il file, questo genera dei problemi abbastanza grossi.
Aprire i file per farci dei ragionamenti o aprirli per copiarli non vedo che differenza fa.
Quanto ai colori, mi rifiuto per principio di elaborarli: a parte che il giallo sul mio pc puo' essere diverso dal giallo del mio vicino, per me il colore e' un effetto visivo e non va usato per discriminare i dati.

Un problema che io vedo e' la frequenza con cui gli utenti salvano il loro file: se lo salvano ad esempio solo a fine turno, tutte le modifiche che hanno fatto sul loro pc saranno invisibili ad altri che accedessero nel frattempo al file (in sola lettura).
Cio' detto, poiche' e' oramai troppo tempo che giriamo attorno al problema, ti suggerisco di provare questa macro, da inserire in Nuovo calcolatore.xls
Codice: Seleziona tutto
Sub Recall()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104659
Dim NArr(1 To 20) As String, Dest As Worksheet, myPath As String, myFFile As String
Dim I As Long, LastR As Long, myNext As Long, myStart As Long
'
NArr(1) = "pippo1.xlsx"             '<<< L' elenco dei file da cui raccogliere
NArr(2) = "pippografico.xlsm"       '<<<
NArr(3) = "pippo_Cartel1.xls"       '<<<
NArr(4) = "SCR_emails.xlsx"         '<<<
'etc etc

mytim = Timer
myStart = 14                        '<<< La riga da dove partono i dati
myPath = ThisWorkbook.Path & Application.PathSeparator
Set Dest = ThisWorkbook.Sheets("Totale")
Dest.Range("A14").Resize(10000, 30).Clear
Application.EnableEvents = False
For I = 1 To 20
    If NArr(I) <> "" Then
        myNext = Dest.Range("A:AD").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
        If myNext < myStart Then myNext = myStart
        myFFile = myPath & NArr(I)
        Workbooks.Open Filename:=myFFile, ReadOnly:=True
        Worksheets(1).Select: LastR = 0
        On Error Resume Next
            LastR = Range("A:AD").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        On Error GoTo 0
        If LastR > myStart Then
            Range(Cells(myStart, "A"), Cells(LastR, "AD")).Copy Destination:=Dest.Cells(myNext, 1)
        End If
        ActiveWorkbook.Close savechanges:=False
    End If
'Debug.Print I & " - " & Format(Timer - mytim, "0.00")
Next I
Application.EnableEvents = True
'ThisWorkbook.Save                          '<<< **VEDI TESTO
End Sub

Le righe marcate <<< vanno compilate con l' elenco dei tuoi N file (max 20) da esaminare e la riga iniziale da cui partono i dati.
Nota**: la macro al suo completamento non effettua il salvataggio per consentirti di verificare se l' esito ottenuto e' coerente con quanto cercato; se No chiudi il file senza salvarlo e riapri il tuo originale; se Si allora io suggerisco di abilitare il salvataggio file a fine macro, e per questo basta eliminare l' apostrofo in testa alla riga marcata <<< **VEDI TESTO.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 26/05/15 10:01

Ciao, scusa se lo faccio solo ora; volevo ringraziare te, chi con te gestisce il forum, il forum e la vostra pazienza, che è talmente generosa da averci anche le tette. I forum sono fonti di informazione importantissime perchè oltre a fornirti l'informazione in se sono anche in grado di fornirti la dinamica e il contesto in cui si è sviluppata e la relativa discussione, tutto questo non è presente nei libri. Vi auguro il meglio !
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 24/06/15 11:09

Ciao, innanzitutto ti chiedo scusa per la risposta sopra, stavo solo delirando dalla gioia, esperienza da quanto leggo comune a chi come me frequenta il forum.

Stavo provando a riadattare la macro per far si che avvenga lo stesso processo però su uno stesso file contenente più fogli.

Quindi:
-Ho un file con una formattazione diversa da quella in figura nel primo post
-I range di copia e incolla da adottare sono gli stessi
-l'importazione deve avvenire da fogli con la stessa formattazione di quello di destinazione
-I fogli da cui importare sono nello stesso file
-Uso Excel 2003

Come posso fare ?

Saluti
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 24/06/15 22:23

Il nostro senso dell'umore ci fa cogliere il positivo anche dalle frasi esaaggeeeraateee...
Quanto al quesito, ho dimenticato tutto quello che ho fatto prima della settimana scorsa, quindi dovresti descrivere che cosa vorresti fare e su che cosa chiedi aiuto.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 25/06/15 10:07

Ciao, ho una serie di fogli in un solo file:
- I nomi dei fogli sono Totale, Coll1, Coll2, Coll3...

ho bisogno di una macro da attivare con un pulsante per :
- Eliminare i Record del range (A14:AA10000) del foglio Totale
- importare sul foglio Totale i record del range (A14:AAX), in sequenza dal folgio Coll1, Coll2, Coll3 con X ultima riga compilata del foglio di ogni collaboratore.

Cioè, esattamente quello che fa la macro sopra, solo che lo fa importando da altri Files, a me serve da più fogli dello stesso file.

Saluti
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 25/06/15 23:43

Questo lo fai con una macro autoregistrata.
Partendo da foglio Coll1, avvia la registrazione macro, e poi diligentemente:
-vai su foglio Totale, selezioni e azzeri le celle che hai detto
-vai sul foglio Coll1, selezioni e copi le celle che ti interessano
-vai su foglio Totale, selezioni in colonna A la prima cella libera, premi Incolla (oppure Incolla speciale /Valori)
-vai su foglio Coll2, ripeti selezione e copia
-vai su Totale, ripeti seleziona e incolla
Ferma ora il registratore di macro, vai nell' editor delle macro, seleziona il codice registrato e pubblicalo nel tuo prossimo messaggio: lo modificheremo affinche' faccia tutto automaticamente.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 26/06/15 17:08

Ciao, ho registrato la Macro. Vorrei che selezionasse dalla Row ("14: fino all'ultima Row compilata" ), questo per tutti i fogli, così da non lasciare spazi vuoti tra i records nel Foglio ("Totale ").
Purtroppo avevo letto l'istruzione in un altro post ma non trovo più la pagina.

Codice: Seleziona tutto
Sub Importa()
    Sheets("Totale ").Select
    Rows("14:212").Select
    Selection.Delete Shift:=xlUp
    Sheets("Da Collaboratore").Select
    Rows("14:17").Select
    Selection.Copy
    Sheets("Totale ").Select
    Range("A14").Select
    ActiveSheet.Paste
    Sheets("Estrazioni").Select
    Rows("14:17").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Totale ").Select
    Range("A18").Select
    ActiveSheet.Paste
    Sheets("Campagna 1").Select
    Rows("14:17").Select
    Range("E14").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Totale ").Select
    Range("A22").Select
    ActiveSheet.Paste
    Sheets("Campagna 2").Select
    Rows("14:17").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Totale ").Select
    Range("A26").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=3
End Sub


Inoltre avrei una domanda riguardo sempre la prima macro che hai scritto:

Sto provando a riutilizzarla per importare altri records, sempre sullo stesso file per il quale è stata creata la macro originale ma provenienti da altri files nominati diversamente, inseriti nella stessa cartella.
Il foglio "Totale1" in cui importo i nuovi records, dalla riga 14 è esattamente uguale a quello degli altri files, in dimensione e formattazione, ho usato la formattazione condizionata per l'autocompilazione di ogni records su tutti i fogli e inoltre alcune celle ( sempre in ogni record ) contengono una formula.

Quindi, una volta che faccio partire la macro, si genera un debug sulla seguente stringa:

Codice: Seleziona tutto
Range(Cells(myStart, "A"), Cells(LastR, "AN")).Copy Destination:=Dest.Cells(myNext, 1)


Errore di run time 1004

Impossibile incollare le informazioni, l'area copia e l'area di incolla hanno dimensioni e forme diverse.
Provare una delle seguenti operazioni:
Fare su click una singola cella e incollare.
Selezionare un rettangolo di dimensioni e forma esattamente corrispondente alle informazioni. quindi incollare.


I fogli da cui importo non sono altro che delle copie l'uno dell'altro ma con i nomi cambiati, inolte il foglio "Totale1" è stato generato facendo "sposta o copia" da un foglio all'altro.

Ecco il codice:

Codice: Seleziona tutto
Sub Copia_Totale_Dedicati()
Dim NArr(1 To 20) As String, Dest As Worksheet, myPath As String, myFFile As String
Dim I As Long, LastR As Long, myNext As Long, myStart As Long

NArr(1) = "Riassuntivo 1.xls"
NArr(2) = "Riassuntivo 2.xls"

mytim = Timer
myStart = 14
myPath = ThisWorkbook.Path & Application.PathSeparator
Set Dest = ThisWorkbook.Sheets("Totale1")
Dest.Range("A14").Resize(10000, 32).Clear
Application.EnableEvents = False
For I = 1 To 20
    If NArr(I) <> "" Then
        myNext = Dest.Range("A:AN").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
        If myNext < myStart Then myNext = myStart
        myFFile = myPath & NArr(I)
        Workbooks.Open Filename:=myFFile, ReadOnly:=True
        Worksheets(1).Select: LastR = 0
        On Error Resume Next
            LastR = Range("A:AN").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        On Error GoTo 0
        If LastR > myStart Then
            Range(Cells(myStart, "A"), Cells(LastR, "AN")).Copy Destination:=Dest.Cells(myNext, 1)
        End If
        ActiveWorkbook.Close savechanges:=False
    End If
Debug.Print I & " - " & Format(Timer - mytim, "0.00")
Next I
Application.EnableEvents = True
ThisWorkbook.Save
End Sub


Grazie Mille, a presto !
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 01/07/15 21:44

Questa era rimasta indietro...
Ho modificato la tua macro in
Codice: Seleziona tutto
Sub ImportaAll()
    Sheets("Totale ").Select
    Rows("14:10000").Select
    Selection.ClearContents
'
For i = 1 To Worksheets.Count                      '1-Loop su tutti i fogli
    Sheets(i).Select
    If ActiveSheet.Name <> "Totale" Then           '2-Evita di copiare da Totale...
        LastR = myLastR(Range("A14:AA10000"))      '3-Calcolo ultima riga usata su foglio corrente
        If LastR > 13 Then
            Range("A14:AA" & LastR).Select         '4-Seleziona e copia
            Selection.Copy
            Sheets("Totale ").Select               '5-Vai su Totale
            LastR = myLastR(Range("A14:AA10000"))  '6-Calcolo ultima riga usata
            If LastR < 14 Then LastR = 14          '7-Parte almeno da riga 14
            Range("A" & LastR).Select
            ActiveSheet.Paste                      '8-Incolla
            Application.CutCopyMode = False        '9-Libera la clipboard
        End If
    End If
Next i                                             '10-Avanti il prossimo
End Sub

Non sapendo se c'e' una colonna sempre popolata che puo' essere usata per calcolare quale e' l' ultima riga popolata ho usato un criterio piu' complesso per calcolare quale e' l'ultima riga in uso all'interno dell'intervallo A14:AA10000, che ho demandato a questo codice (richiamato dalla macro precedente):
Codice: Seleziona tutto
Function myLastR(ByRef myArea As Range) As Long
Dim LastR
On Error Resume Next
LastR = myArea.Find(What:="*", After:=myArea.Cells(1, 1), _
      SearchOrder:=xlByRows, _
      SearchDirection:=xlPrevious).Row
On Error GoTo 0
If IsNumeric(LastR) Then myLastR = LastR
End Function

Un paio di commenti sulla macro, ad ampliare quanto scritto nei commenti:
4) Ho preferito mantenere la struttura originale della macro, con "Seleziona" e poi "Copia", ma le operazioni possono essere condensate in una unica Range(QualeRange).Copy
5:8) Anche qui ho preferito mantenere la struttura originale del "Seleziona" e poi "Incolla", anche questa riducibile in una sola Range(QualeRange).Paste

Spero che quanto fatto possa aiutarti a lavorare su macro registrate per ottenere in proprio, anche se in modo non ottimizzato, prestazioni spesso molto articolate.

Per quanto riguarda l'altro problema di cui parli, e' possibile che l'area copiata contenga delle celle unite? se Si, la mia opinione sulle celle unite la trovi qui: viewtopic.php?f=26&t=85065

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 02/07/15 12:12

Ciao, tutto questo è fantastico.
Allora, la colonna di riferimento ci sarebbe ed è la colonna G. Non ho capito bene il criterio complesso, comunque, l'ho piazzato sopra la macro ImportaAll e funge perfettamente.

4:5:8) Ok, perfetto, accorciare le stringe fa pesare meno il file ?

Certamente che aiuterà, come sempre !
L'area contiene Celle Unite, ora mi metto al lavoro !
Grazie Mille
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 02/07/15 23:35

Normalmente si puo' calcolare quale e' l' ultima riga usata di una colonna con ad esempio
Codice: Seleziona tutto
LastG=Cells(Rows.Count, "G").End(xlUp).Row

Non sapendo che G era la colonna chiave ho usato le istruzioni della seconda macro, che calcola quale e' l' ultima riga usata all'interno di un blocco di colonne.

Accorciare le istruzioni delle macro ti fara' risparmiare un centinaio di byte, ma potrebbe farti risparmiare 10 millisec a istruzione.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 12/07/15 18:21

Per quanto riguarda l'altro problema di cui parli, e' possibile che l'area copiata contenga delle celle unite? se Si, la mia opinione sulle celle unite la trovi qui: viewtopic.php?f=26&t=85065


Ciao, continuo ad avere problemi con la prima macro che ha scritto Anthony47, esattamente come ho specificato .

Errore di run time 1004

"Impossibile incollare le informazioni, l'area copia e l'area di incolla hanno dimensioni e forme diverse.
Provare una delle seguenti operazioni:
Fare su click una singola cella e incollare.
Selezionare un rettangolo di dimensioni e forma esattamente corrispondente alle informazioni. quindi incollare. "

-I fogli di importazione ed esportazione sono uguali
-Non sono presenti celle unite
-Importo dalla colonna 1 alla 20 in un file compilato fino alla colonna 40
-non sono presenti formule nel range che importo
-Il fogli da cui importo ed esporto, essendo gli stessi contengono i seguenti codici in microsoft excel oggetti:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
URF = Range("F" & Rows.Count).End(xlUp).Row
URR = Range("R" & Rows.Count).End(xlUp).Row
Range("F14:F10000").Interior.ColorIndex = xlNone
Range("R14:R10000").Interior.ColorIndex = xlNone
For RRF = 14 To URF
    If Range("F" & RRF).Value >= [A6] And Range("F" & RRF).Value < [B6] Then Range("F" & RRF).Interior.ColorIndex = 44
        If Range("F" & RRF).Value >= [B6] And Range("F" & RRF).Value < [B7] Then Range("F" & RRF).Interior.ColorIndex = 37
Next RRF
For RRR = 14 To URR
    If Range("R" & RRR).Value > 0 Then Range("B" & RRR).Interior.ColorIndex = 4
Next RRR
Dim KeyCells As Range
Set KeyCells = Range("B13:B10000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing _
    And Cells(Target.Row, "A") = "" Then
    ActiveSheet.Unprotect
    With Cells(Target.Row, "A")
        .Value = Int(Now)
        .Locked = False
      End With
    ActiveSheet.Protect DrawingObjects:=False, Contents:=False, Scenarios:=False
End If
Set KeyCells = Range("G13:L10000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing _
    And Cells(Target.Row, "S") = "" And Not IsNumeric(Target.Value) Then
    ActiveSheet.Unprotect
    With Cells(Target.Row, "S")
        .Value = Int(Now)
        .Locked = False
    End With
    ActiveSheet.Protect DrawingObjects:=False, Contents:=False, Scenarios:=False
End If
Set KeyCells = Range("M13:Q10000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing _
    And Cells(Target.Row, "T") = "" And Not IsNumeric(Target.Value) Then
    ActiveSheet.Unprotect
    With Cells(Target.Row, "T")
        .Value = Int(Now)
        .Locked = False
    End With
    ActiveSheet.Protect DrawingObjects:=False, Contents:=False, Scenarios:=False
End If
If Not Application.Intersect(Target, Range("A11:B11")) Is Nothing Then
    crit1 = "=*" & Range("A11") & "*"
    crit2 = "=*" & Range("B11") & "*"
    ActiveSheet.Range(Range("$B$13"), Range("$B$13").End(xlDown)).AutoFilter Field:=2, Criteria1:=crit1, Operator:=xlAnd, Criteria2:=crit2
End If
End Sub


Possono esserci altre cause del problema ? Grazie mille !
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08

Re: [Excel] Importare da fogli diversi

Postdi Anthony47 » 14/07/15 02:52

Per cercare di capire di cosa si parla servirebbe avere un file di test e la macro che stai usando.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Importare da fogli diversi

Postdi Omocaig » 31/07/15 10:15

Ciao, il problema era la formattazione differente dei fogli importati, non mi ero accorto di avere una funzione della cella in colonna D, riga 56473. O.O, quandi ho sbagliato nello scrivere che " -I fogli di importazione ed esportazione sono uguali "

Ciao, Grazie !
Xp + Office 2003 Ita
Omocaig
Utente Junior
 
Post: 76
Iscritto il: 11/05/15 15:08


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Importare da fogli diversi":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti