Condividi:        

copiare dati nei file

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

copiare dati nei file

Postdi salatony » 07/01/19 20:32

Ciao
ho bisogno di un aiuto, spiego,
ho 1 directory di nome: Fornitoritot, e all'interno le cartelle con i nomi dei singoli fornitori, ogniuna delle quali contenente piu' file di codici,
poi ho un file sorgente.xls, cosi composto:
-col.a nome fornitori
-col.b codici
-da col.c ad w , dati da copiare
ti chiedo una macro che faccia questo:
io apro il file sorgente.xls, faccio partire la macro, che legge il nome del primo fornitore nella col.a ed apre la cartella corrispondente
(contenuta all'interno di Fornitoritot),
poi legge il codice nella col.b ed apre il corrispettivo file codice, infine copia dal file sorgente.xls i dati presenti da C1 a w1 e li incolla
(nota è IMPORTANTE che questi dati vengano incollati nei file corrispondenti aperti MA A PARTIRE DALLA 1° CELLA VUOTA CHE INCONTRA A PARTIRE DA C22 IN GIU')
dopodichè io verifico salvo e chiudo
grazie
ciao
:-?
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Sponsor
 

Re: copiare dati nei file

Postdi Anthony47 » 08/01/19 00:32

Per evitare di sciupare tempo a ricreare la tua situazione e lavorare su basi solide vorrei che pubblicassi un esempio di Sorgente.xls con 4-5 righe significative e i corrispondenti file "codice.xls"
Puoi zippare tutto in una unica cartella compressa che poi pubblicherai; per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

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

Re: copiare dati nei file

Postdi salatony » 09/01/19 21:29

ciao,
ho zippato il file, speriamo vada bene
grazie
ciao

http://www.filedropper.com/schede
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi Anthony47 » 10/01/19 02:10

Il contenuto mi sembra quello richiesto, devo pero' esaminarlo con calma...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare dati nei file

Postdi Anthony47 » 11/01/19 02:06

Allora, tu hai un file Sorgente.xls, salvato in una certa posizione; nella stessa posizione e' presente una directory \Fornitoritot, all'interno della quale sono presenti altre subdirectory "di fornitore" e, all'interno di queste subdirectory, dei file "Codice di prodotto"
Il nome del fornitore e' presente in colonna A, il codice di prodotto in colonna B, a partire da riga 2 di Foglio1 (del file Sorgente.xls).

Riprendendo quanto proposto nella discussione precedente, vedi viewtopic.php?f=26&t=110135, una macro che probabilmente fa quanto proposto e' questa:
Codice: Seleziona tutto
Sub spalmer()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=110135 e viewtopic.php?f=26&t=110284
Dim I As Long, fPath As String, nFile As String, fExt As String, flOk As Boolean
Dim sWs As Worksheet, myNext As Long, shName As String, J As Long, cRow As Long
Dim cForn As String
'
fPath = ThisWorkbook.Path & "\Fornitoritot\"
fExt = ".xls"               '<<< Il "tipo" di file Excel da cercare
shName = "Foglio1"          '<<< Il Nome del FOGLIO da popolare
'
Set sWs = ActiveSheet
For I = 2 To Cells(Rows.Count, "B").End(xlUp).Row
    cRow = 0
    cForn = sWs.Cells(I, "A")
    nFile = Cells(I, "B").Value & fExt
    If Application.WorksheetFunction.CountIf(Range("B2").Resize(I - 1, 1), Cells(I, "B").Value) < 2 Then
        On Error Resume Next
        Debug.Print "Apro file: >>> " & fPath & cForn & "\" & nFile
            Workbooks.Open fPath & cForn & "\" & nFile
        On Error GoTo 0
        Debug.Print "  File attivo: >>> " & ActiveWorkbook.Name
        'Si cercano le righe appartenenti a quel fornitore /codice:
        For J = I To sWs.Cells(sWs.Rows.Count, "B").End(xlUp).Row
            If sWs.Cells(J, "B") & sWs.Cells(J, "A") = sWs.Cells(I, "B") & sWs.Cells(I, "A") Then
                cRow = cRow + 1
                If UCase(ActiveWorkbook.Name) = UCase(nFile) Then
                    flOk = True
                    Sheets(shName).Select
                    'ricerca prima riga libera:
                    For k = 0 To 10000
                        If Range("C22").Offset(k, 0) = "" Then
                            Exit For
                        End If
                    Next k
                    If k > 9999 Then                                                            'Non trovato riga libera
                        MsgBox ("Non trovato spazio libero su file " & cForn & "\" & nFile & vbCrLf _
                          & "Controlla e continua la macro usando il tasto F5")
                        sWs.Cells(I, "B").Interior.Color = RGB(0, 0, 255)                       'nome file in blu, su Sorgente
                        Stop                                                                    '   poi Stop
                    Else
                        Range("C22").Offset(k, 0).Resize(1, 22).Value = sWs.Cells(J, "C").Resize(1, 22).Value
                        sWs.Cells(J, "B").Interior.Color = RGB(0, 255, 0)
                    End If
                Else
                    flOk = False
                    sWs.Cells(I, "B").Interior.Color = RGB(255, 0, 0)
                End If
            End If
        Next J
        'Completato scan righe
            If flOk Then
                Beep
                flOk = False
            Else
                MsgBox ("File non trovato: " & nFile & vbCrLf & "Righe orfane: " & cRow & vbCrLf & "Controlla, poi continua la macro usando F5")
    '            Stop
                ThisWorkbook.Activate
            End If
    End If
    ThisWorkbook.Activate
'Next riga:
Next I
MsgBox ("Completato...")
End Sub

Mettila in un modulo standard del vba del file Sorgente.xls, poi attiva il foglio con i codici e avvia la Sub spalmer.
La macro parte dal primo fornitore /codice, apre il corrispondente file; cerca sul file Sorgente tutte le righe che appartengono al file appena aperto e copia il contenuto delle colonne C:W da DSorgente a "destinazione"
I codici su Sorgente vengono colorati in verde, il file "destinazione" rimane aperto

La macro passa al successivo fornitore /codice e ripete il processo.

Un messaggio avvisa se non viene trovato il file fornitore /codice, e i codici su Sorgente vengono colorati in Rosso.

Io non so come sono i tuoi dati complessivi; tieni presente che Excel rifiuta di aprire contemporaneamente due file con lo stesso nome; quindi, ad esempio, non potrai aprire un file 12345.xls appartenente al fornitore1 e successivamente (prima di chiudere questo file) aprire un file 12345.xls appartenente al fornitore2

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

Re: copiare dati nei file

Postdi salatony » 13/01/19 11:45

Oh! Oh! Oh! .......

E' PER-FE-TTO,

MOLT-ISS-IMO PER-FE-TTO

sono contento, senza parole

DI NUOVO GRAZIE E MENO MALE CHE CI SIETE

ALLA PROSSIMA

:D :D :D
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi salatony » 30/06/22 11:01

Ciao,
Ti chiedo un ulteriore aiuto a causa di aggiornamenti che necessitano di modificare le celle da ccopiare non più da col.C ad W, ma da col.C ad AA (
Vedi post del 7/1/19 nella riga otto). Io ho provato ma non ho trovato quei riferimenti.
Grazie
Saluti
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi miko » 30/06/22 12:30

Buongiorno,
per salatony:
anche io ho un problema simile al tuo e stavo per fare richiesta di soluzione;
puoi rendere disponibile il file che avevi pubblicato inizialmente, sono interessato alla macro di Anthony,
non sarò costretto a ricostruire excel per capire come funziona la macro sperando di prendere le parti che interessano al mio caso.
ciao grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: copiare dati nei file

Postdi Anthony47 » 30/06/22 19:25

Ti chiedo un ulteriore aiuto a causa di aggiornamenti che necessitano di modificare le celle da ccopiare non più da col.C ad W, ma da col.C ad AA
Non ho fatto nessuna prova, ma "a occhio" direi che devi modificare qui:
Codice: Seleziona tutto
                    Else
                        Range("C22").Offset(k, 0).Resize(1, 22).Value = sWs.Cells(J, "C").Resize(1, 22).Value    'CAMBIARE QUI
                        sWs.Cells(J, "B").Interior.Color = RGB(0, 255, 0)
                    End If

Nella riga evidenziata sostituire i 22 con 26

Prova con cautela e fai sapere l'esito
Ciao

PS: vedi la richiesta di Miko, sopra
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare dati nei file

Postdi salatony » 01/07/22 12:55

Anthony,
Funziona perfettamente, Grazie Tanto

X Miko
Mi dispiace ma non ho più il file (si parla del 2019)
Cmq puoi testarla in qualsiasi foglio
Ciao
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi salatony » 07/07/22 18:05

Ciao, Anthony,
ti chiedo ancora aiuto!, spiego,
Le celle da copiare da C ad AA contengono alcune celle con "testo a capo" necessario, ma quando eseguo la macro il testo copiato nel file di destinazione risulta solo in orizzontale, forse xché prende la formattazione del file di destinazione. Quindi devo sistemare tutte le righe di tutti i file, oggi ho sistemato appena 200 file ed é stato abbastanza difficile,
Ancora Grazie, Ciao
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi Anthony47 » 08/07/22 11:03

Allora aggiungiamo alla compilazione dei valori la Copia dei Formati:
Codice: Seleziona tutto
                   Else
                        Range("C22").Offset(K, 0).Resize(1, 26).Value = sWs.Cells(J, "C").Resize(1, 26).Value
                        'Aggiungiamo copia formato  (Questo blocco):
                        sWs.Cells(J, "C").Resize(1, 26).Copy
                        Range("C22").Offset(K, 0).PasteSpecial xlPasteFormats
                        '
                        sWs.Cells(J, "B").Interior.Color = RGB(0, 255, 0)
                    End If
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copiare dati nei file

Postdi salatony » 08/07/22 15:09

Anthony,
non ho parole
Grazie
tantissimo funziona perfettamente
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: copiare dati nei file

Postdi salatony » 08/07/22 15:13

Funziona perfettamente
Ciao
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16


Torna a Applicazioni Office Windows


Topic correlati a "copiare dati nei file":


Chi c’è in linea

Visitano il forum: Ricky0185 e 58 ospiti