Condividi:        

[Excel] Importare elenco prodotti in automatico

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

[Excel] Importare elenco prodotti in automatico

Postdi vegeros » 23/06/12 10:20

Ciao a tutti e complimenti per gli ottimi consigli che date agli utenti del forum.

Chiedo il vostro aiuto per creare una macro che importi automaticamente dei dati da un file di testo all'interno di un foglio excel e li processi secondo le mie esigenze (aggiornando dove necessario la quantità dei prodotti).

Mi spiego meglio, ho già un foglio di lavoro excel con le giacenze di tutti i prodotti del mio magazzino e ad ogni carico da parte del magazziniere mi viene fornito un file di testo con i nuovi prodotti acquistati e quindi da aggiungere all'elenco generale.

Al momento importo manualmente i dati presenti nel documento di testo in un nuovo foglio excel (foglio 2) per poi aggiungere manualmente, riga per riga i prodotti nel foglio 1 (contenente l'elenco di tutti i prodotti del magazzino). In caso di prodotto con stesso codice (colonna KM10 ) e nota (ovvero numero di lotto) vado semplicemente ad aggiornare la cella relativa alla quantità anziché creare un duplicato.

Adesso mi chiedo, è possibile creare una macro che faccia tutto questo lavoro automaticamente al posto mio?
Allego al presente il file excel contenente l'intero magazzino e quello di testo da importare con i nuovi prodotti.

(Se il tutto fosse troppo complicato, mi basterebbe anche riuscire ad unire due tabelle presenti in due fogli di lavoro in un unica tabella con l'accortezza di accorpare le quantità nel caso di prodotto con stesso codice e stessa nota)

Il vostro aiuto mi semplificherebbe la vita. Grazie in anticipo

txt con il carico dei prodotti: https://www.dropbox.com/s/xudy7y9ucfnvikr/carico.txt
foglio excel con l'intero magazzino: https://www.dropbox.com/s/9cqr9o3semwqa ... zzino.xlsx
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Sponsor
 

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 23/06/12 17:37

Ciao Vegeros e benvenuto nel Forum

Penso che una macro così possa risolvere il tuo problema
L'unica accortezza è avere il file Carico.txt nella stessa cartella del file Magazzino.xlsm che conterrà la macro
Codice: Seleziona tutto
Sub ImportaTxt()
Perc = ThisWorkbook.Path
NomeF = ThisWorkbook.Name
    URF = Range("A" & Rows.Count).End(xlUp).Row
    ChDir Perc
    Workbooks.OpenText Filename:=Perc & "\carico.txt", _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), _
        TrailingMinusNumbers:=True
    URC = Range("A" & Rows.Count).End(xlUp).Row
    For RRC = 2 To URC
    Tr = 0
        For RRF = 2 To URF
            If Format(Range("B" & RRC).Value, "000000000") = Workbooks(NomeF).Worksheets("Foglio1").Range("B" & RRF).Value Then
                Workbooks(NomeF).Worksheets("Foglio1").Range("D" & RRF).Value = Range("D" & RRF).Value
                Tr = 1
                GoTo SaltaRRC
            End If
        Next RRF
        If Tr = 0 Then
            Rows(RRC & ":" & RRC).Copy Destination:=Workbooks(NomeF).Worksheets("Foglio1").Range("A" & URF + 1)
            Workbooks(NomeF).Worksheets("Foglio1").Range("B" & URF + 1).NumberFormat = "000000000"
            URF = URF + 1
        End If
SaltaRRC:
    Next RRC
Workbooks("Carico.txt").Close savechanges:=False
End Sub

Una volta inserita la macro nel modulo del file Magazzino.xlsx devi salvare il file con estensione .xlsm

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi ricky53 » 23/06/12 23:43

Ciao Vegeros,
benvenuto nel nostro forum anche da parte mia.

Arrivo a soluzione fornita (Flash sei sempre tempestivo e presente ... ma come fai) ... anch'io avevo scritto del codice ma ormai .. sarà per la prossima.

Volevo solo segnalare che al codice di Flash è necessario apportare due modifiche per consentire la somma delle quantità a parità di codice della colonna "KM 10"

Codice: Seleziona tutto
            If Format(Range("B" & RRC).Value, "000000000") = Format(Workbooks(NomeF).Worksheets("Foglio1").Range("B" & RRF).Value, "000000000") Then ' <<===== Modificato inserendo Format anche al secondo elemento del confronto
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value = Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value + Range("E" & RRF).Value ' <<==== La colonna della quantità è la "E"
                Tr = 1
                GoTo SaltaRRC
            End If


Vegeros: perchè hai scritto di utilizzare anche la colonna "Note" per sommare lo stesso articolo, non è sufficiente la colonna "KM 10" ???
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 24/06/12 00:04

prima di tutto ti ringrazio per la pronta risposta.

La macro proposta mi aiuta solo con l'importazione dei prodotti ma non aggiorna le giacenze dei prodotti nel magazzino dopo il carico.

Mi spiego meglio, io ho bisogno che si avveri questo scenario:
Nel magazzino ho 4 aspirine con codice KM10 "111111111" e nota "Lot. 11111". Poi ho altre 3 aspirine con codice KM10 "111111111" (uguale al precedente) ma con nota differente, ovvero "Lot. 11112".

Andando a caricare (attraverso il file carico.txt) altre 20 aspirine il cui codice è KM10 "111111111" e la cui nota è "Lot. 11111" la nuova giacenza dei prodotti nel magazzino dovrebbe essere di 24 aspirine "Lot. 11111" e 3 aspirine "Lot. 11112".

Spero di essermi spiegato. Grazie!
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi ricky53 » 24/06/12 00:52

Caio,
SI vuol dire che l'univocità per identificare il prodotto è dato da KM 10 e Note UGUALI entrambi.

Bene allora sostituisci le righe di codice che ti ho scritto prima ( che penso tu abbia letto) con le due seguenti
Codice: Seleziona tutto
            If Format(Range("B" & RRC).Value, "000000000") = Format(Workbooks(NomeF).Worksheets("Foglio1").Range("B" & RRF).Value, "000000000") And _
                    Format(Range("L" & RRC).Value, "000000000") = Format(Workbooks(NomeF).Worksheets("Foglio1").Range("L" & RRF).Value, "000000000") Then
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value = Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value + Range("E" & RRF).Value
                Tr = 1
                GoTo SaltaRRC
            End If
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 24/06/12 01:19

sembra funzionare ma in realtà qualcosa non torna.

Se lancio per la prima volta la macro in un foglio excel bianco, i prodotti vengono correttamente importati dal file di testo "carico.txt". Se provo a lanciare nuovamente la macro senza modificare il txt, allora effettivamente sul foglio excel le quantità dei prodotti vengono aggiornate proprio come ho richiesto.

Ho notato, però, che partendo da un foglio excel con dei prodotti esistenti, al momento del lancio della macro non accade nulla. Allego il documento sul quale sto effettuando le prove: https://www.dropbox.com/s/8redb75dovg9b ... zzino.xlsm

Eseguendo vari test, sembra che la verifica dei prodotti già esistenti venga effettuata solo alle prime 4 righe e non sulle successive..

Ad ogni modo è già un bel passo in avanti, grazie!
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 24/06/12 01:38

La macro funziona fino all'ultima riga sia del file testo che del file Magazzino
l'unico errore sta nel codice dellla quantità da sommare
Codice: Seleziona tutto
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value = Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value + Range("E" & RRF).Value

Va modificato così
Codice: Seleziona tutto
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value = Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value + Range("E" & RRC).Value


Inoltre nella colonna K Che dovrebbe essere Totale imponibile credo tu debba mettere una formula del tipo
Prezzo euro per quantità quindi in K2
Codice: Seleziona tutto
=D2*E2

o Imponibile per quantità
Codice: Seleziona tutto
=J2*E2

altrimenti quel valore rimane invariato malgrado varino le quantità

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 24/06/12 12:58

Dopo quest'ultima modifica, la macro fa esattamente ciò che mi occorre e questo è magnifico.
Vi ringrazio entrambi in pari misura, non immaginate neanche l'aiuto che mi avete dato.

A questo punto potrei anche accontentarmi, ma dal momento che il vostro intervento è stato così valido e premuroso, mi permetto di avanzare altre due richieste.

1. Sarebbe possibile far aggiornare il TOTALE_EURO e IMPONIBILE_EURO che è dato dalla moltiplicazione di PREZZO_EURO e QUANTITA (trascurando gli altri sconti) automaticamente dalla stessa macro?

2. Questa richiesta riguarda più una questione di accessibilità che di stretta utilità ma voglio proporla lo stesso perché da quel che ho capito, come me, amate le cose fatte bene.
C'è il modo di evidenziare in verde le righe relative ai nuovi prodotti caricati ad ogni carico e evidenziare solamente la cella relativa alla quantità quando carico un prodotto già presente in magazzino?

Allego un foglio di esempio per rendere meglio l'idea: https://www.dropbox.com/s/yufk2xdpnmicc ... celle.xlsx
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 24/06/12 13:51

Forse così? (sostituisci l'intera macro)
Codice: Seleziona tutto
Sub ImportaTxt()
Perc = ThisWorkbook.Path
NomeF = ThisWorkbook.Name
    URF = Range("A" & Rows.Count).End(xlUp).Row
    Range("J2").FormulaR1C1 = "=RC[-6]*RC[-5]"
    Range("K2").FormulaR1C1 = "=RC[-1]"
    Range("J2:K2").AutoFill Destination:=Range("J2:K" & URF)
    Cells.Interior.ColorIndex = xlNone
    ChDir Perc
    Workbooks.OpenText Filename:=Perc & "\carico.txt", _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), _
        TrailingMinusNumbers:=True
    URC = Range("A" & Rows.Count).End(xlUp).Row
    For RRC = 2 To URC
    Tr = 0
        For RRF = 2 To URF
            If Format(Range("B" & RRC).Value, "000000000") = Format(Workbooks(NomeF).Worksheets("Foglio1").Range("B" & RRF).Value, "000000000") And _
                    Format(Range("L" & RRC).Value, "000000000") = Format(Workbooks(NomeF).Worksheets("Foglio1").Range("L" & RRF).Value, "000000000") Then
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value = Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Value + Range("E" & RRC).Value
                Workbooks(NomeF).Worksheets("Foglio1").Range("E" & RRF).Interior.Color = 13434828
                Workbooks(NomeF).Worksheets("Foglio1").Range("J" & RRF).FormulaR1C1 = "=RC[-6]*RC[-5]"
                Workbooks(NomeF).Worksheets("Foglio1").Range("K" & RRF).FormulaR1C1 = "=RC[-1]"
                Tr = 1
                GoTo SaltaRRC
            End If
        Next RRF
        If Tr = 0 Then
            Rows(RRC & ":" & RRC).Copy Destination:=Workbooks(NomeF).Worksheets("Foglio1").Range("A" & URF + 1)
            Workbooks(NomeF).Worksheets("Foglio1").Range("B" & URF + 1).NumberFormat = "000000000"
            Workbooks(NomeF).Worksheets("Foglio1").Rows(URF + 1 & ":" & URF + 1).Interior.Color = 13434828
            Workbooks(NomeF).Worksheets("Foglio1").Range("J" & URF + 1).FormulaR1C1 = "=RC[-6]*RC[-5]"
            Workbooks(NomeF).Worksheets("Foglio1").Range("K" & URF + 1).FormulaR1C1 = "=RC[-1]"
            URF = URF + 1
        End If
SaltaRRC:
    Next RRC
Workbooks("Carico.txt").Close savechanges:=False

End Sub


A parere mio dopo l'aggiornamento dovresti cancellare o spostare il file "Carico.txt" da quella cartella per evitare di processarlo di nuovo... e la macro potrebbe farlo automaticamente ;)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 24/06/12 14:53

Flash30005 ha scritto:Forse così? (sostituisci l'intera macro)

sì, precisamente!

Flash30005 ha scritto:A parere mio dopo l'aggiornamento dovresti cancellare o spostare il file "Carico.txt" da quella cartella per evitare di processarlo di nuovo... e la macro potrebbe farlo automaticamente ;)

ciao


ottima intuizione, facciamoglielo cancellare.

Grazie Flash30005
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 24/06/12 15:47

Aggiungi la riga evidenziata alla fine della macro
Codice: Seleziona tutto
Workbooks("Carico.txt").Close savechanges:=False '<<< esistente
Kill Perc & "\carico.txt"  '<<<<< Aggiungere
End Sub '<<< esistente


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 25/06/12 16:59

Dopo aver fatto uno stress test, oggi a lavoro, ho constatato che funziona tutto perfettamente e questo è grandioso!

A questo punto vorrei sviluppare un ulteriore passaggio, anche se mi rendo conto di aver abusato largamente della vostra pazienza, (in particolare quella di Flash30005, che ringrazio).

Ho inserito in un nuovo foglio (foglio 2) l'elenco dei prodotti che vorrei estrapolare dalla lista nel foglio 1. Quindi, nella lista 3 mi dovrebbero comparire in automatico tutti i prodotti indicati nel foglio 2 (però distinti per lotto) presenti nel foglio 1.

Come consueto allego un file di esempio per rendere meglio l'idea: https://www.dropbox.com/s/qcmuo0bllsetc ... lotti.xlsm

Grazie!
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 25/06/12 20:23

seleziona il foglio1 la cella A1
dal menu Dati seleziona Filtro (Imbuto)
Vai sulla cella "C1" che si riferisce alla descrizione
poi deseleziona la voce "Seleziona Tutti" e seleziona le voci che ti interessano
applica il filtro. ;)

Da non trascurare la Tabella di Pivot

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 26/06/12 16:55

Flash30005 ha scritto:seleziona il foglio1 la cella A1
dal menu Dati seleziona Filtro (Imbuto)
Vai sulla cella "C1" che si riferisce alla descrizione
poi deseleziona la voce "Seleziona Tutti" e seleziona le voci che ti interessano
applica il filtro. ;)

Da non trascurare la Tabella di Pivot

ciao


Ho seguito anche quest'altro consiglio e il risultato è ancora più immediato di quello che mi sarei aspettato.
Con l'applicazione del filtro posso lavorare sullo stesso foglio e quindi su di un'unica lista.

Mi piacerebbe, adesso, togliere il disturbo e smetterla con le richieste, ma ormai abbiamo aperto il vaso di Pandora e mi sto rendendo conto delle grandi potenzialità di Excel. Quindi vorrei avanzare un'ulteriore e, spero, ultima richiesta!

Come faccio a formattare automaticamente la tabella secondo la logica di questa tabella di esempio? https://www.dropbox.com/s/n1purkpakj2jy ... ri%29.xlsm

In sostanza vorrei alternare il colore di una riga quando il codice KM10 (B2) cambia.

PS: Ci tengo ad insistere nel ringraziare per tutte le soluzioni ricevute.
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51

Re: [Excel] Importare elenco prodotti in automatico

Postdi Flash30005 » 26/06/12 22:53

La routien è semplice, avresti potuto farla anche da solo
Per convincerti che è così ho inserito una spiegazione per ogni riga di codice
Codice: Seleziona tutto
Sub Colora()
Cells.Interior.ColorIndex = xlNone   '<<<Toglie il colore di fondo a tutte le celle del foglio
    URF = Range("A" & Rows.Count).End(xlUp).Row   '<<<<<< conta le righe con dati, fornisce il numero dell'ultima riga
    MKM = 0    'Inizializza la variabile MKM (memoria KM)
    Colore = xlNone  'Inizializza il colore senza riempimento
    For RRF = 2 To URF   'Ciclo for next dalla riga 2 all'ultima riga
        If Format(MKM, "000000000") <> Format(Range("B" & RRF).Value, "000000000") Then   'confronta MKM con il valore KM della riga processata: se DIVERSO
            If Colore = 15 Then   'Controlla se il colore è 15 (Grigio), se sì, con la riga successiva colore sarà nullo
                Colore = xlNone   '<<<< Colore = non colore
            Else                  ' altrimenti
                Colore = 15       'la variabile Colore sarà 15 che corrisponde al grigio
            End If                ' fine condizione di variazione colore
           MKM = Range("B" & RRF).Value  'memorizza il valore KM appena processato
        End If    'Fine condizione di confronto tra MKM e KM
        Rows(RRF & ":" & RRF).Interior.ColorIndex = Colore   'colora la riga con il colore attribuito dai passi precedenti
    Next RRF  '<<<< passa alla riga successiva
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Importare elenco prodotti in automatico

Postdi vegeros » 27/06/12 20:04

Flash30005 ha scritto:La routien è semplice, avresti potuto farla anche da solo
Per convincerti che è così ho inserito una spiegazione per ogni riga di codice
Ciao


Funziona perfettamente, grazie.
Ti ringrazio anche per le note, ne farò tesoro per future esigenze.

8)
vegeros
Windows 7 + Office 2010
OS X 10.8.2 + Office 2011
vegeros
Utente Junior
 
Post: 13
Iscritto il: 23/06/12 09:51


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Importare elenco prodotti in automatico":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti