Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Copia e incolla dati

Ultimo Aggiornamento: 15/10/2018 16:36
Post: 104
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
13/10/2018 10:01

Buon giorno a tutti gli amministratori e utenti del Forum


Avrei esigenza di copiare e incollare dati da diversi file di origine ad uno finale (in questo a partire dall'ultima riga vuota)


Precisamente:

Ho diverse cartelle di lavoro, nominate:

'0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (01)'
'0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (02)'
Ecc. ecc.

(Tutte con foglio di lavoro 'Fattura')


E una cartella di lavoro:
'archivio'
Con foglio di lavoro:
'Storico'


Vorrei che, all'apertura di ciascuna cartella di lavoro e al lancio della macro:

Tutti i dati presenti nell'intervallo 'C:AC' del foglio 'Fattura'
(da considerare solo le righe a con la cella 'C' piena a partire dalla riga 65559)...


Vengano copiati nella cartella di lavoro 'archivio' - Foglio di lavoro 'Storico'
a partire dall'ultima riga in colonna 'C'

Allego i files di esempio
Windows 10 - Excel LTSC
Post: 104
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
13/10/2018 10:03

Ringrazio anticipatamente per qualsiasi risposta.
Buona giornata
Windows 10 - Excel LTSC
Post: 3.149
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
13/10/2018 12:47

Buona giornata, Pierpaolo;
fare ciò che chiedi non è un grosso problema, quello che mi chiedo è:
-    Dopo il primo aggiornamento, cosa succede nell'aggiornamento successivi?
Voglio dire, partendo dai tuoi allegati abbiamo:
-    File "Archivio", Foglio di lavoro "Storico", 3 Fatture Righe 11 ÷ 13
-    File "01", Foglio di lavoro "Fattura", n° 2 Fatture Righe 65559 ÷ 65560
-    File "02", Foglio di lavoro "Fattura", n° 3 Fatture Righe 65559 ÷ 65561
Dopo il il primo aggiornamento nel File "Archivio" troveremo 8 Record (3+2+3)

A questo punto, nei File "01" e "02" aggiungerai altre Fatture, ma quando andrai ad aggiornare il File "Archivio" verrebbero aggiunti tutte le Fatture presenti nei File "01" e "02".
Temo che troveresti delle Fatture dupplicate; o mi sbaglio?

Una soluzione potrebbe essere quella di cancellare tutte le Fatture presenti nel File "Archivio" prima di ogni aggiornamento; d'accordo che il tuo è solo un esempio, ma, cancellando le Fatture prima di ogni aggiornamento, perderesti le Fatture dell'Intestatario "Rossi Paolo".



A disposizione.

Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 105
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
13/10/2018 13:41

Buon pomeriggio Giuseppe MN e grazie per la risposta.

Spero di aver compreso il tuo concetto

Come dici tu,
PRIMA dell'aggiornamento del file 'archivio' - Foglio di lavoro 'Storico', HO
alle righe 11-12-13 di questo,
i singoli articoli (tre) nell'ambito della fattura n°1 del 06/10/2018 di Rossi Paolo


Successivamente:
apro il file '0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (01)'
e, al lancio della macro, otterrei
alle righe 14-15 del file 'archivio'
i singoli articoli (due) nell'ambito della fattura n°2 del 06/10/2018 di Verdi Antonio


Poi:
apro il file '0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (02)'
e, al lancio della macro, otterrei
alle righe 16-17-18 del file 'archivio'
i singoli articoli (tre) nell'ambito della fattura n°3 del 10/10/2018 di Verdi Antonio



Ipotizzando che io compili successivamente il file '0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (01)' per
un nuovo ordine di tre articoli di Rossi Paolo del 15/10/2018
al lancio della macro, trasferirei
alle righe 19-20-21 del file 'archivio'
tre articoli nell'ambito di una fattura dalla numerazione (n°4 in colonna 'E') e data (15/10/2018 in colonna 'F')
diverse rispetto alle precedenti

Ciò, a mio avviso, scongiura ogni duplicazione.
Windows 10 - Excel LTSC
Post: 3.150
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
13/10/2018 14:11

Buona giornata, Pierpaolo;
nutro ancora qualche dubbio sul buon funzionamento della Procedura, l'unica cosa è testarla con i tuoi File originali.

Option Explicit

Sub Importa_nomi_File()
Application.ScreenUpdating = False
Dim RSt As Long, RFt As Long
Dim QtF As String, Nome As String
Const MiaPath As String = "C:\Pierpaolo Cavallo\Archivio\"
    
    QtF = ActiveWorkbook.Name
        ChDir MiaPath
    Nome = Dir("*.xlsx")
        If Nome = "" Then Exit Sub
            While Nome <> ""
                RSt = Cells(Rows.Count, "C").End(xlUp).Row + 1
                    If RSt < 11 Then RSt = 11
                Workbooks.Open Filename:=Nome
                    RFt = Cells(Rows.Count, "C").End(xlUp).Row
                        Range(Cells(65559, 3), Cells(RFt, 29)).Copy
                            Windows(QtF).Activate
                        Cells(RSt, 3).PasteSpecial Paste:=xlPasteValues
                            Workbooks(Nome).Close
                    Nome = Dir
            Wend
Application.ScreenUpdating = True
    Cells(11, 3).Select
End Sub

Ovviamente dovrai inserire la corretta Directory; attualmente è "C:\Pierpaolo Cavallo\Archivio\" definita nella Costante "MiaPath".

Considera solo che ho dovuto "ripulire la Colonna C dei tuoi File"; c'era qualche carattere anomalo, fose uno spazio, nelle Celle sottostanti l'ultima Fattura.

Fai sapere se hai problemi; potrei inviarti i File che ho utilizzato per i miei Test.



A disposizione.

Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 106
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
13/10/2018 14:24

Grazie mille, Giuseppe MN
Appena di ritorno a casa la provo.
Buon proseguimento di giornata
Windows 10 - Excel LTSC
Post: 107
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
14/10/2018 09:05

Buon giorno a tutti gli utenti del Forum.

GiuseppeMN, grazie per la tua risposta.

Ho modificato il percorso come indicato; aperto il file 'archivio' e lanciato la macro.

Tecnicamente l'istruzione effettua la copia dei dati nel file di destinazione, ma con alcuni problemi che elencherò a seguire e, a causa dei quali, sarebbe preferibile una macro più limitata, che lasci a me la scelta di quale file di origine aprire e che esegua automaticamente solo l'operazione di copia e incolla dei dati nel file di destinazione.

Cioè:
a) la macro seleziona l'intervallo 'C65559:AC65583' di un qualsiasi file di origine che io apro manualmente
b) lo copia e incolla (opzione valori) nel file di destinazione: - "archivio" a partire dalla prima cella vuota nell'ambito del range 'C11:C10000'

Precisamente:
1) Apro manualmente il file di destinazione: - "archivio" e il file di origine: - "0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (01)"
e da quest'ultimo lancio la macro.

2) Chiudo manualmente il file di origine. - "0000.00.00_DDT_XX_XXX_riv.00_xxx_xxx_€00,00 - Copia (01)"

3) il file di destinazione:- "archivio" rimane aperto

E così via

Windows 10 - Excel LTSC
Post: 108
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
14/10/2018 09:15

Se possibile nel modo indicato nel mio precedente messaggio, eviterei molti problemi legati all'esecuzione della macro dal file di destinazione: - "archivio" con i con i file di origine chiusi.

Questi, infatti, incorporano dei collegamenti ad altri file.

In tal modo, quando la macro va ad aprirli - compare finestra di avviso con richiesta di aggiornamento dei collegamenti.

Inoltre la macro - indifferentemente che io aggiorni o meno detti collegamenti - copia e incolla sì i dati nel file di destinazione, ma conserva attiva l'istruzione di copia dell'intervallo nel file di origine.
In tal modo, quando va a chiudere il file di origine, compare altra finestra di avviso con l'indicazione che 'gli appunti contengono una grande quantità di informazioni.

Se scelgo 'no, ripete la procedura
Se scelgo 'annulla' si apre finestra di errore di run-time '1004'
Metodo 'Close' dell'oggetto '_Workbook' non riuscito
Dal successivo debug appare evidenziata in giallo la stringa
Workbooks(Nome).Close
Windows 10 - Excel LTSC
Post: 3.151
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
14/10/2018 19:43

Buona sera, Pierpaolo;
se ho recipito correttamente la tua richiesta, potresti provare questo Codice VBA:


Option Explicit

Sub Copia_Record()
Application.ScreenUpdating = False
Dim Rcd As Long
Dim QsF As String
Const File As String = "Archivio.xlsx"

    QsF = ActiveWorkbook.Name
        Range(Cells(65559, 3), Cells(65583, 29)).Copy
        
            Windows(File).Activate
                Rcd = Range("C" & Rows.Count).End(xlUp).Row + 1
                    Cells(Rcd, 3).PasteSpecial Paste:=xlPasteValues
                        Application.CutCopyMode = False
                Cells(11, 3).Select
            Windows(QsF).Activate
                Cells(65559, 3).Select
Application.ScreenUpdating = True
End Sub

Ovviamente il Codice VBA dovrà essere fruibile da ogni File "Copia"; per ottenere ciò ti propongo due alternative:
- Inserire il Codice VBA in ogni File "Copia" e salvare il File con estensione .xlsm
- Inserire il Codice VBA nelle "Macro personalizzate"; in questo caso i File "Copia" potranno essere salvati con estensione .xlsx come nel tuo allegato iniziale.



A disposizione.

Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 110
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
14/10/2018 22:59

Buona sera, GiuseppeMN

La presente discussione può considerarsi risolta, la tua macro funziona perfettamente.
Ho preferito rinominarla e inserirla in Personal.XLSB con attivazione a mezzo scelta rapida da tastiera.


L'unico problema rimasto esula dalla struttura della macro e risiede nelle celle apparentemente vuote (ma in realtà con valore "") del Range C65559:C65583 del file di origine.

Tali valori, come da istruzione richiesta, vengono copiati nel file di destinazione, col risultato che, al lancio della successiva macro - che copia i dati a partire dalla prima cella (effettivamente) vuota in Colonna 'C' - si determinano dei'buchi' simili a quelli da immagine allegata.

Ho cercato sul Web una soluzione al problema (anche per non abusare sempre e senza ritegno della disponibilità tua e di tutti gli altri che me l'hanno sempre concessa pressoché illimitatamente) e ne ho trovata una che mi sono permesso di inserire alla fine della tua macro (sembra funzionare) e che riporto a seguire.

Sorriderai, visto che - in tale campo - il mio operato è assimilabile a quello dell'uomo di Cro-magnon coi pennelli su una tela di Raffaello.


Grazie di tutto e Buona notte a te e a tutti gli utenti del Forum






Option Explicit

Sub Archivio_Storico()
'
' Archivio_Storico Macro
'
' Scelta rapida da tastiera: CTRL+z
'
Application.ScreenUpdating = False
Dim Rcd As Long
Dim QsF As String
Const File As String = "Archivio.xlsx"

QsF = ActiveWorkbook.Name
Range(Cells(65559, 3), Cells(65583, 29)).Copy

Windows(File).Activate
Rcd = Range("C" & Rows.Count).End(xlUp).Row + 1
Cells(Rcd, 3).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Cells(11, 3).Select
Windows(QsF).Activate
Cells(65559, 3).Select
Application.ScreenUpdating = True
Dim cella As Range
For Each cella In [C11:C100]
If cella.Value = "" Then cella.ClearContents
Next cella
End Sub




[Modificato da Anthony D'Acunto 14/10/2018 23:49]
Windows 10 - Excel LTSC
Post: 3.152
Registrato il: 03/04/2013
Utente Master
Excel 2000 - 2013
OFFLINE
15/10/2018 08:21

Buona giornata, Pierpaolo;
grazie del riscontro, non è sempre così scontato.

@pierpaolo.cavallo, scrive:


 ... L'unico problema rimasto esula dalla struttura della macro e risiede nelle celle apparentemente vuote (ma in realtà con valore "") del Range C65559:C65583 del file di origine. ...


Questo è il problema che avevo lamentato nella mia risposta #5:

@GiuseppeMN, scrive:


 ... Considera solo che ho dovuto "ripulire la Colonna C dei tuoi File"; c'era qualche carattere anomalo, fose uno spazio, nelle Celle sottostanti l'ultima Fattura. ...


In realtà avevo "ripulito" i File "Copia" ma i File interessati erano solo due e, soprattutto, l'aggiunta di nuove Fatture veniva fatto manualmente; in realtà, non so quanti siano i File "Copia" da ripulire e come vengono alimentati.



A disposizione.

Buon Lavoro.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 111
Registrato il: 24/07/2013
Città: SALERNO
Età: 52
Utente Junior
Excel LTSC 2021
OFFLINE
15/10/2018 16:36

Buona giornata a te, GiuseppeMN
Ricordo la tua osservazione al riguardo.

Le Celle nell'ambito dell'intervallo C65559:C65583 dei file di origine sono collegate ad altro foglio di lavoro a mezzo formula 'SE' (SE VERO riportano la Denominazione dell'Azienda ordinante; SE FALSO sono impostate con "")

Naturalmente nulla cambierebbe se le impostassi con " "

Come ben sai, non esiste in Excel una formula che restituisca la cella effettivamente vuota e ciò determina il problema.

L'aggiunta da me inserita alla fine della tua macro:

Dim cella As Range
For Each cella In [C11:C100]
If cella.Value = "" Then cella.ClearContents
Next cella

e applicata al file di destinazione 'archivio' risulta efficace nel file di esempio; non altrettanto in quello effettivo. Lì ci sono 10000 righe e ciò rallenta il tutto.

E' molto più breve e funzionale applicarla al file di origine prima della copia in 'archivio', per cui l'ho tagliata e resa oggetto di istruzione separata che lancio prima dell'esecuzione della tua macro.

Certo, sarebbe meglio tutto in una sola macro, ma qui non ci posso arrivare.😔

Grazie dell'attenzione
Buon proseguimento di giornata


[Modificato da Anthony D'Acunto 15/10/2018 16:41]
Windows 10 - Excel LTSC
Vota: 15MediaObject5,00212 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:52. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com