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

Gestione Materiale con Barcode

Ultimo Aggiornamento: 25/03/2017 22:04
Post: 64
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
15/03/2017 20:27

Ciao ragazzi, sono allo stato embrionale di un nuovo lavoro.
Praticamente vorrei mediante lettura Barcode tenere traccia del flusso di materiale, ovvero, vorrei tenere traccia del materiale uscito dall'azienda e poi rientrato perchè non utilizzato.
In particolare, nel file ho inserito in una colonna quelli che sono i barcode di esempio letti dal mio lettore. Barcode generati da me, quindi personalizzati.
Io vorrei che nella colonna Materiale Utilizzato venga visualizzato solo la prima del barcode prima dello spazio che equivale al nome del prodotto.
Siccome il lettore non è in grado di modificare la quantità, devo sparare più di una volta il codice. Come posso fare a contare gli OUT e gli IN di un Materiale. Ho scritto nel file quello che vorrei il risultato.
Spero in un vostro aiuto o anche proposte di diversa realizzazione del progetto.
Graziee



https://www.dropbox.com/s/bkp2rtpgrpw1z76/barcode.xlsx?dl=0
Post: 64
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
16/03/2017 18:22

Ragazzi nessuno riesce ad aiutarmi o a propormi una soluzione diversa (magari più semplice della mia)?
Grazie
Post: 2.947
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Veteran
Excel 365
OFFLINE
16/03/2017 18:34

Per poterti rispondere occorrerebbe avere un lettore barcode e chi ce l'ha qui?

Alfredo
Post: 65
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
16/03/2017 19:04

Ciao, il risultato della lettura l'ho riportato nel file. Che tu abbia o no il lettore, il risultato non cambia (penso)
Cio che vorrei è contare gli input e gli output e che venga visualizzato il nome del prodotto solo una volta.
Spero di essermi spiegato
Grazie :)
Post: 477
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
16/03/2017 22:16

Nel senso che per ogni materiale hai creato due codici a barre (uno IN ed uno OUT) ed all'occorrenza "spari" ad uno od all'altro ? Poi una volta depurato il codice dall'appendice, in base alla stessa, incrementare il conteggio nella relativa colonna della tabella ?

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 66
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
16/03/2017 22:30

Sisi.
Sto iniziando a riuscire a fare qualcosa però con molte difficoltà e di sicuro poco professional.Però almeno ci sto provando:)
Come posso fare per trovare la posizione dello spazio nella stringa però partendo il conteggio dalla fine della stringa?

esempio: Casa mia" Lo spazio da destra si trova in posizione:4
[Modificato da gionox 16/03/2017 22:35]
Post: 67
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
16/03/2017 23:35

Allora ragazzi, sono riuscito (forse) in gran parte dell'obiettivo, ovvero, ho creato una colonna che mi restituisce il nome del prodotto senza OUT o IN. sono riuscito a controllare il numero di out e in.
L'unico problema è che ho registrato una macro per far si che dalla colonna in cui ci sono i nomi dei prodotti depurati da IN o OUT mi "copi e incolla valori" e mi elimini i duplicati, cosi da avere solo una riga per prodotto.
Come possa far per dire alla macro di attivarsi in automatico?
Ho provato cosi, ma non funziona:

Sub Macro1()
'
' Macro1 Macro
'

'
If Range("A6") <> "" Then
Range("A6:A27").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$A$5:$A$27").RemoveDuplicates Columns:=1, Header:=xlYes
End If
End Sub
Post: 478
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
16/03/2017 23:49

Dato che la macro la devi lanciare solo al termine delle "sparate" crea un pulsante ed associa ad esso la macro.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 68
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
17/03/2017 23:11

Si, però vorrei automatizzare il tutto perchè non sarò io a usare il file.
Allego il nuovo file in cui ho inserito una colonna in cui ci sono come dicevo i nomi dei prodotti depurati dall'IN o OUT.
Ho registrato la macro, ma non sono riuscito a farla avviare in automatico. Essenzialmente mi serve che si avvi appena la colonna dei materiali depurati è completata.
Grazie per l'aiuto

https://www.dropbox.com/s/bkp2rtpgrpw1z76/barcode.xlsx?dl=0
Post: 479
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
18/03/2017 12:20

Nel file che hai allegato non ho trovato le macro che stai utilizzando e per chiunque voglia aiutarti sarà difficile valutare il progetto.

Comunque, come farai a rilevare il completamento delle letture ? per poi auto-avviare la macro ?
Potresti creare un barcode "Fine" da "sparare" all'occorrenza e con l'evento WorkSheet_Change rilevare il contenuto delle letture ...
If lettura = "FINE" Then avvia la marco.
Se il numero del materiale è fisso potresti contare le letture e raggiunto il numero massimo la macro, sempre tramite un Workheet_Change con ...
If WorksheetFunction.CountA(Range("B6:B27", "C6:C27")) = numero totale Then avviare la macro.
Se poi ti viene qualche altra idea ... [SM=g27811]
[Modificato da rollis13 18/03/2017 14:44]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 69
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
18/03/2017 14:37

Ciao, in realtà ho pensato a una soluzione su come far partire la macro. Con una Macro (se esiste) vorrei controllare l'ora di scrittura dei barcode.
Pertanto faccio partire la mia macro non appena l'ora del sistema non corrisponde all'ora di scrittura dei barcode.
Secondo te è fattibile?
Grazie
Post: 480
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
18/03/2017 14:53

Perdonami ma non capisco. L'orario di lettura del barcode la puoi rilevare e memorizzare sempre con un WorkSheet_Change ma l'orario lo ricavi sempre dall'orario del sistema pertanto "subito dopo" ci sarà sempre la condizione "non appena l'ora del sistema non corrisponde all'ora di scrittura". Potresti fare che 5 minuti dopo l'ultima rilevazione fai partire la macro ... ma se nel frattempo sei inciampato (o ricevi una telefonata) e non riesci a completare tutte le letture la macro partirebbe prima del tempo ... proprio non mi è del tutto chiaro il tuo pensiero.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 70
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
18/03/2017 15:10

Si, mi sono spiegato male inizialmente.
Il mio lettore non funziona in tempo reale. Ovvero, io (esempio) la mattina sparo i codici, poi la sera lo collego al pc, mi posiziono in una cella e lui passa tutti i codici memorizzati.
Per questo, io voglio memorizzare a che ora è stato passato il primo codice e la mia macro può partire già 3/4 secondi dopo
[Modificato da gionox 18/03/2017 15:11]
Post: 481
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
18/03/2017 15:36

Se usi Excel per prelevare i dati direttamente dal lettore probabilmente stai già utilizzando una macro e a questo punto non fai altro che integrarla con quella destinata all'elaborazione dei dati (o anche richiamandola).
Se invece per lo scarico prima generi un file nel PC che poi fai gestire da Excel con una macro anche in questo caso alla fine della gestione integri (richiami) la macro di elaborazione.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 71
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
18/03/2017 15:55

In realtà non uso nessuna macro per prelevare I dati dal lettore. Lo connetto mediante USB al pc e I codici passano in automatico sul foglio excel già aperto e sulla cella selezionata col cursore.
Che codice dovrei scrivere per memorizzare la data di scrittura del primo barcode?
Grazie
Post: 72
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
19/03/2017 20:42

Ciao, ho fatto qualche passo in avanti ma mi sono bloccato.
In pratica, nel file ci sono due fogli: "prima della macro" che contiene tutte le formule. Lo voglio usare come foglio base, gli altri fogli verranno creati copiando esso.
Ho predisposto una macro che nel nell'ultimo foglio (quello più a destra) mi registra in H3 il momento in cui i barcode passano dal letto al file excel.
Adesso però, ci sono due problemi:
Io vorrei che l'ora di passaggio (ovvero il WorksheetChange) sia attivo solo sull'ultimo foglio (quello su cui andrò a lavorare nel giorno X). Questo succede ma appena clicco una cella su altri fogli, esce un errore.
Inoltre, ho registrato la macro che si deve avviare sull'ultimo foglio (quello in cui si sta lavorando) e voglio che essa si avvi 2 secondi dopo l'ora indicata in cella H3 con il worksheetchange.
Come posso risolvere questi due problemi?
Grazie.
Spero sia riuscito a spiegare in modo comprensibile

https://www.dropbox.com/s/knumknzyh31arz7/barcode.xlsm?dl=0
Post: 482
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
19/03/2017 23:11

Per evitare che la macro "lavori" su altri fogli ti basta aggiungere in testa questa riga di codice:
If Not ActiveSheet.Name = Sheets(Sheets.Count).Name Then Exit Sub 'se non siamo nell'ultimo foglio esci
ma dato che per attivare la macro prevedi di cliccare su G3 potresti modificarla così in modo da attivare subito l'altra macro:
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)

    Dim Rnge As Range   'dichiara le variabili

    If Not ActiveSheet.Name = Sheets(Sheets.Count).Name Then Exit Sub 'se non siamo nell'ultimo foglio esci
    Worksheets(Worksheets.Count).Select
    Set Rnge = Range("G3")
    Set Rnge = Intersect(Rnge, Target)
    If Not Rnge Is Nothing Then
       Application.EnableEvents = False 'non attivare altri eventi
       Target.Offset(0, 1) = Now
       Call Macro1 'richiama la macro
       Application.EnableEvents = True 'riattiva la gestione degli eventi
    End If
    Set Rnge = Nothing

End Sub
Considerato che se parte subito la seconda macro non c'è nemmeno bisogno di gestire l'orario potresti fare tutto non appena attivi il foglio utilizzando qualcosa come:
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    If Not ActiveSheet.Name = Sheets(Sheets.Count).Name Then Exit Sub 'se non siamo nell'ultimo foglio esci
    If Range("G3") = "" Then Exit Sub       'se non ci sono dati esci (non abbiamo ancora scaricato)
       Application.EnableEvents = False     'non attivare altri eventi
       Call Macro1                          'richiama la macro
       Application.EnableEvents = True      'riattiva la gestione degli eventi
    
End Sub

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 73
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
20/03/2017 12:29

ciao, grazie per la prima riga di codice.
Purtroppo non posso far attivare la macro non appena clicco sulla cella perchè devo avere il tempo di incollare i dati (con il tuo codice appena mi posizione parte la macro non riesco neanche a scrivere) e ci deve essere il tempo che si crei mediante le formule inserite la colonna dei prodotti depurati.
Per questo necessito di 2/3 secondi oltre i quali deve partire la macro1. Come devo modificare il tuo codice?
Grazie
Post: 483
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
20/03/2017 22:14

In verità, come ho già detto nella prima riga del mio post #10, serve conoscere il meccanismo dello scarico e quello che scrivi nel tuo post #15 ne è la prova. Senza conoscere questi dettagli diventa impossibile fare analisi, valutazioni, progettazione con successiva realizzazione di un qualcosa che debba integrarsi.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 74
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
21/03/2017 09:42

Ciao, il passaggio è semplice: mi posizione in G3, collego con USB il lettore e avviene il passaggio senza che io faccia niente.
Sono riuscito a tardare di 3 secondi l'avvio della macro.
Adesso sto provando la tua seconda soluzione, quella in cui non si gestisce proprio l'orario. Però, esce errore nella riga: If Range("G3") etc.
Errore è: Errore di compilazione, previsto Do, For Function
Post: 75
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
21/03/2017 12:23

Sto valutando anche l'opzione del barcode FINE per far lanciare la Macro. In questo caso come andrebbe modificato il codice?
Grazie
Post: 484
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
21/03/2017 18:51

Re:
[SM=x423054]

[...]mi posizione in G3, collego con USB il lettore e avviene il passaggio senza che io faccia niente [...]

Mi dispiace, con la mia poca esperienza con i lettori non riesco ad intuire come avvenga lo scarico "senza fare niente" e, pertanto, mi diventa sempre più difficile ragionarci sopra.

[...]Però, esce errore nella riga: If Range("G3") etc.
Errore è: Errore di compilazione, previsto Do, For Function

Se hai fatto copia incolla non puoi avere problemi, il codice è testato e, comunque, non ci sono ne Do ne For nel codice ... boh !! Naturalmente quest'ultimo codice è alternativo ai precedenti, magari se lo riporti e lo provi da solo ...

Se vuoi controllare il "FINE" (ma non ho idea di come interagisca durante lo scarico) dopo la riga "If Not ActiveSheet.Name = ..." potresti inserire questa riga:
If Not Range("G" & Range("G" & Rows.Count).End(xlUp).Row) = "FINE" Then Exit Sub    'se l'ultima voce non è "FINE" esci

[Modificato da rollis13 21/03/2017 19:06]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 76
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
21/03/2017 19:39

Non ti so dire perché, io ho semplicemente fatto copia e incolla del tuo codice ma esce errore su entrambi gli if.

Adesso provo la soluzione dell'END. Grazie
Post: 77
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
21/03/2017 19:48

Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)


If Not ActiveSheet.Name = Sheets(Sheets.Count).Name Then Exit Sub 'se non siamo nell'ultimo foglio esci
Worksheets(Worksheets.Count).Select
Application.EnableEvents = False 'non attivare altri eventi
If Not Range("G" & Range("G" & Rows.Count).End(xlUp).Row) = "FINE" Then Exit Sub
Call Macro1
Application.EnableEvents = True 'riattiva la gestione degli eventi

End Sub


L'ho modificata cosi, però quando passa la scritta FINE dal lettora al file, non si avvia la Macro. Dove ho sbagliato nel codice?
Post: 485
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
21/03/2017 23:45

Hai mescolato un po' le varie versioni della macro. Così è più facile che ti funzioni:
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    If Not ActiveSheet.Name = Sheets(Sheets.Count).Name Then Exit Sub                   'se non siamo nell'ultimo foglio esci
    If Range("G3") = "" Then Exit Sub                                                   'se non ci sono dati esci (non abbiamo ancora scaricato)
    If Not Range("G" & Range("G" & Rows.Count).End(xlUp).Row) = "FINE" Then Exit Sub    'se l'ultima voce non è "FINE" esci
    Application.EnableEvents = False     'non attivare altri eventi
    Call Macro1                          'richiama la macro
    Application.EnableEvents = True      'riattiva la gestione degli eventi
    
End Sub
Forse ho anche capito perché capitano errori; facendo copia/incolla ho notato che vengono introdotti dei caratteri "nascosti" solitamente all'inizio delle righe di codice e a volte anche alla fine se ci sono dei commenti. Bisogna sanare le righe corrotte eliminando tutti gli spazi vuoti per poi rimetterli.
[Modificato da rollis13 21/03/2017 23:47]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 78
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
22/03/2017 12:53

Ciao, ho inserito il tuo codice. Non ci sono errori questa volta nel fare copia e incolla, però quando viene "passata"(ovvero scritta in una cella della colonna G) la parola FINE non si attiva la macro
Grazie per la pazienza
Post: 79
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
22/03/2017 12:58

Scusami mi correggo, nel momento in cui viene scritta la parola FINE non succede niente, però se cambio foglio (uno precedente) e poi torno sull'ultimo foglio si attiva la macro.
Post: 486
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
22/03/2017 16:49

Esatto, un evento Workbook_SheetActivate si attiva solo quando cambi foglio.
Volendo, rinunciando ad attivare la macro con il cambio del foglio per attivarla nel momento in cui si clicca la cella G3, potresti provare ad utilizzare quest'altra versione da mettere però nel modulo vba del foglio stesso:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "$G$3" Then                                                         'se ho cliccato G3 procedi
        If Target.Value = "" Then Exit Sub                                                  'se non ci sono dati esci (non abbiamo ancora scaricato)
        If Not Range("G" & Range("G" & Rows.Count).End(xlUp).Row) = "FINE" Then Exit Sub    'se l'ultima voce non è "FINE" esci
        Application.EnableEvents = False     'non attivare altri eventi
        Call Macro1                          'richiama la macro
        Application.EnableEvents = True      'riattiva la gestione degli eventi
    End If

End Sub
Ho scritto "potresti provare" perché non ho idea di come interagisca con lo scarico automatico del lettore.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 80
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
22/03/2017 17:49

Ciao, il codice lo proverò questa sera perché non ho il pc con me. Però, dovendo inserirlo nel foglio stesso, come faccio per I fogli successivi che si andranno ad aggiungere?
Post: 81
Registrato il: 12/04/2013
Città: BARI
Età: 34
Utente Junior
2016
OFFLINE
22/03/2017 20:53

L'ho appena provato.
Accade che, quando viene scritta la parola FINE non succede niente, però se clicco in G3(solo qui) in cui non è presente FINE, si attiva la macro
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | 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 08:28. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com