Concatenare fogli



  • Concatenare fogli
    di Lisa B. (utente non iscritto) data: 03/02/2015 15:09:28

    Buongiorno ragazzi, vi scomodo per chiedervi se è possibile concatenare due file (x concatenare intendo che il valore di alcune celle del file B sono = al valore delle celle del file A) e far si che rimangano concatenati nonostante cambino dislocazione.

    Grazie



  • di Vecchio Frac data: 03/02/2015 16:12:18

    I collegamenti dovrebbero rimanere anche a file chiusi, ma, spostandoli, all'apertura probabilmente dovrai rinnovare i link perduti.
     
    'file B
    A1: ='C:Users...Desktop[nome file.xlsx]Foglio1'!$A$1






  • di Lisa B. (utente non iscritto) data: 03/02/2015 16:34:16

    Il problema dello spostare i file da un pc all'altro è proprio quello di dover rinominare i concatenamentie.... Son troppi da dover fare ogni volta...

    Soluzioni?



  • di Arturo (utente non iscritto) data: 03/02/2015 17:57:30

    Credo che basti fare il tutto nella stessa cartella. Ex C:EXCEL omefile.xl..

    Spostarlo in diversi Pc non cambia nulla



  • di Lisa B. (utente non iscritto) data: 03/02/2015 18:58:41

    Purtroppo non posso tenerlo nella stessa cartella. Il file A è in una sottocartella della cartella dove si trova il file B



  • di Lisa B. (utente non iscritto) data: 03/02/2015 20:47:02

    Ho allegato file di esempio...

    Credo che una macro possa aiutarmi a far tutto....



  • di Arturo (utente non iscritto) data: 03/02/2015 21:11:06

    Sicuramente sono io che non capisco. Però....
    Se metto un file in C: (significa la radice di tutti i PC "a meno che mi spostino OS in altra radice") tutti i file sono uguali per ogni PC.
    Poi che un file sia sotto cartella, oppure sotto/sotto altra cartella è lo stesso. Anche sotto/altra cartella.
    Casomai chiedo scusa se erro

    EX in B2 la formula Tua sarebbe
    ='C:Personale V.FMazzaliCartella[FILE B.xls]Foglio1'!L5

    Con il mio metodo sarebbe (non pensare a C:EXCEL omefile.xl..
    ='C:Cartella[FILE B.xls]Foglio1'!L5




  • di Vecchio Frac data: 03/02/2015 22:04:40

    Excel non può indovinare la nuova posizione di un file cui è collegato, se il file viene spostato nello stesso pc.
    E' per questo che appare l'avviso di continuare (senza attivare i collegamenti) o modificare i collegamenti in modo da far cercare all'utente, manualmente, la nuova posizione del file.
    E Lisa cerca appunto un modo per automatizzare questa ricerca.
    Probabilmente si può anche fare, a maggior ragione se si sa già la struttura del nuovo percorso.

    Comunque Arturo intende dire questo: se sposto il file collegato in un altro pc e in uno stesso identico percorso dell'originale, probabilmente non cambia nulla... Excel aveva un percorso, lo ritrova identico all'apertura del file con collegamenti; e forse può anche aver ragione, io non ho provato.
    Però può darsi che Lisa non possa mantenere la stessa identica struttura del pc originale, e farle creare una cartella in radice come origine comune dei collegamenti non è un buon suggerimento (dubito anche che nei sistemi protetti si possa aver accesso alla radice se non si è amministratori almeno locali).





  • di Raffaele_53 (utente non iscritto) data: 03/02/2015 23:24:08

    Ciao VF
    Acune volte mi indentifico come "Arturo". Sicuramente non facevo nulla di male, tranne a me stesso.
    Facendo questo, mi è capitato due volte di scontrarmi con Te (cosa che non vorrei mai).

    Forse non hai ragione in due cose....

    1) Per dare una risposta bisogna prima capire il problema.
    Una volta identificato (formula) si può anche creare un VBA

    2) Le dipendenze da un file excel, dipendono dal percorso e sappiamo tutti che la radice di ogni PC sia C:
    Ora metti cartelle/sotto cartelle per ogni collegamento che fai ...., deve funzionare

    Ps Arturo non lo uso più



  • di Raffaele_53 (utente non iscritto) data: 03/02/2015 23:42:38

    Ps. Ultimo dettaglio
    Io creo le varie dipendenze direttamente nella cartella C:Pincopallino
    Quando si sposta in altro PC sarà la medesima cosa
    C:Pincopallino" e poi tutte le sotto cartelle che desideri



  • di Raffaele_53 (utente non iscritto) data: 04/02/2015 00:07:47

    PPS VF
    Mi sono registrato (come richiesto da Te)

    Ti sembra giusto che ogni volta vengo in questo sito, io debba riscrivere il mio accaunt/password?
    In altri siti non succede. Ecco il motivo di Arturo



  • di Raffaele_53 (utente non iscritto) data: 04/02/2015 00:10:48

    Anche Raffaele_53



  • di Lisa B. (utente non iscritto) data: 04/02/2015 05:37:19

    Come dice VF, sarà impossibile che tutti i pc usino lo stesso percorso... però potrei spiegare anche ai più "DURI" come aggiornare il percorso...

    Vorrei chiedere al mago delle VBA... VF... è possibile realizzare una macro che faccia il lavoro che ho fatto nell'esempio?

    In pratica... lancio la macro nel FILE A, la macro apre il FILE B e va nel foglio1
    Copia la cella L5 e la incolla nel FILE A nella cella B2, Copia le celle L8:L11 e le copia nel FILE A nelle celle B3:B6
    Poi con la cadenza di 21 righe a scendere, copia nello stesso ordine L26 e L29:L32 e li incolla nel FILE A colonna C, scendo ancora di 21 righe, copio e incollo in D... (questa operazione x 12 volte)
    Una volta fatto questo nel foglio 1, apre il foglio 2 del FILE B e a la stessa medesima cosa, Copia G6 e G9:G12 del FILE B in B7 e B8:11 del FILE A.
    Nel foglio 2 la cadenza non è di 21 righe ma 15.

    Poi dovrò incrementare alle collegamenti, ma una volta che ho capito la procedura, sarà mia premura completare la macro...



  • di Vecchio Frac data: 04/02/2015 10:21:03

    Prima di rispondere a Lisa voglio rispondere a Raffaele per togliere ogni malinteso :)
    Per me non è rilevante il nome dell'utente quando cerco di dare una risposta.
    Poi, chiaro che fa piacere rileggere nomi che sono familiari.
    Sapere che "Arturo" è "Raffaele" non cambia molto le carte in tavola dal punto di vista dello sforzo di rispondere correttamente alle richieste degli utenti :)
    Non ho avuto la percezione che ci siamo "scontrati"... e se questa è l'impressione che hai tu, mi dispiace di avertene fornito motivo, ma non è questa la mia intenzione (scontrarmi con qualcuno).
    Se a volte do risposte secche è perchè magari ho poco tempo oppure ho un'idea che mi frulla in testa e voglio liberarmene in fretta :)
    E comunque gli scontri quando sono costruttivi servono ad ampliare le proprie vedute: basta saper restare nei limiti della civile educazione. Non credo di aver mai insultato nessuno nella mia frequentazione dei forum.

    Non so dirti niente sul motivo per cui il sistema non accetta il tuo nome utente: ne informerò patron Mauro.
    Che browser usi? come sono le impostazioni di salvataggio? ci sono eccezioni sui siti nelle impostazioni di memorizzazione e gestione delle password nel tuo browser?

    Nel merito, confermo che io prediligo VBA anche quando posso (e magari anche so) fare prima con formule. Ma è un mio limite, non un'imposizione di metodo. Concordo che bisogna prima cercare di capire il mio problema: io però lo avevo capito in un certo modo, e come avviene in tutte le cose se uno si convince di aver capito magari può prendere anche dei granchi :)

    Sui collegamenti, io davo l'interpretazione del tuo pensiero e probabilmente ci ho azzeccato ("Comunque Arturo intende dire questo:") perchè lo hai confermato con altre parole ("Quando si sposta in altro PC sarà la medesima cosa
    C:Pincopallino e poi tutte le sotto cartelle che desideri"). Obiettavo solo che non è bene sporcare la root di un pc.

    @Lisa
    cit. " è possibile realizzare una macro che faccia il lavoro che ho fatto nell'esempio? "
    ---> E' possibile fare (quasi) tutto ^_^





  • di Lisa B. (utente non iscritto) data: 04/02/2015 11:14:29

    Io non ho visto "atrito" in nessun commento ad essere sincara... ovvio ognuno ha il proprio punto di visata e ogni utente poi trova più simbiosi con uno o l'altro... Di sicuro c'è che questa è una MINIERA D'ORO per noi poveri praticanti di EXCEL... grazie a voi, si superno ostacoli insuperabili.

    Detto questo aggiungo..... FACCIAMO L'AMORE NON FACCIAMO LA GUERRA

    Vecchio Frac... al tuo (quasi) tutto rispondo.......



  • di Vecchio Frac data: 04/02/2015 11:38:16

    Eh Lisa ci vorrebbe qualche anno di meno sulle spalle per essere efficienti anche lì ^_^
    Comunque per il tuo problema non ricordo se hai già detto di aver registrato un pezzo di macro, dai file allegati mi sembra di no, potresti però provarci così partiamo da una base comune.
    Per la cadenza di 21 righe a scendere... esistono i cicli For ... Step ... Next.





  • di Lisa B. (utente non iscritto) data: 04/02/2015 12:18:04

    Tra poco ci provo....

    Poi vediamo


  • Concatenare fogli VBA
    di Lisa B. (utente non iscritto) data: 04/02/2015 16:24:26

    VF.... Ho registrato la mia macro e corretta per fatla andare... Ma va solo se tengo i due fogli aperti.

    Non ho idea di come dare le cadenze, i comandi che mi hai citato non so come inserirli



  • di Raffaele_53 (utente non iscritto) data: 04/02/2015 18:01:07

    @Lisa
    in data: 03/02/2015 16:34:16 >>>Il problema dello spostare i file da un pc all'altro
    Ripeto spostare la cartella (quindi anche la sottocartella) da un PC ad altri non succede nulla. l'importante che la metti sempre dentro la root del PC (casomai farai un collegamento sul desktop dell'utente)

    Invece spostare il file da una cartella all'altra sullo stesso PC, avrai il problema che hai descritto
    Ci sto provando con formule = indiretto,vba per adesso non ci riesco. Appena posso Te lo comunico.
    Scusami se continuo sul Tuo post.

    @VF
    Per l'amore del cielo è solo un malinteso.
    Ho usato il termine (inadeguatamente) """scontrarmi""", era solo un modo per dire che la pensavo differentemente.
    Lungi da me creare una discordia nei Tuoi confronti

    Ps.Non si tratta di browser od altro. (in altri forum quando rispondo, mi viene scritto automaticamente il nome)
    In questo nonostante sia registrato, quando rispondo non vengo riconosciuto come Raffaele_53, ma devo scrivere il nome in NOME (o nick)



  • di Vecchio Frac data: 04/02/2015 18:27:33

    Patron Mauro mi ha detto che è un problema di cookies (che questo sito non gestisce) ma cercherà di trovare una soluzione.
    E' strano però perchè a me invece il nick viene ricordato con tutta la sua bella password :)





  • di Lisa B. (utente non iscritto) data: 04/02/2015 19:19:26

    Io i cookies li mangio alla mattina con il latte



  • di Vecchio Frac data: 04/02/2015 20:08:21

    cit. "Ho registrato la mia macro e corretta per fatla andare... Ma va solo se tengo i due fogli aperti. "
    ---> Bè, è già un risultato :) Vediamo la macro allora.


    cit. "Io i cookies li mangio alla mattina con il latte "
    ---> o.O





  • di Lisa B. (utente non iscritto) data: 04/02/2015 20:37:57

    È nel file allegato VF



  • di Raffaele_53 (utente non iscritto) data: 04/02/2015 20:43:07

    Questo codice serve quando si cambia cartella sullo stesso Pc
    La riga prima di quella verde riscrive la formula. Se incece desideri solo il valore puoi usare la riga verde annullado quella sopra
     
    Sub cambia_Percorso()
    Dim P_Vecchio As String, P_Nuovo As String, File As String, Form As String, N As Long, Area As Range, cell As Range
    Dim PrendiDati As String, Rif As String, Foglio As String
    P_Nuovo = Left(ThisWorkbook.Path, Len(ThisWorkbook.Path) - 13) ' meno 13 perchè conosciamo i caratteri di Sottocartella
    Set Area = Range("B2:D11")
        For Each cell In Area
            P_Vecchio = Left(cell.Formula, InStr(cell.Formula, "[") - 1)
            If P_Nuovo <> P_Vecchio Then
                Rif = Mid(cell.Formula, InStr(cell.Formula, "!") + 1, Len(cell.Formula))
                Foglio = Mid(cell.Formula, InStr(cell.Formula, "]") + 1, InStr(cell.Formula, "!") - InStr(cell.Formula, "]") - 2)
                File = Mid(cell.Formula, InStr(cell.Formula, "[") + 1, InStr(cell.Formula, "]") - InStr(cell.Formula, "[") - 1)
                cell.FormulaR1C1 = "='" & P_Nuovo & "[" & File & "]" & Foglio & "'!" & Range(Rif).Range("A1").Address(, , xlR1C1)
                'PrendiDati = ExecuteExcel4Macro("'" & P_Nuovo & "[" & File & "]" & Foglio & "'!" & Range(Rif).Range("A1").Address(, , xlR1C1))
            End If
        Next cell
    Set Area = Nothing
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 04/02/2015 21:13:57

    Ps se desideri usare la riga verde devi togliere due righe
    >>> If P_Nuovo <> P_Vecchio Then
    >>>End If



  • di Lisa B. (utente non iscritto) data: 04/02/2015 22:39:16

    Oooh nio Dio.... Ti ringrazio Raffaele mah è troppo complessa x me.... Non riuscirò mai ad adattarla.... Credevo fosse più semplice come lavoro...



  • di Raffaele_53 (utente non iscritto) data: 05/02/2015 03:43:32

    >>>Non riuscirò mai ad adattarla....

    Il codice è fatto per l'esempio che hai spostato non c'è nulla da modicare, solo incollarlo nel foglio1 del FILE A.XLS
    Casomai usi altre celle dovrai modificare la Riga --->Set Area = Range("B2:D11")
    Casomai la sottocartella avesse un altro nome dovrai modificare il numero
    --->P_Nuovo = Left(ThisWorkbook.Path, Len(ThisWorkbook.Path) - 13) 'dove meno 13 significa il conteggio dei caratteri EX: sottocartella = 13, Dati = 4, Esempio = 7 ecc ecc



  • di Lisa B. (utente non iscritto) data: 05/02/2015 06:21:02

    GRAZIE RAFFAELE!!!!!!!!!

    Grazie per la pazzienza e la gentilezza nei miei confronti!!!!!



  • di Raffaele_53 (utente non iscritto) data: 05/02/2015 08:22:55

    Per il Tuo caso la riga verde meglio non usarla

    Altro VBA più leggibile.
    Se nel "FILE A.xls" in cella A1 metti la formula scritta (sotto) vedrai una risposta simile -->C:Personale V.FMazzaliCartella ''', questo sarà il percorso dove esiste il File B.xls
    Se in A2 scrivi --->[File B.xls]Foglio1<---Mi raccomando i simboli "[" e "]", questa stringa ecquivale al nome del file&foglio dove preleverai i dati

    Ps. Ammettiamo che in cella B12 desideri aggiungere un'altra formula basta che scrivi il simbolo ! + la cella Ex !L22
     
    'formula da mettere in A1 Grazie ninai
    =SINISTRA(CELLA("nomefile";A1);TROVA("@";SOSTITUISCI(CELLA("nomefile";A1);"";"@";LUNGHEZZA(CELLA("nomefile";A1))-LUNGHEZZA(SOSTITUISCI(CELLA("nomefile";A1);"";"";))-1))-1)
    
    Sub Dati()
    Dim Area As Range, cell As Range, rif As String, percorso As String, file_foglio As String
    percorso = [A1].Value
    file_foglio = [A2].Value
    Set Area = Range("B2:D15")
        For Each cell In Area
            If cell <> "" Then
                rif = Mid(cell.Formula, InStr(cell.Formula, "!") + 1, Len(cell.Formula))
                On Error Resume Next
                cell.FormulaR1C1 = "='" & percorso & file_foglio & "'!" & Range(rif).Range("A1").Address(, , xlR1C1)
            End If
        Next cell
    Set Area = Nothing
    MsgBox "Fatto"
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 05/02/2015 08:32:36

    Errata corrige
     
    'formula da mettere in A1 Grazie ninai
    =SINISTRA(CELLA("nomefile";A1);TROVA("@";SOSTITUISCI(CELLA("nomefile";A1);"";"@";LUNGHEZZA(CELLA("nomefile";A1))-LUNGHEZZA(SOSTITUISCI(CELLA("nomefile";A1);"";""))-1)))



  • di Lisa B. (utente non iscritto) data: 05/02/2015 14:04:53

    Interessante

    Bella soluzione!!!

    Grazie Ninai e grazie Raffaele



  • di Lisa B. (utente non iscritto) data: 05/02/2015 18:17:46

    Mi piace un sacco l'ultima soluzione proposta...

    Ho finito tutti icollegamenti del mio file "alla vecchia" cioè uno ad uno e poi ho aggiunto la macro adattata!

    Tutto perfetto... E sono soddisfatta del risultato

    Grazie ancora a tutti



  • di Lisa B. (utente non iscritto) data: 10/02/2015 12:33:24

    V.Frac...

    Questa macro poi è andata nel dimenticatoio....



  • di Vecchio Frac data: 10/02/2015 13:02:20

    Bè, Raffaele aveva risposto e sembravi soddisfatta della risposta, hai anche messo "Risolto"... dimmi, c'è qualcos'altro da fare in merito a questa discussione? ti aspetti qualche altra modifica?





  • di Lisa B. (utente non iscritto) data: 11/02/2015 01:46:22

    Risolta è risolta... Mah mi sarebbe piaciuto vedere come il vba creava i passaggi che io con il solo registratore nin sono riuscita a fare



  • di Raffaele_53 (utente non iscritto) data: 11/02/2015 13:45:59

    Il registratore aiuta tanto (soppratutto con versioni differenti d'excel)
    Comunque è anche un registratore stupido.
    Per dirgli copia/incolla una cella, prima fa una riga con select, dopo un'altra con copy, dopo un'altra per dirgli di copiare
    Tre righe per un semplice passaggio che si risolve in una sola riga
    Cella d'arrivo = cella di partenza

    Il primo codice spostato che Ti sembrava "Strambo", fa già il tutto senza che Tu facessi nulla.
    Certo quei segni che vedevi erano solo per calcolare l'attuale percorso e il percorso della cartella sopra.

    Mettendo due formule sul foglio tutti quei passaggi non li dovevo più fare.
    Risultato, un VBA più leggibile



  • di Lisa B. (utente non iscritto) data: 11/02/2015 21:48:52

    Io mi riferivo a questi passaggi per quanto riguarda il VBA...

    è possibile realizzare una macro che faccia il lavoro che ho fatto nell'esempio?

    In pratica... lancio la macro nel FILE A, la macro apre il FILE B e va nel foglio1
    Copia la cella L5 e la incolla nel FILE A nella cella B2, Copia le celle L8:L11 e le copia nel FILE A nelle celle B3:B6
    Poi con la cadenza di 21 righe a scendere, copia nello stesso ordine L26 e L29:L32 e li incolla nel FILE A colonna C, scendo ancora di 21 righe, copio e incollo in D... (questa operazione x 12 volte)
    Una volta fatto questo nel foglio 1, apre il foglio 2 del FILE B e a la stessa medesima cosa, Copia G6 e G9:G12 del FILE B in B7 e B8:11 del FILE A.
    Nel foglio 2 la cadenza non è di 21 righe ma 15.

    Poi dovrò incrementare alle collegamenti, ma una volta che ho capito la procedura, sarà mia premura completare la macro...



  • di Raffaele_53 (utente non iscritto) data: 12/02/2015 03:06:30

    Non mi ero accorto del quesito che avevi fatto.
     
    Option Explicit
    Sub copia()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' Sul FILE A gli dico che il foglio1 sarà dove scrivere i dati (da adesso si chiama Sh1)
    Dim Percorso As String, X As Long, Y As Long, Nome As String, C As Long, R  As Long 'valorizzo delle variabili
    'Adesso dobbiamo dirgli il percorso dove aprire il secondo file se usi la formula in A1 basta scrivere
    Percorso = sh1.Cells(1, 1) ' Cella A1, oppure si poteva scrivere--->Percorso = "C:Prova" 'con la  finale
    Nome = "FILE B.Xls" 'non il massimo avere dei spazi nei nomi
    Application.ScreenUpdating = False 'per evitare tremolio sul monitor
    Workbooks.Open (Percorso & Nome)
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio1") 'gli dico su quale foglio prendere i dati (da adesso si chiama Sh2)
    R = 5 'significa che copiera dalla riga 5
    C = 2 'significa che copiera in colonna 2 = B
    For X = 1 To 12 'Inzia a fare una ripetiziono sino a 12 volte controlla bene forse sono 13 i cicli
        'senza spostarsi tra i due file con Sh1 e Sh2 si fa tutto
        sh1.Cells(2, C) = sh2.Cells(R, 12) 'scrive in (2, C)al primo ciclo 2 è la riga C = B,,,,,prende i dati da(R, 12) R = 5,,,,12 = L
        sh1.Cells(3, C) = sh2.Cells(R + 3, 12) 'scrive in riga 3,,,,,prende i dati dalla riga R =5+3
        sh1.Cells(4, C) = sh2.Cells(R + 4, 12) 'scrive in riga 4,,,,,prende i dati dalla riga R =5+4
        sh1.Cells(5, C) = sh2.Cells(R + 5, 12) 'scrive in riga 5,,,,,prende i dati dalla riga R =5+5
        sh1.Cells(6, C) = sh2.Cells(R + 6, 12) 'scrive in riga 6,,,,,prende i dati dalla riga R =5+6
        R = R + 21 ' se prima prendeva dalla riga 5 adesso aumentano si sposta di riga R = 26 ecc ecc
        C = C + 1 ' se prima scriveva in B adesso aumentano si sposta di colonna ecc ecc
    Next X ' ricomincia il ciclo
    Set sh2 = Worksheets("Foglio2") 'gli dico su quale foglio prendere i dati (da adesso si chiama Sh2)
    R = 6 'significa che copiera dalla riga 6
    C = 2 'significa che copiera in colonna 2 = B
    For X = 1 To 12 'Inzia a fare una ripetiziono sino a 12 volte controlla bene forse sono 13 i cicli
        'senza spostarsi tra i due file con Sh1 e Sh2 si fa tutto
        sh1.Cells(7, C) = sh2.Cells(R, 7) 'scrive in (7, C)al primo ciclo 7 è la riga C = B,,,,,prende i dati da(R, 7) R = 6,,,,7 = G
        sh1.Cells(8, C) = sh2.Cells(R + 3, 7) 'scrive in riga 8,,,,,prende i dati dalla riga R =6+3
        sh1.Cells(9, C) = sh2.Cells(R + 4, 7) 'scrive in riga 9,,,,,prende i dati dalla riga R =6+4
        sh1.Cells(10, C) = sh2.Cells(R + 5, 7) 'scrive in riga 10,,,,,prende i dati dalla riga R =6+5
        sh1.Cells(11, C) = sh2.Cells(R + 6, 7) 'scrive in riga 11,,,,,prende i dati dalla riga R =6+6
        R = R + 15 ' se prima prendeva dalla riga 6 adesso aumentano si sposta di riga R = 21 ecc ecc
        C = C + 1 ' se prima scriveva in B adesso aumentano si sposta di colonna ecc ecc
    Next X ' ricomincia il ciclo
    ActiveWorkbook.Close False ' chiudo il file dove ho prelevato i dati senza salvare
    MsgBox "Fatto" 'Per avvisare che è finito
    Application.ScreenUpdating = True 'riaccendo il tremolio monitor
    Set sh1 = Nothing 'distruggo il set
    Set sh2 = Nothing 'distruggo il set
    End Sub



  • di Lisa B. (utente non iscritto) data: 12/02/2015 14:51:19

    Grazie ancora una volta RAF.... I testi che metti dopo i comandi sono fantastici e aiutano davvero tanto