Valutazione 4.87/ 5 (100.00%) 5838 voti

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: 56
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
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: 16374
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: 56
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...
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: 16374
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…
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: 16374
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: 56
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: klingklang e 19 ospiti