Blocco di alcune celle condizionato al valore di altre celle, il tutto con il foglio bloccato.

Anonimo
2024-03-07T18:58:50+00:00

Buongiorno,

ho cercato e trovato varie soluzioni in rete ma nessuna pare funzionare. spero mi possiate aiutare.

Ho un foglio protetto in cui bisogna compilare dei campi. Il foglio è tutto protetto, tranne ovviamente i campi in cui si deve scrivere.

Ho bisogno che se nelle cella:

a) se nella cella unita (A1-B1) si scrive NO, due celle non contigue e unite, precisamente la cella unita (F1-G1) e la cella unita (M1-N1) che non sono protette diventino protette.

b) se nella cella unita (C2-B2) si scrive NO, due celle non contigue e unite, precisamente la cella unita (G2-M2) e la cella unita (L6-P6) che non sono protette diventino protette.

Mi pare che le varie soluzioni che ho trovato non funzionino e non riesco ad applicarle al mio caso, perchè io ho:

  1. Un foglio PROTETTO
  2. Celle UNITE
  3. Celle NON CONTIGUE
  4. DUE CONDIZIONI distinte che devono funzionare separatamente
  5. Ogni condizione deve avere effetto SU PIU' CELLE (per di più unite)

Faccio presente (sigh!) che alle celle di destinazione è applicata una formattazione condizionale.

Spero non sia troppo complicato!

Grazie a tutti.

Microsoft 365 e Office | Excel | Per l'istruzione | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2024-03-12T16:41:53+00:00

Ti basta aggiungere questa parte prima dell'istruzione Me.Protect:

If Not Intersect(Target, Range("M22")) Is Nothing Then

  If UCase(Range("M22").Value) = "SI" Then 

     Range("S22").MergeArea.Locked = True 

  Else 

     Range("S22").MergeArea.Locked = False 

  End If 

End If

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2024-03-09T08:46:38+00:00

    Grazie e gentilissimo.

    Preciso: il foglio è utilizzato (o meglio sarà utilizzato quanto terminato il lavoro di preparazione) sempre con la pw.

    Ora ci sto ancora lavorando quindi ogni tanto la tolgo per poter lavorarci, ma il risultato finale dovrà essere lavorarci con pw.

    Preciso anche, nel caso fosse rilevante per il codice che, essendo un modulo da compilare, è utilizzato più volte: si compila, si invia a un dataBase, poi si cancellano tutti i campi (clikkando un bottone associato a una macro) e si riutilizza per l'utente successivo ripartendo da zero.

    Lunedi provo il nuovo codice che mi hai inviato e ti faccio sapere.

    Grazie ancora per l'uitilissima disponibilità!

    Saluti.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-03-08T15:18:31+00:00

    Innanzitutto grazie per la risposta e la precisione.

    Ho fatto come hai detto ma è funzionato una volta sola, col foglio protetto e senza pw.

    Con la pw non funziona più e anche col foglio non protetto non funziona.

    Poi dà alcuna anomalie. Per esempio se il foglio non è protetto e cancello il contenuto di una cella si auto protegge!

    Lunedi mando file con esempio.

    Per ora grazie !

    Non hai specificato che il file potesse essere lavorato anche senza protezione.

    Per gestire questa ipotesi occorre intercettare lo stato della protezione del foglio.

    Inoltre se il foglio viene protetto manualmente occorrerà poi impostare, nel progetto VBA, la pw utilizzata altrimenti non sarebbe in grado di eliminare la protezione.

    In questo caso le istruzioni potrebbero essere messe all'inizio, con una condizione, in modo che se il foglio non è protetto non venga fatto nulla considerato che bloccare o sbloccare con foglio senza protezione non modifica la situazione.

    Questo potrebbe essere il codice modificato:

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Me.ProtectContents Then

      Application.EnableEvents = False 
    
      Me.Unprotect 
    
      If Not Intersect(Target, Range("A1")) Is Nothing Then 
    
         If UCase(Range("A1").Value) = "NO" Then 
    
            Range("F1").MergeArea.Locked = True 
    
            Range("M1").MergeArea.Locked = True 
    
         Else 
    
            Range("F1").MergeArea.Locked = False 
    
            Range("M1").MergeArea.Locked = False 
    
         End If 
    
      End If 
    
      If Not Intersect(Target, Range("B2")) Is Nothing Then 
    
         If UCase(Range("B2").Value) = "NO" Then 
    
            Range("G2").MergeArea.Locked = True 
    
            Range("L6").MergeArea.Locked = True 
    
         Else 
    
            Range("G2").MergeArea.Locked = False 
    
            Range("L6").MergeArea.Locked = False 
    
         End If 
    
      End If 
    
      Me.Protect 
    
      Application.EnableEvents = True 
    

    End If

    End Sub

    Il file di esempio è lo stesso del precedente link.

    ciao

    ps ho modificato anche una parte per considerare anche il "no" in minuscolo in caso di modifica della cella A1.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-03-08T10:46:40+00:00

    Innanzitutto grazie per la risposta e la precisione.

    Ho fatto come hai detto ma è funzionato una volta sola, col foglio protetto e senza pw.

    Con la pw non funziona più e anche col foglio non protetto non funziona.

    Poi dà alcuna anomalie. Per esempio se il foglio non è protetto e cancello il contenuto di una cella si auto protegge!

    Lunedi mando file con esempio.

    Per ora grazie !

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-03-07T20:46:38+00:00

    Volendo sfruttare l'evento change del foglio di lavoro, da richiamare nel modulo di classe del foglio, si potrebbe pensare ad un codice del genere:

    Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    Me.Unprotect

    If Not Intersect(Target, Range("A1")) Is Nothing Then

      If Range("A1").Value = "NO" Then 
    
         Range("F1").MergeArea.Locked = True 
    
         Range("M1").MergeArea.Locked = True 
    
      Else 
    
         Range("F1").MergeArea.Locked = False 
    
         Range("M1").MergeArea.Locked = False 
    
      End If 
    

    End If

    If Not Intersect(Target, Range("B2")) Is Nothing Then

      If UCase(Range("B2").Value) = "NO" Then 
    
         Range("G2").MergeArea.Locked = True 
    
         Range("L6").MergeArea.Locked = True 
    
      Else 
    
         Range("G2").MergeArea.Locked = False 
    
         Range("L6").MergeArea.Locked = False 
    
      End If 
    

    End If

    Me.Protect

    Application.EnableEvents = True

    End Sub

    Vedi qui un file di esempio: File di esempio

    Le istruzioni Unprotect e Protect sono senza pw perché ho lavorato su una protezione senza pw. Se vuoi una pw ti basta inserire il testo della stessa come argomento.

    Es. Me.Unprotect "miapw", Me.Protect "miapw"

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento