Evitare codici doppi

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
baxand@libero.it
Messaggi: 10
Iscritto il: domenica 3 novembre 2013, 20:25

Evitare codici doppi

Messaggio da baxand@libero.it »

Sto realizzando un foglio di lavoro per la gestione di un magazzino con Calc.
Sul foglio 1 "Carica Listino" ho realizzato una maschera per l'immissione dei dati, il foglio 2 "Calcoli e Relazioni" lo uso per le varie relazioni e controlli, sul foglio 3 "Matrice Listino" tramite una macro (presa da questo forum) attivata con un pulsante (Salva codice listino) vengono inseriti i dati della maschera nel foglio Matrice Listino.
Nella maschera ogni volta che scrivo il codice prodotto c'è una cella con formattazione condizionata che si evidenzia "Codice Presente" se il codice inserito nella maschera nel campo codice è presente nel foglio Matrice Listino.
Se schiaccio Salva_Codice_Listino anche se presente il codice viene salvato e quindi diventa doppio.
Vorrei aggiungere alla macro Salva_Codice_Listino un controllo che se il codice è presente mandi un messaggio di errore ed esca dalla macro senza copiare.

Sub Salva_Codice_Listino

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Calcoli e Relazioni")
Sheet1 = Doc.Sheets.getByName("Matrice Listino")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move
Sheet1.getCellRangeByName("A" & Lastrow & ":F" & Lastrow).setDataArray(Sheet.getCellRangeByName("H10:M10").getDataArray

End Sub
Andrea - openoffice 3.4.1 - windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Evitare codici doppi

Messaggio da patel »

Non capisco, la tua macro copia un range da un foglio all'altro e tu parli di un codice, quale ?

la riga Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move è inutile
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Evitare codici doppi

Messaggio da sanraff »

Ciao baxand, se alleghi il tuo file è meglio, così si possono fare delle prove per capire meglio come aiutarti, ciao.
OpenOffice 3.3 SU WINDOWS 7
baxand@libero.it
Messaggi: 10
Iscritto il: domenica 3 novembre 2013, 20:25

Re: Evitare codici doppi

Messaggio da baxand@libero.it »

Non Allego il file perchè supera 256 KB e non me lo permette se mi dite se posso inviarlo in altri modi provo.
I dati della maschera vengono ordinati su una riga di Calcoli e Relazioni (H10:M10), la macro del pulsante SALVA, in Carica Listino copia i dati di questa riga nella prima riga vuota di MATRICE LISTINO, se su "Codice Prodotto" (cella della maschera dove metto l'articolo x intenderci) c'è un codice di un prodotto inserito in listino si evidenzia la cella F20 della maschera. Se inserisco lo stesso codice vorrei che non lo facesse, questo per evitare doppioni. A naso bisognerebbe inseire una condizione che se F20=codice presente esce dalla procedura senza salvare e compare un messaggio "Codice presente " o altro.
Comunque la procedura evidenziata in precedenza funziona bene, va completata come vorrei se è possibile.

Grazie a tutti comunque
Andrea - openoffice 3.4.1 - windows Vista
sanraff
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Evitare codici doppi

Messaggio da sanraff »

Ciao baxand, per allegare il tuo file, puoi fare in questo modo.
Fai una copia del tuo file, elimina tutti i dati sensibili, lascia la macro e la struttura del corpo che hai realizzato e popola i campi che ti interessano con due nomi di fantasia.
Con questo sistema ridurrai notevolmente la grandezza del file, ma soprattutto darai la possibilità a chi deciderà di venir in tuo aiuto, di ottimizzare i tempi, concentrandosi solo sul reale problema senza dover reinventarsi tutta la struttura base per capire se l'implementazione alla tua macro gira correttamente.
Diversamente si rischia di entrare in un giro di botta e risposta senza venirne a capo.
Spero di esser stato chiaro, ciao.
OpenOffice 3.3 SU WINDOWS 7
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Evitare codici doppi

Messaggio da patel »

dalla descrizione che ha fatto ora allegare la macro Salva_Codice_Listino è stato inutile, il controllo di cui parli deve stare a monte.
Ti allego un file di esempio con il controllo dei duplicati in colonna A
Allegati
NoDuplicati.ods
(10.75 KiB) Scaricato 159 volte
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
baxand@libero.it
Messaggi: 10
Iscritto il: domenica 3 novembre 2013, 20:25

Re: Evitare codici doppi

Messaggio da baxand@libero.it »

Ho prova su un foglio a fare un esempio di ciò che cerco e nel file ci sono tutti i dettagli possibili, sperando di essere stato sufficientemente chiaro.
Grazie fin da ora comunque vada a finire
Allegati
Esempio Gesty.ods
(13.76 KiB) Scaricato 124 volte
Andrea - openoffice 3.4.1 - windows Vista
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Evitare codici doppi

Messaggio da Gaetanopr »

patel ha scritto: Ti allego un file di esempio con il controllo dei duplicati in colonna A
Ciao patel, sfruttando la proprietà "RangeAddressesAsString" che restituisce l'indirizzo dell'intersezione quindi del target, si può evitare l'uso della "Function AddressString(cell as object)"
Se poi si vuol far comparire solo il nome della cella basta usare l'istruzione Right ect ect...

Codice: Seleziona tutto

Sub eventocella(Target) 
dim svc As Object
If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
sh = Target.getSpreadsheet()
range1 = sh.getCellRangeByName("A2:A10")
range2 = range1.queryintersection(Target.rangeaddress()) 
If range2.RangeAddressesAsString = "" Then  Exit Sub
svc = createUnoService("com.sun.star.sheet.FunctionAccess")

If svc.callFunction("COUNTIF", Array(Range1, Target.value)) > 1 Then 
   MsgBox "duplicato rilevato" & chr$(13) & "Verrà cancellata la cella " & range2.RangeAddressesAsString, 48, "Messaggio di ERRORE"
   Target.string = ""
Endif
End Sub 
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Evitare codici doppi

Messaggio da Gaetanopr »

Ti allego file con macro modificata, oltre alla riga inutile segnalata da patel ho cambiato i riferimenti con quelli dell'esempio e aggiunto un controllo per verificare se il codice è già presente.
Allegati
Esempio Gesty.ods
(15.24 KiB) Scaricato 144 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Evitare codici doppi

Messaggio da patel »

Gaetanopr ha scritto: Ciao patel, sfruttando la proprietà "RangeAddressesAsString" che restituisce l'indirizzo dell'intersezione quindi del target, si può evitare l'uso della "Function AddressString(cell as object)"
Giusto, non l'avevo guardata attentamente.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi