[Risolto] Bloccare una cella se un altra cella non é vuota.

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

[Risolto] Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Ciao,
é possibile bloccare la modifica di un contenuto di una cella se un altra contiene qualcosa?

In parole semplici.
In A1 ho un menu a tendina dove selezionare degli articoli. in J1 inserisco il numero di articoli venduti.

Vorrei che qualora in J1 fosse presente un valore, diventi impossibile cambiare l'articolo venduto in A1.
La modifica di A1 é possibile solo se J1 é vuota.

Il tutto per l intervallo A1:A10003 - J1:J10003

Non sono riuscito a risolvere il problema con nessuna formula e nessuna validità, ho trovato svariati codici per applicare questa funzione ma entriamo in un mondo che non conosco.
Qualcuno sa indicarmi un codice adatto a ciò ed il modo di inserirlo?

Grazie

Flavio
Ultima modifica di Fly88 il domenica 27 dicembre 2020, 11:18, modificato 2 volte in totale.
Openoffice 4.1.5 con MacOs 10.11.6
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Gaetanopr »

Devi per forza usare una macro.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Ok e fino a qui ci siamo, ho guardato qualcosina tipo le registrazioni basilari ma niente di piu...
mi domando come registrare una macro di questo tipo e sopratutto, si puo fare una cosa simile rendendola sempre attiva e non come spesso vedo usando un pulsante o una combinazione di tasti?
cioè integrarla letteralmente.
Openoffice 4.1.5 con MacOs 10.11.6
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da patel »

se hai trovato la soluzione leggi qui per imparare ad usare le macro http://professoressa.altervista.org/Dis ... re_OOo.pdf
-------------------
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
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Gaetanopr »

Fly88 ha scritto:si puo fare una cosa simile rendendola sempre attiva e non come spesso vedo usando un pulsante o una combinazione di tasti?
cioè integrarla letteralmente.
Si può fare, ti allego un esempio, il foglio deve essere naturalmente protetto io l'ho protetto senza password, le celle del range A1:A10003 e J1:J10003 non vanno protette, quantomeno la colonna j dove bisogna digitare i valori.
La macro và associata all'evento "contenuto modificato" facendo tasto dx sulla linguetta del foglio - evento - contenuto modificato - macro
Tutti i passaggi descritti nel file sono stati già fatti.

PS: Ho riallegato il file in quanto era errato, avevo invertito le colonne
Allegati
modificaA.ods
(9.46 KiB) Scaricato 216 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Mi stavo chiedendo infatti se fosse la mia mente impazzita :D :D :D :D ... dopo un po di tempo dietro a formule e celle.
Openoffice 4.1.5 con MacOs 10.11.6
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Gaetanopr ha scritto:Si può fare, ti allego un esempio, il foglio deve essere naturalmente protetto io l'ho protetto senza password, le celle del range A1:A10003 e J1:J10003 non vanno protette, quantomeno la colonna j dove bisogna digitare i valori.
La macro và associata all'evento "contenuto modificato" facendo tasto dx sulla linguetta del foglio - evento - contenuto modificato - macro
Tutti i passaggi descritti nel file sono stati già fatti.
PS: Ho riallegato il file in quanto era errato, avevo invertito le colonne

Allora il senso c é... però c é un piccolo errore provando il file o mi sono espresso un po male, mi scuso e cerco di essere piu chiaro.
se cancello le "s" nella colonna J non mi fa comunque selezionare niente nelle righe A corrispondenti.

il lavoro andrebbe fatto in serie.ovvero:

inserisco un prodotto tramite menu a tendina in A1>>>>>inserisco una quantità in J1.======= al momento che in J1 é presente una quantità, non posso piu cambiare l articolo in A1.
a) Per cambiare l'articolo in A1, devo prima eliminare la quantità presente in J1.

Sarebbe interessante avere ad accompagnare anche degli avvisi ad esempio:

a) in A : SE A é compilato e J idem e si prova a modificare A "Bisogna eliminare il contenuto J prima di modificare A"

In ogni caso niente della Colonna A e della colonna J vanno protetti in quanto vanno compilati entrambi ma solo a quelle condizioni.
Test.ods
(12.09 KiB) Scaricato 198 volte
Grazie per il tempo che mi state dedicando.
Ultima modifica di Fly88 il domenica 17 novembre 2019, 10:11, modificato 8 volte in totale.
Openoffice 4.1.5 con MacOs 10.11.6
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Gaetanopr »

Fly88 ha scritto: Allora il senso c é... però c é un piccolo errore provando il file o mi sono espresso un po male, mi scuso e cerco di essere piu chiaro.
se cancello le "s" nella colonna J non mi fa comunque selezionare niente nelle righe A corrispondenti.

il lavoro andrebbe fatto in serie.ovvero:

inserisco un prodotto tramite menu a tendina in A1>>>>>inserisco una quantità in J1.======= al momento che in J1 é presente una quantità, non posso piu cambiare l articolo in A1.
a) Per cambiare l'articolo in A1, devo prima eliminare la quantità presente in J1.

Sarebbe interessante avere ad accompagnare anche degli avvisi ad esempio:

a) in A : SE A é compilato e J idem e si prova a modificare A "Bisogna eliminare il contenuto J prima di modificare A"
Il file che ti ho allegato funziona esattamente in questo modo, scrivi nella colonna A successivamente inserisci la quantità della colonna J e la cella di riferimento nella colonna A si blocca e non ne permette la digitazione, infatti se provi ad immettere un valore riceverai il seguente messaggio "impossibile modificare le celle protette", per poterla modificare dovrai togliere il valore nella colonna J e solo così potrai modificare la colonna A
Fly88 ha scritto: In ogni caso niente della Colonna A e della colonna J vanno protetti in quanto vanno compilati entrambi ma solo a quelle condizioni.
Invece si e per i motivi che ti ho illustrato prima.(Solo la colonna A va protetta, sarà la macro a togliere la protezione per permetterne la modifica)
Allegati
Test.ods
(12.42 KiB) Scaricato 210 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Gaetanopr ha scritto:
Fly88 ha scritto:
Il file che ti ho allegato funziona esattamente in questo modo, scrivi nella colonna A successivamente inserisci la quantità della colonna J e la cella di riferimento nella colonna A si blocca e non ne permette la digitazione, infatti se provi ad immettere un valore riceverai il seguente messaggio "impossibile modificare le celle protette", per poterla modificare dovrai togliere il valore nella colonna J e solo così potrai modificare la colonna A
Fly88 ha scritto: In ogni caso niente della Colonna A e della colonna J vanno protetti in quanto vanno compilati entrambi ma solo a quelle condizioni.
Invece si e per i motivi che ti ho illustrato prima.(Solo la colonna A va protetta, sarà la macro a togliere la protezione per permetterne la modifica)
Ecco, ho provato tutto, e si funziona perfettamente sei stato molto gentile, penso che qualcosa non mi lanciava la macro.
Purtroppo ho fatto un grosso errore io non ho specificato che andava nel foglio Scarico evidenziato in giallo ed hai assegnato la macro nel foglio Carico dove il riferimento era colonna A come avevo scritto erroneamente. Nel foglio scarico il riferimento è la colonna B come nel mio file.

Se invece la inserisco nel mio File mi da questo errore:
"wrong number of parameters"

Ti chiedo cortesemente un ultimo favore e dopo ce l abbiamo fatta.
Se potessi incollarmi la Macro modificata per funzionare con( scarico ) B3:B10003 E J3;J10003.

Cambiato questo, funziona perfettamente.

Grazie nuovamente, Flavio.
Openoffice 4.1.5 con MacOs 10.11.6
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Gaetanopr »

Fly88 ha scritto: Se invece la inserisco nel mio File mi da questo errore:
"wrong number of parameters"

Ti chiedo cortesemente un ultimo favore e dopo ce l abbiamo fatta.
Se potessi incollarmi la Macro modificata per funzionare con( scarico ) B3:B10003 E J3;J10003.

Cambiato questo, funziona perfettamente.

Grazie nuovamente, Flavio.
Oltre ad inserirla nel tuo file devi associarla all'evento "contenuto modificato" del foglio "Carico" come spiegato nel mio primo messaggio.
Ecco la macro modificata per funzionare con la colonna B al posto della colonna A

Codice: Seleziona tutto

Sub ModificaA(Target) 
Dim Sh As Object
Dim LastRow  As Long
Dim range As Object

 If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
   Sh = Target.getSpreadsheet()
   range = Sh.getCellRangeByName("J1:J10003") 
   range2 = range.queryintersection(Target.rangeaddress())
   
   If range2.RangeAddressesAsString = "" Then exit sub
    Riga = Target.getCellAddress.Row 
    Dim oPC As New "com.sun.star.util.CellProtection"
	If Target.String = "" Then 
	   oPC.IsLocked = False
    Else 
     	oPC.IsLocked = True
	End if
    
    Sh.UnProtect("")
	Sh.getCellByPosition(1, Riga).CellProtection = oPC
    Sh.Protect("")
End Sub
Và cambiata questa parte

Codice: Seleziona tutto

Sh.getCellByPosition(1, Riga).CellProtection = oPC
dove lo 0 indicava la colonna A e il numero 1 individua la colonna B, gli indici delle colonne come per le righe iniziano da zero, quindi A= 0 b=1 C=2 è così via, se vuoi usare le macro devo studiare almeno le cose fondamentali in modo tale da poter capire dove intervenire su queste piccole modifiche, come già ti avevo suggerito patel
patel ha scritto:se hai trovato la soluzione leggi qui per imparare ad usare le macro http://professoressa.altervista.org/Dis ... re_OOo.pdf
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Gaetanopr ha scritto:
Fly88 ha scritto: Se invece la inserisco nel mio File mi da questo errore:
"wrong number of parameters"

Ti chiedo cortesemente un ultimo favore e dopo ce l abbiamo fatta.
Se potessi incollarmi la Macro modificata per funzionare con( scarico ) B3:B10003 E J3;J10003.

Cambiato questo, funziona perfettamente.

Grazie nuovamente, Flavio.
Oltre ad inserirla nel tuo file devi associarla all'evento "contenuto modificato" del foglio "Carico" come spiegato nel mio primo messaggio.
Ecco la macro modificata per funzionare con la colonna B al posto della colonna A

Codice: Seleziona tutto

Sub ModificaA(Target) 
Dim Sh As Object
Dim LastRow  As Long
Dim range As Object

 If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
   Sh = Target.getSpreadsheet()
   range = Sh.getCellRangeByName("J1:J10003") 
   range2 = range.queryintersection(Target.rangeaddress())
   
   If range2.RangeAddressesAsString = "" Then exit sub
    Riga = Target.getCellAddress.Row 
    Dim oPC As New "com.sun.star.util.CellProtection"
	If Target.String = "" Then 
	   oPC.IsLocked = False
    Else 
     	oPC.IsLocked = True
	End if
    
    Sh.UnProtect("")
	Sh.getCellByPosition(1, Riga).CellProtection = oPC
    Sh.Protect("")
End Sub
Và cambiata questa parte

Codice: Seleziona tutto

Sh.getCellByPosition(1, Riga).CellProtection = oPC
dove lo 0 indicava la colonna A e il numero 1 individua la colonna B, gli indici delle colonne come per le righe iniziano da zero, quindi A= 0 b=1 C=2 è così via, se vuoi usare le macro devo studiare almeno le cose fondamentali in modo tale da poter capire dove intervenire su queste piccole modifiche, come già ti avevo suggerito patel
patel ha scritto:se hai trovato la soluzione leggi qui per imparare ad usare le macro http://professoressa.altervista.org/Dis ... re_OOo.pdf

Ti ringrazio veramente molto, giorno per giorno sto leggendo qualcosa e testando anche altre macro sto provando ad analizzarle e capirle, non é niente di impossibile ma mi ci vorrà qualcosa in piu che 3 giorni.
Ormai entro nel mondo delle macro da completo inesperto e mi ci vorrà un po d impegno.

Nuovamente grazie dell aiuto e buona giornata.
Flavio
Openoffice 4.1.5 con MacOs 10.11.6
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Gaetanopr ha scritto:
Và cambiata questa parte

Codice: Seleziona tutto

Sh.getCellByPosition(1, Riga).CellProtection = oPC
dove lo 0 indicava la colonna A e il numero 1 individua la colonna B, gli indici delle colonne come per le righe iniziano da zero, quindi A= 0 b=1 C=2 è così via, se vuoi usare le macro devo studiare almeno le cose fondamentali in modo tale da poter capire dove intervenire su queste piccole modifiche, come già ti avevo suggerito patel
patel ha scritto:se hai trovato la soluzione leggi qui per imparare ad usare le macro http://professoressa.altervista.org/Dis ... re_OOo.pdf


Funziona tutto perfettamente, finalmente :)
in ultimo...sto provando in ogni maniera ad inserire il messaggio di errore che dovrebbe comparire se provo a modificare B con J compilato ma non riesco a trovare il punto esatto in cui inserirlo.

MsgBox "Prima di selezionare un nuovo articolo é necessario azzerare la quantità", "", "STOP"

Mi viene sempre fuori quando applico una qualsiasi modifica alla colonna J invece che b.

mi é concesso l ultimo suggerimento tra quale riga devo aggiungere la msgBox?
Openoffice 4.1.5 con MacOs 10.11.6
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Ciao, é passato un po di tempo e funziona ancora tutto molto bene, però avrei una curiosità.
visto che all'evento contenuto modificato posso assegnare un unica macro, è possibile aggregare 2 o piu di queste macro nello stesso codice?
saluti
Openoffice 4.1.5 con MacOs 10.11.6
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 3073
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da lucky63 »

Nel codice della macro puoi inserire una istruzione "call":

Codice: Seleziona tutto

call NomeDellaMacroDaRichiamare
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

probabilmente ho sbagliato qualcosa in pieno io, le ricopiavo esattamente come sono una sotto l altra e cambiavo solo i riferimenti delle celle, controllerò.
Openoffice 4.1.5 con MacOs 10.11.6
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

lucky63 ha scritto:Vedere questo link
Buongiorno lucky, io lo vedo già risolto l'argomento con il visto, manca qualcosa?
Openoffice 4.1.5 con MacOs 10.11.6
Fly88
Messaggi: 27
Iscritto il: martedì 29 ottobre 2019, 17:21

Re: Bloccare una cella se un altra cella non é vuota.

Messaggio da Fly88 »

Scusa hai ragione, provvedo subito :)
Openoffice 4.1.5 con MacOs 10.11.6
Rispondi