Copiare e incollare da file esterno con selezione e formula "end"

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Pagine: [1], 2
stefanosaccone
00giovedì 10 marzo 2016 15:41
Buongiorno a tutti,

premetto che sono un neofita della programmazione in VBA e preferisco imparare piuttosto che copiare e incollare.

Ho provato a cercare un po' nel forum una soluzione ma sembra che nessuno abbia avuto questo tipo di problema, mi scuso in anticipo se sto aprendo una discussione gia' presente sul forum.

Il mio problema e':

ho bisogno che, attraverso una macro, il file excel (che da qui in poi verra' denominato ENGINE) copi dei dati da un foglio di altri files excel (che da qui in poi verranno chiamati MASTERDATA 1,2,3 ecc...).

I files MASTERDATA includono i dati nel foglio numero 4 (chiamato Final) e ogni file MASTERDATA ha una dimensione diversa del foglio "Final".

Inoltre nell'ENGINE tutti i dati dovranno essere incollati in un unico foglio (foglio numero 4 "All Data"), uno sotto l'altro.

quindi, ricapitolando, la macro dell'ENGINE dovrebbe:
- aprire una finestra di dialogo in cui mi chiede quale file MASTERDATA utilizzare,
- copiare i dati del foglio "Final" dei MASTERDATA 1, 2, 3 ecc... (che, ricordo, hanno tutti dimensioni diverse),
- incollare questi dati nella prima riga vuota disponibile nel foglio "All data" del file ENGINE.

Ringrazio tutti coloro che vorranno prodigarsi per darmi una mano e, ovviamente, pubblichero' il file finito sul forum in modo che sia disponibile in futuro per altri.

Stefano



(marc63)
10giovedì 10 marzo 2016 20:04
Caro Stefano se non butti giù due righe di esempio non si capisce bene cosa vuoi fare ti allego esempio dami direttive per continuare....

Saluti [SM=x423023]
stefanosaccone
00venerdì 11 marzo 2016 12:30
Vicini alla soluzione
Caro Marc63,

innanzitutto ti rigrazio per la risposta.

mi scuso per non aver fornito dati sufficienti, in ogni caso ti sei avvicinato molto a quello che pensavo.

invio in allegato il tuo file "ENGINE" modificato e 3 file "MASTERDATA".

il mio obiettivo e' che l'ENGINE abbia un pulsante con cui mi chiede di scegliere un file MASTERDATA (Esattamente come l'hai creato tu) e che poi copi i dati dal foglio numero 4 (Final) del MASTERDATA scelto per incollarli nel foglio "ALL DATA" del file "ENGINE".

Tutti i FINAL di tutti i MASTERDATA devono incollarsi, uno sotto l'altro, nello stesso ALL DATA dell'ENGINE.

Spero di essere riuscito a chiarire il mio problema e ti ringrazio ancora per l'aiuto.

Stefano.
stefanosaccone
00venerdì 11 marzo 2016 12:35
Precisazione
dimenticavo di precisare che i file MASTERDATA sono salvati in una cartella del PC in cui e' salvato anche l'ENGINE, in modo da poter condividere l'intera cartella e far funzionare il tutto su diversi pc.

grazie.
(marc63)
00venerdì 11 marzo 2016 13:57
Stefano Scusa la mia risposta , non sei ancora riuscito a farmi capire

1) il file allegato le 3 pagine "sheet1","sheet2","sheet3" , stanno

per le pagine "Masterdata" ?

2) I dati che sono in pagina "final" vengono immessi da qualcuno o da

dove provengono ?

3) Con quale ragionamento abbini i dati Masterdata con Final

Non è molto chiaro quello che vuoi fare, non aver paura di sbagliare

nell'esporre le cose siamo qui tutti ad ascoltarti per riuscire ad

aiutarti più esempi esponi e più facile diventa la risoluzione

Fai un bel respiro e riparti da Capo........ [SM=x423051]
stefanosaccone
00venerdì 11 marzo 2016 16:42
Ricominciamo (alla Califano :D)
Ripartiamo...

ho 1 file Excel chiamato ENGINE e altri 5 files Excel chiamati MASTERDATA. Ogni file MASTERDATA corrisponde a un cliente e tutti i MASTERDATA hanno le stesse intestazioni di colonne in tutti i fogli (fungono praticamente da template)

ogni file MASTERDATA e' composto da 4 fogli:
1)= Control = c'e' un pulsante di attivazione macro,
2)= Data entry = in cui incollo dei dati provenienti dal file raw del cliente
3)= data Normalizing = in cui la macro, attraverso dei vlookup, normalizza e aggiunge dati,
4)= Final = in cui la macro copia e incolla, in formato numero, i dati che ha elaborato nel foglio 3.

il procedimento che uso ogni mese e':
1) ricevo i dati dal cliente in un file raw,
2) apro un MASTERDATA, lo salvo con nome creandone uno per quel cliente e per quel mese,
3) copio/incollo i dati che mi servono nel foglio 2 (Data entry),
4) pigio il pulsante nel foglio 1 (control) e la macro normalizza e aggiunge dati nel foglio 3 (Data Normalizing) con dei vlookup. Una volta finito, la stessa macro, copia/incolla in formato valore tutti i dati del foglio 3 (Data normalizing) nel foglio 4 (Final) e cancella il contenuto del foglio 3 (Data Normalizing) e del foglio 2 (Data Entry).
I dati nel foglio Final hanno 20 colonne (con la stessa intestazione per tutti i MASTERDATA e, naturalmente, anche per il foglio "all data" dell'ENGINE) e un numero variabile di righe in base al numero di transazioni che il cliente ha effettuato in un mese.
5) salvo e chiudo.


il file ENGINE (che sto provando a costruire adesso con il vostro aiuto) dovrebbe essere composto da 4 o piu' fogli:
1)= Control = con 2 (o piu') pulsanti di attivazione macro, di cui uno sara' sicuramente per la selezione del file MASTERDATA e la successiva importazione dei dati. Gli altri saranno per le analisi dei dati importati.
2)= analisi 1 = dati analizzati con una macro
3)= analisi 2 = dati analizzati con una macro
4)= All data = in cui la macro descritta nel punto 1 importa, uno sotto l'altro, i dati contenuti nel foglio numero 4 di TUTTI i MASTERDATA.

Mi piacerebbe che il file ENGINE funzionasse cosi':
1) apro il file engine,
2) salvo con nome intestandolo con il mese di riferimento,
3) pigio il pulsante numero 1 nel foglio numero 1 (Control) che attiva una macro,
4) la macro mi apre una finestra di dialogo in cui mi chiede di selezionare un file MASTERDATA,
5) una volta selezionato il file MASTERDATA la macro copia tutti i dati delle 20 colonne del foglio numero 4 (Final) del MASTERDATA selezionato e li incolla nel foglio numero 4 (All data) dell'ENGINE (che avra' le stesse intestazioni di colonna, quindi e' sufficiente che copi dal range A2:T2 in giu')
6) ripeto l'operazione per tutti i 5 file MASTERDATA dello stesso mese.
7) pigio il pulsante numero 2 nel foglio numero 1 (control) che analizza tutti i dati del foglio 4 (all data) in diversi modi.
8) potrei eventualmente aggiungere altri pulsanti e altre macro per l'analisi dei dati ma che usano come database sempre il foglio numero 4 (All data)
9) salvo e chiudo.

I dati copiati da tutti i Masterdata devono andare tutti nello stesso foglio, attaccati uno sotto l'altro senza spazi.
In questo modo posso controllare e confrontare i dati di tutti i clienti contemporaneamente.

Domanda = ammesso di riuscire a creare questo file se, un giorno, avessi bisogno di aggiungere un foglio nel file ENGINE funzionerebbe ancora il tutto? (in caso di risposta negativa terrei 3 fogli di analisi anziche' 2 e sposterei il foglio "all data" come quinto)

sto provando a caricare dei file di esempio ma nell'importazione mi cancella il nome... I file con attivazione macro non riesco a caricarli affatto (immagino per la dimensione) e non ho la possibilita' di installare winzip perche' non ho l'accesso da amministratore su questo computer. [SM=x423057]

uso EXcel 2010 in inglese.

Spero di essere riuscito ad essere piu' chiaro.

Se e' indispensabile inviarvi degli esempi posso inviare i file in allegato ad una mail.


[SM=x423017] [SM=x423017]
stefanosaccone
00venerdì 11 marzo 2016 16:48
Caricamento file
Sono riuscito a caricare un file MASTERDATA (non e' l'ultima versione ma va benissimo per rendere l'idea).
Anche in questo caso mi ha cancellato il nome (non so perche')
by sal
00sabato 12 marzo 2016 07:35
Copia incolla più dati
Ciao Stefano, Marco mi ha chiesto di darti una mano, ma non ce n'era bisogno, quando vedo che qualche altra persona del forum sta seguendo, cerco di non intervenire.

comunque partiamo dal principio "Di Nuovo" dirai, serve a chiarire meglio gli argomenti

primo i file con estensione Xlsm con le macro il forum non li riconosce per cui non li carica per fare ciò devi comprimerli con .zip o .rar e verranno caricati.

secondo vediamo un poco la tua struttura:
1) hai tutti i file nella stessa cartella
2) devi creare un file di riepilogo
3) la versione inglese non importa in quanto le formule o vba vengono convertite in funzione della versione usata
4) i file masterdata hanno nomi diversi non credo che si chiamino tutti Masterdata andrebbero in conflitto
5) non importa quanti file masterdata ci siano
6) il file di riepilogo esiste già o lo devi creare ex novo

terzo parliamo dei dati
1) ogni file masterdata ha il foglio "Final" il quale è il risultato di macro o elaborazioni fatte sul cliente, quindi tutti i dati nel foglio "Final" sono quelli da trasferire, non una porzione in base ad un filtro.
2) del file Masterdata si deve trasferire solo i dati del foglio "Final" oppure di altri fogli dello stesso Masterdata.
3) una volta aperto il file chiamiamolo "Riepilogo" nel quale è presente il foglio "Final" con le stesse caratteristiche e colonne dei fogli Masterdata, i dati presenti devono essere cancellati per scrivere i nuovi oppure accodare i nuovi dati.
4) il file riepilogo deve avere una pagina iniziale con tutti i nomi dei file Masterdata ed un flag SI/NO im modo da poter scegliere quali file masterdata importare
5) creare una macro nel file Riepilogo che importi tutti i fogli "Final" i quali dati verranno accodati ad i dati precedenti sempre sullo stesso foglio "Final" del file riepilogo
6) oltre questo qualche altra cosa?
7) servono almeno 2 o più file Masterdata per esempio anche con poche righe, se ci sono dati sensibili, metti dati fittizi, per fare le prove di importazione dati.

Fai sapere ciao By Sal [SM=x423051]


raffaele1953
00sabato 12 marzo 2016 07:59
1) Solo per dire che non è bello fare il post in diversi forum.
2) Spendendo due minuti a leggere i post principali, si capiva che I file con attivazione macro vanno zippati

Se ho capito bene, da inserire in un modulo del Tuo Engine, foglio All data presente.
1) fa solo un file
Option Explicit
Sub Copia_Uno()
Dim sh1 As Worksheet: Set sh1 = Worksheets("All data")
Dim ws As Workbook, Percorso As String, nomeFile As String, Ur1, Ur2
Percorso = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Ur1 = sh1.Range("A" & Rows.Count).End(xlUp).Row + 1
ChDir (Percorso)
nomeFile = Application.GetOpenFilename("Tutti i files (*.*), *.*")
nomeFile = Replace(nomeFile, Percorso, "")
Workbooks.Open (Percorso & nomeFile)
Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Final").Range("A2:Z" & Ur2).Copy
sh1.Range("A" & Ur1).PasteSpecial
Workbooks(nomeFile).Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set sh1 = Nothing
End Sub


2) fà tutti ipresenti nella directory
Sub copia_tutti()
    Dim WB As Workbook
    Dim Ws1 As Worksheet
    Dim Percorso As String, nomeFile As String, Ur1, Ur2
    Percorso = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set Ws1 = ThisWorkbook.Worksheets("All data")
    Ur1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
    nomeFile = Dir(Percorso)
    Do While nomeFile <> ""
        If nomeFile <> ThisWorkbook.Name Then
            Workbooks.Open (Percorso & "\" & nomeFile)
            Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
            Workbooks(nomeFile).Worksheets("Final").Range("A2:Z" & Ur2).Copy
            Ws1.Range("A" & Ur1).PasteSpecial
            Workbooks(nomeFile).Close False
        Ur1 = Ur1 + (Ur2 - 1)
End If
        nomeFile = Dir
    Loop
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Fatto"
    Set Ws1 = Nothing
End Sub
stefanosaccone
00domenica 13 marzo 2016 18:49
Perdonate l'assenza ma sono stato in viaggio tutto sabato...

Rieccoci.

Caro Marc63,
ti ringrazio per aver girato il mio problema ad altri esperti.

Caro sal,

Mi piace molto il tuo approccio alla questione, penso che l'errore di incomprensione tra noi sia dovuto con certezza alla mia errata esposizione del problema: non saro' mai stanco di esporlo in maniera diversa.

1)si ho tutti i file nella stessa cartella, ma con la suddivisione che troverai in basso nel post
2)si devo creare un file di riepilogo,
3)ok
4)si ognuno sara' nominato con MASTERDATA_NomeCliente_Anno_mese (EX: MASTERDATA_Exxon_2015_01)
5)ok
6)lo devo creare ex novo (ne ho creato uno con i moduli di raffaele1953 che spero di essere riuscito ad allegare)

Parlando di dati

1)tutti i dati del foglio Final sono da trasferire, ho usato di proposito un file MASTERDATA per normalizzare e completare i files, in modo da avere un file riepilogativo senza buchi.
2)Solo il foglio Final,
3)devono essere sempre accodati uno sotto l'altro, in questo modo avro' anche tutto lo storico e ogni mese avro' un file di backup in caso di problemi.
4)No la pagina iniziale deve avere un pulsante che attiva una macro, la macro apre una finestra di dialogo dove mi fa scegliere quale masterdata importare.
In seguito nella stessa pagina iniziale inseriro' altri pulsanti per macro che analizzeranno i dati importati.
5)Hai colto nel segno, e' proprio quello che vorrei
6)Sto provando a zippare i file e a inviarli. Ho allegato sia una cartella zip con tre file (l'ENGINE test + due MASTERDATA di esempio) e li ho anche caricati singolarmente, sempre zippati. Ad essere sincero non so se l'operazione sia andata a buon fine, penso di aver zippato bene i files, anche se non sono molto esperto (preferisco dropbox o wetransfer).

Il primo modulo di raffaele1953 funziona benissimo, l'unico problema e' che funziona solo se i files MASTERDATA e il file ENGINE sono nella stessa identica cartella.
La mia cartella e' invece composta cosi':

-Folder ("Luboil folder")
- Folder ("ENGINE WORKBOOK")
- Folder ("2015")
- File ("ENGINE_WORKBOOK_2015_01")
- File ("ENGINE_WORKBOOK_2015_02")
- File ("ENGINE_WORKBOOK_2015_....")
- Folder ("2016")
- File ("ENGINE_WORKBOOK_2016_01")
- File ("ENGINE_WORKBOOK_2016_...")
- Folder ("MASTERDATA")
- Folder ("Nome cliente 1")
- Folder ("2015")
- File ("NomeCliente1_MASTERDATA_2015_01")
- File ("NomeCliente1_MASTERDATA_2015_02")
- File ("NomeCliente1_MASTERDATA_2015_...")
- Folder ("2016")
- File ("NomeCliente1_MASTERDATA_2016_01")
- File ("NomeCliente1_MASTERDATA_2016_...")
- Folder ("Nome cliente 2")
- Folder ("2015")
- File ("NomeCliente2_MASTERDATA_2015_01")
- File ("NomeCliente2_MASTERDATA_2015_02")
- File ("NomeCliente2_MASTERDATA_2015_...")
- Folder ("2016")
- File ("NomeCliente2_MASTERDATA_2016_01")
- File ("NomeCliente2_MASTERDATA_2016_...")
- Folder ("Nome cliente ....)

- Folder (ecc...)

In seguito ci sono altre cartelle che servono a creare i MASTERDATA, quindi immagino siano ininfluenti con il discorso di importazione nell'ENGINE.


Caro raffaele 1953,

Innanzitutto ti ringrazio di cuore per il tuo aiuto, hai colto immediatamente il problema.

Perdonerai la mia inesperienza nel non conoscere la concorrenza tra forum...
Pensavo che essi fossero delle organizzazioni dedite alla diffusione di una passione comune nel miglior modo possibile, in cui i piu' esperti danno una mano ai neofiti.
Ho provato, da inesperto, a chiedere aiuto a diversi forum ma in buonafede, credimi, senza la minima intenzione di mettere in concorrenza nessuno.
Per il discorso zip dei files come detto sopra non sono utilizzatore abituale e, in più, non riesco ad installare winzip sul pc aziendale (ora vi scrivo da quello personale e ci ho provato).

In ogni caso mi piacerebbe molto contribuire al sostentamento del servizio che offrite, fatemi sapere (anche in privato sulla mia mail per chi è admin) le modalità con cui posso rendermi utile.
stefanosaccone
00domenica 13 marzo 2016 18:57
Dato che mi ha eliminato gli spazi la cascata per capire la cartella è andata a farsi benedire.
allego esempio della cartella in formato .zip

Mille grazie ancora.
raffaele1953
00domenica 13 marzo 2016 22:07
>>> la concorrenza tra forum...
Premesso che non esiste concorenza, solo Utenti che al momento del bisogno fanno 10 post in 10 Forum diversi. Appena ottengono la prima risposta spariscono e non sanno più quale Forum era per dichirare "risolto" o ringraziare.
Non trovo giusto che eventuali 10 esperti "elaborino il quesito". Alcuni Forum "Chiudono il post". Io frequento 5 forum, se vedo doppioni non rispondo e ci perde solo l'utente.

La prima macro funziona tramite la scelta che fai...
La seconda macro funziona e non conosco comandi che facciano le sottodirectory.
Anche esistesse mi sembra che ci siano altri file e pertanto lo eviterei.

Se in colonna foglio(All data)cella AA1 mettessi una lista di sottodirectory\nome_file, AA2 ecc, AA3 ecc
EX MASTERDATA\Exxon\2015\Exxon_MASTERDATA_test1.xlsm
Il codice sotto funziona su quella lista.
Ps. mi aspettavo di trovare il file Engine.xlsm nell'ultimo allegato che hai messo. Naturale che questo stia nella cartella principale, quella che Tu hai definito come "Luboil folder test"

PPS SE RIESCI ELIMINA GLI ALLEGATI

Sub copia_lista()
    Dim WB As Workbook
    Dim Ws1 As Worksheet
    Dim Percorso As String, nomeFile As String, Ur1, Ur2, Ur3, X
    Percorso = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set Ws1 = ThisWorkbook.Worksheets("All data")
    Ur1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
    Ws1.Range("A1:Z" & Ur1).ClearContents
    Ur3 = Ws1.Range("AA" & Rows.Count).End(xlUp).Row
    For X = 1 To Ur3
            nomeFile = Cells(X, 27)
            Workbooks.Open (Percorso & nomeFile)
            Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
            Workbooks(nomeFile).Worksheets("Final").Range("A2:Z" & Ur2).Copy
            Ws1.Range("A" & Ur1).PasteSpecial
            Workbooks(nomeFile).Close False
            Ur1 = Ur1 + (Ur2 - 1)
    Next X
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Fatto"
    Set Ws1 = Nothing
End Sub
stefanosaccone
00domenica 13 marzo 2016 22:51


errore mio di non aver specificato percorsi e nomi file.

il file nella cartella caricata dovrebbe esserci.

il percorso è:

C:\Users\Stefano\Desktop\Luboil folder test\ENGINE_WORKBOOK\2015

il nome del file è:

ENGINE_WORKBOOK_test


Domande stupide da neofita:

è necessario specificare il percorso fino all'esatta collocazione del file o si può rimanere qualche livello indietro?

come faccio a modificare il percorso e il nome file in un modulo?


Provo ad imparare qualcosa leggendo delle guide ma sono ancora alle basi.


PS
chiuso il post nell'altro forum.

PPS
provo a cancellare allegati
raffaele1953
00lunedì 14 marzo 2016 12:24
Il secondo codice funzionava se era insieme ai file

>>>si può rimanere qualche livello indietro?
Con l'ultima macro no ed onestamente non capisco più nulla
Ieri ho visto l'ultimo allegato e vedevo dentro (Luboil folder test) c'erano diverse sottodirectory. Ora mettendo dentro quella cartella il file engine.xlsm, desideri che scandagli tutte le sottodirectory? Oppure c'è unqa limitazione ex 2016 e desideri che scandagli solo le sottodirectory uguali a 2016?

Quel comando delle sottodirectory non lo conosco. Suggerivo il metodo del scrivere il nome del file ed naturale che questo sia preciso. Alternativa e usare il primo codice e ti vai a cercare uno ad uno i file che desideri. Forse i nomi posso metterli in automatico se sono tutti i files presenti

Prova se riesci (comandi Dos)
Apri CMD digita-->cd \
Digita C:/Users/Stefano/Desktop/Luboil folder test
Dovresti essere nella cartella Luboil folder test
digita Dir *.* /s >txt.txt
Se tutto è andato bene hai un file che si chiama txt.txt
Spostalo e metti un asterisco per ogni file che desideri fare.
stefanosaccone
00lunedì 14 marzo 2016 17:47

Hai ragione a dire che non capisci piu' nulla....
sto facendo una confusione incredibile, ma sto imparando qualcosa.

Ho provato a semplificare e cerco di spiegare tutto nella forma piu' facile.

Modifiche apportate:

1) Ho salvato la cartella "Luboil folder" in una cartella condivisa su un server, in modo da essere utilizzata da chiunque abbia accesso al server.

Percorso cartella “Luboil Folder”:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder


2) Ho modificato il nome del file ENGINE in:

ENGINE_WORKBOOK_2015_01

E ha questo percorso:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\ENGINE WORKBOOK

Domanda: ogni mese salvero’ con nome il file e lo rinominero’ con l’anno e il mese (ex: a febbraio 2015 sara’: “ENGINE_WORKBOOK_2015_02”) ma il percorso rimarra’ sempre quello, questo influenzera’ il funzionamento della macro?


3) Ho modificato i nomi dei files MASTERDATA in modo da avere l’inizio del nome sempre uguale:

MASTERDATA_Exxon_2015_01
MASTERDATA_Exxon_2015_02
MASTERDATA_Exxon_2015_ecc..

Percorso:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Exxon\2015


MASTERDATA_Exxon_2016_01
MASTERDATA_Exxon_2016_02
MASTERDATA_Exxon_2016_ecc...

Percorso:
\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Exxon\2016



MASTERDATA_Shell_2015_01
MASTERDATA_Shell_2015_02
MASTERDATA_Shell_2015_ecc...

Percorso:
\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Shell\2015


MASTERDATA_Shell_2016_01
MASTERDATA_Shell_2016_02
MASTERDATA_Shell_2016_ecc…

Percorso:
\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Shell\2016



In questo esempio ho riportato solo 2 clienti (Exxon e Shell), in realta’ sono di piu’, ma avranno tutti un percorso uguale agli altri, con la propria cartella dentro il percorso:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\"Nome cliente"\"Anno"

A questo punto quello che a me servirebbe e’ una macro nell’ENGINE che mi permetta di:

1) scegliere, attraverso una finestra di dialogo, qualsiasi file all’interno della directory:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA

qualsiasi sia il nome cliente o l'anno.


2) copiare i dati del foglio “Final” del MASTERDATA selezionato

3) incollare i dati, uno sotto l’altro, nel foglio “All data” dell’ENGINE.

PS
se c'e' bisogno di file allegati posso caricarne.

Scusate il casino e grazie per la comprensione.
raffaele1953
00lunedì 14 marzo 2016 19:24
Scusa, mà il primo codice non Ti va bene=
stefanosaccone
00martedì 15 marzo 2016 09:52
ho cambiato il percorso nella riga 5,
la macro funziona fino alla riga 16, dove non riesce a chiudere il file (runtime error 9).
ho provato a cambiare il nome file dinamico ma nulla...


1 Option Explicit
2 Sub Copia_Uno()
3 Dim sh1 As Worksheet: Set sh1 = Worksheets("All data")
4 Dim ws As Workbook, Percorso As String, nomeFile As String, Ur1, Ur2
5 Percorso = "\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA" & "\"
6 Application.ScreenUpdating = False
7 Application.DisplayAlerts = False
8 Ur1 = sh1.Range("A" & Rows.Count).End(xlUp).Row + 1
9 ChDir (Percorso)
10 nomeFile = Application.GetOpenFilename("Tutti i files (*.*), *.*")
11 nomeFile = Replace(nomeFile, Percorso, "")
12 Workbooks.Open (Percorso & nomeFile)
13 Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
14 Sheets("Final").Range("A2:Z" & Ur2).Copy
15 sh1.Range("A" & Ur1).PasteSpecial
16 Workbooks(nomeFile).Close
17 Application.DisplayAlerts = True
18 Application.ScreenUpdating = True
19 Set sh1 = Nothing
20 End Sub

Grazie.
raffaele1953
00martedì 15 marzo 2016 11:26
La macro funzionava.
Ora, senza sapere il tutto modifichi il codice (a piacere e senza un motivo?)
Comunque se invece d'avviare il codice gli vai sopra e premi F8, vedrai che inizi. Ripremi F8, sino alla riga 15.
Vai sopra con il mouse a MomeFile riga 11 e leggi nella "finestrella" il valore che appare.

ThisWorkbook.Path mi serviva per conoscere il percorso e riga11 per dividere il nomefile. Prova annullare la riga11 e alla rig12 Workbooks.Open (nomeFile)
stefanosaccone
00martedì 15 marzo 2016 13:11
Quello che appare nella finestrella non si riesce a leggere fino alla fine, il percorso è troppo lungo.

Sistemato il codice originale (hai ragione funziona anche senza modificarlo, scusa), apportate modifiche a riga 11 e 12 ma mi da sempre lo stesso errore: "error run time 9 subscript out of range"

1 Option Explicit
2 Sub Copia_Uno()
3 Dim sh1 As Worksheet: Set sh1 = Worksheets("All data")
4 Dim ws As Workbook, Percorso As String, nomeFile As String, Ur1, Ur2
5 Percorso = ThisWorkbook.Path & "\"
6 Application.ScreenUpdating = False
7 Application.DisplayAlerts = False
8 Ur1 = sh1.Range("A" & Rows.Count).End(xlUp).Row + 1
9 ChDir (Percorso)
10 nomeFile = Application.GetOpenFilename("Tutti i files (*.*), *.*")
11 Workbooks.Open (nomeFile)
12 Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
13 Sheets("Final").Range("A2:Z" & Ur2).Copy
14 sh1.Range("A" & Ur1).PasteSpecial
15 Workbooks(nomeFile).Close
16 Application.DisplayAlerts = True
17 Application.ScreenUpdating = True
18 Set sh1 = Nothing
19 End Sub
stefanosaccone
00martedì 15 marzo 2016 13:13
non ho specificato che l'errore lo da sempre alla riga di chiusura del file. (15)
stefanosaccone
00mercoledì 16 marzo 2016 09:28
allego file ENGINE con macro e 2 files MASTERDATA per prova.
raffaele1953
00mercoledì 16 marzo 2016 12:56
1)Premesso che sei su un server ed cambi percorso per aprire un file.
2)Che non sono visti di buon occhio sia gli spazi nei nomi e tanti caratteri nella descrizione.
Creati un file nuovo e mettilo dove Tu sai sul server, avvialo e spostami le 5 righe che vengono scritte sul foglio1
Option Explicit
Sub Copia_Uno()
Dim ws As Workbook, Percorso As String, nomeFile As String, Ur1, Ur2
Percorso = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
[a1] = Percorso & "                                Percorso del file d'apertura.XLSM"
ChDir (Percorso)
nomeFile = Application.GetOpenFilename("Tutti i files (*.*), *.*")
[a2] = Percorso
[a3] = nomeFile & "                                nome file scelto"
nomeFile = Replace(nomeFile, Percorso, "")
[a4] = Percorso
[a5] = nomeFile
[a6] = (Percorso & "                                " & nomeFile)
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
stefanosaccone
00mercoledì 16 marzo 2016 15:02
Grazie.

Fatto tutto come da istruzioni, sul foglio 1 escono 6 righe anzichè 5:

1) C:\Users\stesac\AppData\Roaming\Microsoft\Excel\XLSTART\ Percorso del file d'apertura.XLSM

2) C:\Users\stesac\AppData\Roaming\Microsoft\Excel\XLSTART\

3) \\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Shell\2015\MASTERDATA_Shell_2015_01.xlsm nome file scelto

4) C:\Users\stesac\AppData\Roaming\Microsoft\Excel\XLSTART\

5) \\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Shell\2015\MASTERDATA_Shell_2015_01.xlsm

6) C:\Users\stesac\AppData\Roaming\Microsoft\Excel\XLSTART\
\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA\Shell\2015\MASTERDATA_Shell_2015_01.xlsm

Per chiarezza allego screenshot del risultato.

La logica mi direbbe di inserire i 6 risultati nelle altrettante righe del modulo (a1),(a2),(a3) ecc... tra gli spazi con le virgolette.

Però prima di far caxxate e rovinare tutto ti chiedo conferma perchè ho dubbi sulla 2,4 e 5: sostituisco interamente "Percorso" e "nomeFile" con il risultato in foglio 1?

Ho lasciato il file aperto senza salvare in modo da non compromettere nulla.

Grazie ancora.

Saluti.

Stefano.



raffaele1953
00mercoledì 16 marzo 2016 17:04
Ti ho chiesto di salvarlo sul server, nella posizione che preferisci

>>>Creati un file nuovo e mettilo dove Tu sai sul server

---la prima riga--- NON potrà mai essere questo il percorso C:\Users\stesac\AppData\Roaming\Microsoft\Excel\XLSTART\ Percorso del file d'apertura.XLSM

Solo simile a questo >>>\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data...........

Ps. anche se chiudi il codice non succede nulla. Non abbiamo aperto e neppure dobbimo salvare nulla (i dati sono già dentro il foglio1 del file nuovo creato).


stefanosaccone
00giovedì 17 marzo 2016 09:47
sembra assurdo ma il file era salvato proprio nella cartella del server che volevo...

Ora ci ho provato 3 volte (creando il file direttamente nella cartella server, creandolo nel desktop e poi salvandolo nella cartella server, creandolo in un'altra cartella server e poi spostarlo nella cartella server corretta) ma quello che viene fuori dopo la macro e' sempre quel percorso (non mi do spiegazione a questa cosa...)

l'unica soluzione che mi rimane e' copiare il percorso sulla cartella e incollarlo qui:

\\mona-srv023\DDE\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\ENGINE WORKBOOK



raffaele1953
00giovedì 17 marzo 2016 11:18
Mi arrendo, non so più cosa farci.
Mi verrebbe in mente che "Qualche macro" ti faccia aprire un "fax-simile oppure macro" da AppData\Roaming\Microsoft\Excel\XLSTART\

Ho visto i tre allegati, nessuno dei tre si chiama engine, nessuno dei tre ha il foglio "All Data" e nessuno dei tre ha codici validi all'interno?

C'è un problema che non riesco a decifrare, non ho un server per farci prove e anche se faccessi un "sistema" per fargli cambiare Path non sarebbe un metodo sicuro nel futuro.
stefanosaccone
00martedì 22 marzo 2016 09:26
Ok grazie mille per l'aiuto che mi hai dato finora.
Non chiudo il post perchè sto ancora investigando per riuscire a farlo funzionare.
mi son preso un pò di tempo per studiare e ho comprato un manuale per migliorare le mie basi.
appena ho qualche info in più scriverò un post qui.

grazie mille ancora.
stefanosaccone
00martedì 22 marzo 2016 09:26
Ok grazie mille per l'aiuto che mi hai dato finora.
Non chiudo il post perchè sto ancora investigando per riuscire a farlo funzionare.
mi son preso un pò di tempo per studiare e ho comprato un manuale per migliorare le mie basi.
appena ho qualche info in più scriverò un post qui.

grazie mille ancora.
rollis13
00martedì 22 marzo 2016 17:50
In effetti XLSTART è la cartella che contiene eventuali file per un avvio di Excel personalizzato.
Vedere altre spiegazioni nel sito: https://support.office.com/it-it/article/Aprire-automaticamente-una-cartella-di-lavoro-o-un-modello-specifico-all-avvio-di-Excel-be9cddc1-a148-4cbf-8f3b-779df08957a3
stefanosaccone
00giovedì 24 marzo 2016 12:31
ciao rollis13,
in effetti e' proprio come dici tu.
Excel ha un'impostazione per cui ogni volta che si apre un file crea una versione "fantasma" nella cartella XLSTART.

In piu' il percorso per arrivare a questa cartella era anche nascosto sul mio pc...

Ho provato a seguire le istruzioni per eliminare l'impostazione dal sito che hai postato ma, anche cancellando la cartella, excel la crea nuovamente appena si apre un file.

Per questo e' impossibile usare il percorso "thisWorkbook.path" nelle macro per cercare altri file in quanto il percorso sara' diverso.

Ho modificato manualmente il percorso alla riga 5 inserendo quello che serve a me, in questo modo la macro funziona, a prescidere se il foglio di lavoro ENGINE sia salvato sul desktop, su un server o da qualsiasi altra parte.
L'importante e' che quello che cerca (cioe' i file MASTERDATA) siano salvati nel percorso indicato (in questo caso sul server).

Qui di seguito il codice.

1) Option Explicit
2) Sub Copia_Uno()
3) Dim sh1 As Worksheet: Set sh1 = Worksheets("All data")
4) Dim ws As Workbook, Percorso As String, nomeFile As String, Ur1, Ur2
5) Percorso = "O:\0 - MARCAS ALL\Business Intelligence data\Lubeoil folder\MASTERDATA" & "\"
6) Application.ScreenUpdating = False
7) Application.DisplayAlerts = False
8) Ur1 = sh1.Range("A" & Rows.Count).End(xlUp).Row + 1
9) ChDir (Percorso)
10) nomeFile = Application.GetOpenFilename("Tutti i files (*.*), *.*")
11) nomeFile = Replace(nomeFile, Percorso, "")
12) Workbooks.Open (Percorso & nomeFile)
13) Ur2 = Sheets("Final").Range("A" & Rows.Count).End(xlUp).Row
14) Sheets("Final").Range("A2:Z" & Ur2).Copy
15) sh1.Range("A" & Ur1).PasteSpecial
16) Workbooks(nomeFile).Close
17) Application.DisplayAlerts = True
18) Application.ScreenUpdating = True
19) Set sh1 = Nothing
20) End Sub

A questo punto pero' ho il problema di chiudere il file MASTERDATA che ho selezionato, questo accade perche' il percorso che gli ho indicato per aprire il file arriva a 2 cartella "sopra" dove e' presente il file.

In questo modo la macro "attacca" al nome file anche l'ultimo pezzo di percorso (selezionato manualmente) per arrivarci.

A questo proposito il buon Raffaele1953 (a onor del vero creatore di tutta la macro) aveva inserito giustamente la riga 11 nomeFile = Replace(....) in modo da dividere il percorso dal nome file, ma non sono ancora in grado di riuscire a farla funzionare come voglio.

Il problema in questo caso e' che tutti i file MASTERDATA non hanno la stessa lunghezza in termini di caratteri e quindi non riesco a capire come separare percorso e nome file in maniera corretta.

L'alternativa che mi rimane e' cancellare le righe dalla 16 alla 19 e chiudere io manualmente il file ogni volta prima di selezionarne un altro.

Provo ad allegare un file ENGINE e 2 file MASTERDATA con nomi diversi.(non so se le macro vengono condivise insieme ai file zip...)

Per lavorarci bisognera' cambiare il percorso alla riga 5 della macro e inserire il percorso della cartella dove si salvano i file.
In piu' bisogna salvare i MASTERDATA due "livelli" piu' in basso del percorso.

ex: i file vengono salvati sul desktop in una cartella chiamata "luboilfolder", all'interno di questa cartella ci sara' una cartella "ENGINE" e una cartella "MASTERDATA".

Per il momento lasciamo perdere la cartella ENGINE (che e' ininfluente) e concentriamoci sulla cartella MASTERDATA.

All'interno di essa ci saranno tante cartelle quanti sono i clienti e all'interno di ognuna delle cartelle clienti due cartelle con l'anno (2015 e 2016).

Quindi il percorso inserito alla riga 5 della macro sara':

C:/User/desktop/luboilfolder/MASTERDATA/

Ricapitolando i possibili percorsi saranno:

- C:/user/desktop/luboilfolder/MASTERDATA/Nomecliente1/2015/...
- C:/user/desktop/luboilfolder/MASTERDATA/Nomecliente1/2016/...
- C:/user/desktop/luboilfolder/MASTERDATA/Nomecliente2/2015/...
- C:/user/desktop/luboilfolder/MASTERDATA/Nomecliente2/2016/...
- .....

con 5 o piu' diversi nomi clienti

Io ho bisogno che la formula "Replace" sia in grado di "staccare" il percorso al momento in cui trova l'anno e di riconoscere come nomeFile quello che c'e' dopo.

In questo modo la macro sara' in grado di riconoscere il nome file e chiuderlo una volta copiato cio' che deve.

Spero che cio' che ho scritto riesca ad essere comprensibile.

Grazie per l'aiuto.




Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 16:55.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com