Pagina 1 di 1

Evitare codici doppi

Inviato: venerdì 8 novembre 2013, 19:54
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

Re: Evitare codici doppi

Inviato: venerdì 8 novembre 2013, 20:27
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

Re: Evitare codici doppi

Inviato: venerdì 8 novembre 2013, 20:45
da sanraff
Ciao baxand, se alleghi il tuo file è meglio, così si possono fare delle prove per capire meglio come aiutarti, ciao.

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 0:07
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

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 4:52
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.

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 5:58
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

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 19:51
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

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 21:39
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 

Re: Evitare codici doppi

Inviato: sabato 9 novembre 2013, 22:46
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.

Re: Evitare codici doppi

Inviato: domenica 10 novembre 2013, 6:10
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.