You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] Formattazione condizionale dato invisibile ;;;
[RISOLTO] Formattazione condizionale dato invisibile ;;;2018-11-14T23:20:47+01:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Formattazione condizionale dato invisibile ;;;

Visualizzazione 25 filoni di risposte
  • Autore
    Post
    • Avatarteto21162
      Partecipante
        Post totali: 88

        Salve ragazzi,

        Lo scopo è rendere non visibile il dato in cella se una condizione non è soddisfatta

        in una cella uso la formattazione condizionale ” la formula è ”  =$U$11=”si”

        con la solita scelta dei colori se la condizione si realizza, altrimenti il dato di cella è colorato di bianco di default.

        Questa soluzione esteticamente funziona ma non è sufficiente a rendere realmente invisibile il dato infatti se seleziono la cella e il settore attiguo il dato appare e appare anche sopra nella barra.

        Ho provato a formattare la cella di default con ;;; ma in questo caso la formattazione non funziona se la condiziona è soddisfatta.

        Quello che mi serve è una formattazione condizionale puntata ad una cela che renda il dato invisibile ;;; se nella cella di riferimento c’è ” no ” e visibile se nella stessa cella c’è ” si ”

        Grazie a tutti

        Teto

        • Questo topic è stato modificato 1 anno, 6 mesi fa da sidsid.
      • sidsid
        Moderatore
          Post totali: 749

          Non so se ho capito bene la tua esigenza
          1 – seleziona la cella interessata
          2 – formato celle –> protezione –> flag su “nascosta”–>OK
          3 – proteggi il foglio
          Nel caso dovessi proteggere la cella da eventuali cancellature, flag anche su “bloccata”.

        • Avatarteto21162
          Partecipante
            Post totali: 88

            Ciao Sid

            vorrei, con la formattazione condizionale poter rendere visibile o invisibile un dato di cella

            Ad esempio se in cella f11 ho un nome  vorrei che quel nome fosse visibile se in cella d11 c’è si e invisibile se in d11 c’è no

            So che formattando la cella con  ;;; si rendono invisibili i dati di quella cella ma non so il modo di legarli ad una condizione.

            Teto

          • sidsid
            Moderatore
              Post totali: 749

              Credo che quello che per vuoi fare te, ci vuole l’aiuto di vba.
              Almeno secondo le mie conoscenze.
              Opterei per l’evento change del foglio solo per la cella D11.

            • sidsid
              Moderatore
                Post totali: 749

                In ogni caso anche con la formattazione personalizzata “;;;” il valore nella cella sarà invisibile, ma nella barra della formula si vedrà. Come già spiegato per evitare questo, il foglio va protetto e la cella interessata nella protezione dovrà avere il flag su “nascosta”

              • sidsid
                Moderatore
                  Post totali: 749

                  Uno spunto da cui partire
                  Attenzione: nella cella D11 devi togliere il flag dall’opzione “bloccata” nella parte relativa alla protezione

                  Private Sub Worksheet_Change(ByVal Target As Range)
                  
                  If Not Intersect(Range("D11"), Target) Is Nothing And Target.Count = 1 Then
                      With Me.Range("F11")
                          Me.Unprotect
                          If Target.Value = "si" Then
                              .NumberFormat = "General"
                              .FormulaHidden = False
                          Else
                              .NumberFormat = ";;;"
                              .FormulaHidden = True
                          End If
                          Me.Protect
                      End With
                  End If
                      
                  End Sub
                • Avatarteto21162
                  Partecipante
                    Post totali: 88

                    Ciao Sid,

                    ho provato la macro e naturalmente funziona benissimo nella riga indicata ma ora mi serve ancora un piccolo aiuto.

                    Devo rendere visibile o invisibile tramite la stessa condizione un range molto più vasto per la colonna F dalla riga 11 alla riga 10000 e comunque altri dati in altre 2 o 3 colonne  comunque tutto legato alla stessa condizione.

                    Teto

                  • sidsid
                    Moderatore
                      Post totali: 749

                      Semplice: imposta un range con gli intervalli interessati, e inseriscilo nel costrutto With
                      Imposta anche il riferimento alla cella della convalida.
                      Un esempio da adattare ai tuoi intervalli:

                      Private Sub Worksheet_Change(ByVal Target As Range)
                      Dim rConvalida As Range, rng As Range
                      
                      Set rConvalida = Me.Range("D11") ' range della convalida
                      Set rng = Me.Range("F11:F10000,G11:G100,K11:K1000") 'range da rendere invisibile
                      
                      If Not Intersect(rConvalida, Target) Is Nothing And Target.Count = 1 Then
                          With rng
                              Me.Unprotect
                              If Target.Value = "si" Then
                                  .NumberFormat = "General"
                                  .FormulaHidden = False
                              Else
                                  .NumberFormat = ";;;"
                                  .FormulaHidden = True
                              End If
                              Me.Protect
                          End With
                      End If
                      Set rConvalida = Nothing
                      Set rng = Nothing
                      
                      End Sub

                      ATTENTO: ricorda che alle celle che vengono formattate , devi togliere il flag “bloccata” prima di proteggere il foglio.

                    • Avatarteto21162
                      Partecipante
                        Post totali: 88

                        Ciao Sid,

                        dopo aver inserito la macro nel foglio del mio sistema e adattato alle celle da errore ” utilizzo non valido della parola chiave me.

                        Devo togliere  la spunta di protezione alle celle che contengono la convalida cioè ” si ” o anche le celle alle quali verrà cambiata la formattazione ;;; o general ?

                        Teto

                         

                      • sidsid
                        Moderatore
                          Post totali: 749

                          dopo aver inserito la macro nel foglio del mio sistema e adattato alle celle da errore ” utilizzo non valido della parola chiave me.

                          Sicuro di aver messo il codice nel modulo del foglio, e non in un modulo standard?
                          Sia la cella della convalida, sia le celle che subiscono la formattazione, devono essere SBLOCCATE, quindi senza spunta

                        • Avatarteto21162
                          Partecipante
                            Post totali: 88

                            Come cella di convalida intendi quella cella guida che contiene la parola che fa scattare il codice che nel mio caso è si vero?

                            il codice è inserito nello spazio vba del foglio di riferimento che contiene i dati da formattare.

                            All’interno di questo spazio vba ci sono altri codici non verrei che contrastassero.

                            Il codice inserito nel foglio quando dovrebbe scattare? all’apertura del file oppure nel momento in cui si verifica un cambiamento nelle celle di riferimento?

                            Il codice inserito nel foglio (vba ) non da errore semplicemente non succede nulla

                            L’errore al quale mi riferisco è dopo che lo stesso codice ho provato di metterlo in un modulo perchè potrebbe servirmi anche li

                            Teto

                          • sidsid
                            Moderatore
                              Post totali: 749

                              Come cella di convalida intendi quella cella guida che contiene la parola che fa scattare il codice che nel mio caso è si vero?

                              La cella della convalida relativa al codice è D11, che contiene i valori “si” e “no”; quindi quando scegli “si” i valori nelle celle sono visibili; se scegli “no” vengono nascosti

                              All’interno di questo spazio vba ci sono altri codici non verrei che contrastassero.

                              Avevi già in uso l’evento Change del foglio? Se “si” dovrei vedere il codice, altrimenti nessun problema

                              Il codice inserito nel foglio quando dovrebbe scattare? all’apertura del file oppure nel momento in cui si verifica un cambiamento nelle celle di riferimento?

                              viene eseguito al cambio nella cella di convalida

                              L’errore al quale mi riferisco è dopo che lo stesso codice ho provato di metterlo in un modulo perchè potrebbe servirmi anche li

                              Come immaginavo.
                              La parolina chiave “Me” fa riferimento all’oggetto foglio, ma non può essere usata per un modulo standard. La macro è un evento del foglio; i moduli standard non hanno eventi.
                              Ripeto il codice scatta solo se cambia il valore nella cella D11 del foglio in cui si trova la convalida.

                              Nel caso spiega meglio come vorresti usare il codice extra “evento Change”

                            • Avatarteto21162
                              Partecipante
                                Post totali: 88

                                Ora la cella di convalida è cz11 il codice come è impostato funziona, quindi se in quella cella c’è si tutti i dati ad esempio del range f11:f10000 si vedono oppure no.

                                Quello che mi serve è fare in modo che il dato in f11 sia visibile o invisibile se la cella cz11 contenga il dato si come anche se f12 sia visibile o invisibile se cz12 contiene si

                                se f13 sia visibile o invisibile se cz13 contiene si

                                ………ecc fino alla riga 10000

                                in pratica come succede se potessi utilizzare la formattazione condizionale.

                                Mi serve per la privacy se ho il consenso il dato sarà visibile altrimenti no

                                Grazie Sid

                                 

                                Teto

                                • Questa risposta è stata modificata 1 anno, 6 mesi fa da Avatarteto21162.
                              • sidsid
                                Moderatore
                                  Post totali: 749

                                  Quindi non devi nascondere tutto il range F11:F10000, ma solo la cella della riga relativa alla convalida; quindi tu da cz11 a cz10000 hai convalide?

                                • Avatarteto21162
                                  Partecipante
                                    Post totali: 88

                                    si diciamo che in via teorica il range massimo considerato arriva alla riga 10000 ora sono poco sotto alla riga 1000.

                                    Quindi per rafforzare il mio esempio, se fino a ieri il dato di cella f348 era invisibile in quanto in cella cz348 non è presente il si perchè ancora non ho il consenso sul trattamento dati di quella persona, e oggi lo ottengo inserirò in cz348 il si e immediatamente il dato in f348 diventa visibile.

                                    Questo deve poter accadere per tutti i dati interessati fino alla riga 10000

                                  • sidsid
                                    Moderatore
                                      Post totali: 749

                                      Si è così
                                      Però devi chiarire bene una cosa: scegliendo “si” devi nascondere il valore o renderlo visibile?

                                    • Avatarteto21162
                                      Partecipante
                                        Post totali: 88

                                        con si lo rendo visibile

                                      • sidsid
                                        Moderatore
                                          Post totali: 749

                                          Questo il codice modificato
                                          ATTENZIONE
                                          Te hai detto che hai più colonne a cui devi applicare questa soluzione; questo codice è funzionante (al momento) soltanto per nascondere i valori in colonna F, tramite le convalide in colonna “CZ”. Se la soluzione funziona, vedremo di adattarlo al resto dei tuoi intervalli.
                                          I range “F11:F10000” e “CZ11:CZ10000” non devono avere la spunta su bloccata.

                                          Private Sub Worksheet_Change(ByVal Target As Range)
                                          Dim rConvalida As Range, rng As Range
                                          
                                          Set rConvalida = Me.Range("CZ11:CZ10000") ' range della convalida
                                          Set rng = Me.Range("F" & Target.Row) 'range da rendere invisibile
                                          
                                          If Not Intersect(rConvalida, Target) Is Nothing And Target.Count = 1 Then
                                              With rng
                                                  Me.Unprotect
                                                  If Target.Value = "si" Then
                                                      .NumberFormat = "General"
                                                      .FormulaHidden = False
                                                  Else
                                                      .NumberFormat = ";;;"
                                                      .FormulaHidden = True
                                                  End If
                                                  Me.Protect
                                              End With
                                          End If
                                          Set rConvalida = Nothing
                                          Set rng = Nothing
                                          
                                          End Sub

                                          Fa sapere
                                          :bye:

                                        • Avatarteto21162
                                          Partecipante
                                            Post totali: 88

                                            Ciao Sid,

                                            il codice funziona bene ora vorrei poter gestire oltre alla colonna F anche la N e  la P

                                            Grazie

                                            Teto

                                          • sidsid
                                            Moderatore
                                              Post totali: 749

                                              Sempre tramite le convalide in colonna CZ?

                                            • Avatarteto21162
                                              Partecipante
                                                Post totali: 88

                                                si certo

                                              • sidsid
                                                Moderatore
                                                  Post totali: 749

                                                  Ora non ho sottomano il pc….così a naso ma potrei sbagliare.

                                                  Al posto di

                                                  Set rng = Me.Range("F" & Target.Row)
                                                  Metti
                                                  Set rng = me.range("F" & target.row & ",N" & target.row & ",P" & target.row)

                                                • Avatarteto21162
                                                  Partecipante
                                                    Post totali: 88

                                                    Ciao Sid,

                                                    per confermarti che l’ultimo codice che mi hai proposto per nascondere contemporaneamente anche dati di altre celle funziona perfettamente.

                                                    Grazie mille dell’aiuto

                                                    Vorrei togliermi una curiosità, il codice come è impostato rende il dato praticamente non presente se nella cella di convalida manca il “SI” con il formato ;;;. Ma se volessi che nelle celle interessate al posto del formato ;;; andasse un testo tipo “senza nome ” come andrebbe modificato?

                                                    Teto  :good:

                                                  • sidsid
                                                    Moderatore
                                                      Post totali: 749

                                                      Ma dopo ti sovrascrive il testo esistente

                                                    • Avatarteto21162
                                                      Partecipante
                                                        Post totali: 88

                                                        Naturalmente per soddisfare il mio quesito iniziale è perfetto il sistema di convalida con formato ;;; che ti confermo funzionare benissimo anche su colonne multiple.

                                                        Era solo una curiosità per eventuali usi futuri.

                                                        Per il [RISOLTO] io ancora non riesco a vedere il tasto modifica all’inizio della discussione che serve per poter inserire la dicitura stessa.

                                                        Teto

                                                        • Questa risposta è stata modificata 1 anno, 6 mesi fa da Avatarteto21162.
                                                      • sidsid
                                                        Moderatore
                                                          Post totali: 749

                                                          Se sei un normale utente non hai quell’opzione.
                                                          Chiudo io. Ciao

                                                      Visualizzazione 25 filoni di risposte
                                                      • Il topic ‘[RISOLTO] Formattazione condizionale dato invisibile ;;;’ è chiuso a nuove risposte.