Formatazione condizionale non funziona con tabella

Anonimo
2017-06-05T09:48:30+00:00

Salve.

Ho un foglio di lavoro in cui ho inserito una formattazione condizionale, seguendo un tutorial su YouTube.

In pratica si tratta di search and highlight ( credo sia in italiano cerca e evidenzia).

Avendo creato una tabella dati ed inserendo un nuovo record, credevo che  la formula si apliccase automaticamente, mentre invece questo non avviene.

Alle volte funziona ma solo in parte, ho notato infatti che copiando dei dati da un altro foglio di excel, e completando  alcune celle della stessa righa manualmente, solo quelle completate manualmente saranno evidenziate se applico la ricerca.

Inoltre ho aggiunto anche un altra formula per contare quanti record e quindi articoli ho nella tabella e funziona.

Vorrei sapere in cosa sbaglio e se invece e' un limite della formattazione condizionale.

Per essere sicuro che tutto funzioni devo ogni giorni riselezionare l intera tabella e poi riapplicare la formula.

Microsoft 365 e Office | Excel | Per la casa | 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
2017-06-06T13:01:05+00:00

Ciao Davide,

Norman:

Dato che il tuo file sia usato anche da altri utenti, vorrei fare due suggerimenti sussidiari:

  • Lascia la riga dei totali, se utile, in fondo alla tabella e aggiungi un pulsante, allegato as una routine  VBA, per inserire una o più righe al fondo della tabella;

Davide:

No posso togliere la riga dei totali, sono cose che ho aggiunto io al mio foglio di lavoro, di solito I miei colleghi non sono cosi interessati in excel come lo sono io, sono io che sono curioso e cerco di automatizzare il tutto anche per rendere il lavoro piu interessante e divertente.

Norman:

Sfrutta una procedura VBA per rispondere automaticamente a qualsiasi modifica della tabella e verificare che la formattazione condizionale sia corretta.

Se un approccio del genere fosse di interesse, potrei postare un codice appropriato

Davide:

Mi farebbe molto piacere ma io non conosco, ahime', il vba, e mi piacerebbe tantissimo . Capisco qualcosa se lo leggo ma non sono in grado di creare nulla .

Ad ogni modo se vuoi posta pure.

Prova qualcosa del genere:

  • Fai clic dx sulla linguetta del foglio di interesse
  • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
  • Incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, Rng2 As Range, rCell As Range

    Const SNomeTabella As String = "Table1"                  '<<=== Modfifica

    Set Rng = Me.Range(SNomeTabella)

    If Not Intersect(Rng, Target) Is Nothing Then

        Application.ScreenUpdating = False

        On Error GoTo XIT

        Set Rng2 = Selection

        Set rCell = ActiveCell

        Call FormatTable(Rng)

    End If

    Rng2.Select

    rCell.Activate

XIT:

    Application.ScreenUpdating = True

End Sub

'<<=========

  • Alt+IM per inserire un nuovo modulo di codice
  • Nel nuovo modulo vuoto, incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Public Sub FormatTable(Rng As Range)

    Const sFormulaFC As String = _

          "=IF($B$2<>"""",SEARCH($B$2,$A5&$B5" _

& "&$C5&$D5&$E5&$F5&$G5" _

& "&$H5&$I5&$J5&$K5&$L5&$M5&$N5),"""")"

    Rng.Select

    With Rng.FormatConditions

        .Delete

        .Add Type:=xlExpression, Formula1:=sFormulaFC

        With .Item(1)

            .SetFirstPriority

            With .Font

                .ThemeColor = xlThemeColorDark1

                .TintAndShade = 0

            End With

            With .Interior

                .PatternColorIndex = xlAutomatic

                .Color = 15773696

                .TintAndShade = 0

            End With

            .StopIfTrue = False

        End With

    End With

End Sub

'<<========= 

  • Alt+Q per chiudere l'editor di VBA e tornare a Excel
  • Salva il file con l’estensione xlsm

Con questo codice ad ogni modifica o aggiunta alla tabella Table1, La sua formattazione condizionale verrà annullata automaticamente e la formattazione condizionale prevista verrà applicata alla tabella modificata.

Potresti scaricare il mio file di prova Davide20170606.xlsm

Grazie per il benvenuto ma credo che ci fossimo gia incontrati tempo fa (banjer71) , ieri ho creato questo profile con la mail di lavoro....ho fatto in po di confusione :D

Allora, bentornato Davide!

Per chiudere questo thread, vorrei chiederti gentilmente di contrassegnare la mia risposta come Risposta preferita. In questo modo, tu aiuterai anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.

Alla prossima!

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

24 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-06-07T14:39:40+00:00

    Ciao Davide,

    Funziona!!!!!......quasi ahaha

    Copiando ed incollando come hai scritto tu, funziona ma mi da un altro tipo di errore " syntax error"

    allora ho fatto in questo modo, ho copiato ed incollato il codice e poi riga per riga con il "compile vba project" ho analizzato riga per riga fino a quando non ho nidificato la procedura cosi.(vedi in basso) Non so se ' corretto e sono andato per tentativi dato che so pochissimo come muovermi all interno dell editor vba.

    Forse copiando da una pagina web si rischia di prendere dei carateri invisibili o cmq l indentazione si modifica... sono andato per intuizione , magari sto dicendo fesserie ma non avendo la possibilita di inserire codice all interno di tag specifici per il codice, l' editor in cui scriviamo , forse qualche errore lo commette.

    La birra comuqnue ti attende ;)

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, Rng2 As Range, rCell As Range

    Const SNomeTabella As String = "Table1"

    Set Rng = Me.Range(SNomeTabella)

    If Not Intersect(Rng, Target) Is Nothing Then

    Application.ScreenUpdating = False

    On Error GoTo XIT

    Set Rng2 = Selection

    Set rCell = ActiveCell

    Call FormatTable(Rng)

    Rng2.Select

    rCell.Activate

    End If

    XIT:

    Application.ScreenUpdating = True

    End Sub

    '<<=========

    Dipende da come si faccia la copia/incolla!

    Se copio mio ultimo codice direttamente dal thread e lo copio nel modulo di codice, tutto vada bene. Se, però, lo copio prima , ad esempio, in un foglio, alcuni dei miei spazi  (Ascii 32) diventeranno il carattere nbsp (non-breaking space, Ascii 160) . 

    Putroppo, sia in Excel che nell'editor VBA, il carattere nsbp provoca diversi problemi!

    Ora vado a prendere la birra che mi sono promessa - magari anche due, senza alcun spazio tra di loro!  

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-06-07T13:18:18+00:00

    Ciao Davide,

    Scometterei una bella birre ben fresca che io abbia superato il problema!

    Quindi, sostituisci il codice nel modulo di codice del foglio Grade B con la seguente versione:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim Rng As Range, Rng2 As Range, rCell As Range

        Const SNomeTabella As String = "Table1"

        Set Rng = Me.Range(SNomeTabella)

        If Not Intersect(Rng, Target) Is Nothing Then

            Application.ScreenUpdating = False

            On Error GoTo XIT

            Set Rng2 = Selection

            Set rCell = ActiveCell

            Call FormatTable(Rng)

            Rng2.Select

            rCell.Activate

        End If

    XIT:

        Application.ScreenUpdating = True

    End Sub

    '<<=========

    Salva il file e riprova.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2017-06-05T10:57:29+00:00

    Ciao Norman

    grazie per la risposta, ma ho gia' provato con quanto da te suggerito ma non funziona lo stesso.

    Inoltre quello e' il mio secondo problema, cio che mi preme maggiormente e' risolvere il fatto che se aggiungo una nuova riga alla tabella non me la include nella formattazione condizionale. Devo sempre riselezionare l intero range di dati per fa si che funzioni.

    Io credevo che convertendo in tabella non avrei avuto poi questo problema.

    Ad ogni modo questa e' la formula che ho usato.

    =IF($B$2<>"",SEARCH($B$2,$A5&$B5&$C5&$D5&$E5&$F5&$G5&$H5&$I5&$J5&$K5&$L5&$M5&$N5),"")

    e' corretta o per cercare anche nei nuoivi campi che inserisco man man devo aggiungere altro?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-06-05T10:42:14+00:00

    Ciao Davide,

    Ho un foglio di lavoro in cui ho inserito una formattazione condizionale, seguendo un tutorial su YouTube.

    In pratica si tratta di search and highlight ( credo sia in italiano cerca e evidenzia).

    Avendo creato una tabella dati ed inserendo un nuovo record, credevo che  la formula si apliccase automaticamente, mentre invece questo non avviene.

    Alle volte funziona ma solo in parte, ho notato infatti che copiando dei dati da un altro foglio di excel, e completando  alcune celle della stessa righa manualmente, solo quelle completate manualmente saranno evidenziate se applico la ricerca.

    Inoltre ho aggiunto anche un altra formula per contare quanti record e quindi articoli ho nella tabella e funziona.

    Vorrei sapere in cosa sbaglio e se invece e' un limite della formattazione condizionale.

    Per essere sicuro che tutto funzioni devo ogni giorni riselezionare l intera tabella e poi riapplicare la formula.

    Credo che il problema sorga a causa del fatto dell'operazione di copia dall'altro foglio: con questa operazione, si sovrascrive tutta la formattazione esistente e, perciò, anche la formattione condizionale.

    Per evitare il problema, invece della semplice operazione di copia, fai una operazione di copia | incolla speciale | valori. In alternativa, potrei postare una procedura automatica di VBA per restituire la formattazione condizionale. In tal caso, sarebbe utile se tu potessi postare la formula utilizzata per la formattzione condizionale.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento