Condividi:        

Formattazione condizionale...in VBA

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Formattazione condizionale...in VBA

Postdi Paolo67 » 21/06/21 18:02

Ciao,
premetto di avere EXCEL 2003 e questo mi comporta di poter utilizzare solo in maniera limitata la formattazione condizionale (limitata a solo 3 condizioni).
Ragion per cui credo debba per forza indirizzarmi in VBA
In pratica dovrei far colorare 2 celle contemporaneamente con diversi colori a seconda del testo che compare in una sola di esse.
Mi spiego meglio:

Se nella cella F5 compare la scritta "ATTENZIONE" allora bisogna colorare di giallo chiaro sia la cella F5 che la F7
Se nella cella F5 compare la scritta "ESTREMA ATTENZIONE" allora bisogna colorare di giallo sia la cella F5 che la F7
Se nella cella F5 compare la scritta "PERICOLO" allora bisogna colorare di arancionne sia la cella F5 che la F7
Se nella cella F5 compare la scritta "PERICOLO ESTREMO" allora bisogna colorare di rosso sia la cella F5 che la F7

Questo processo però fa parte di 1 solo "INDICE" composto da 4 condizioni possibili.
Gli "INDICI" in realtà sono 5 con condizioni variabili da 4 a 6.

Visto che la cosa deve avvenire automaticamente (senza l'uso di un pulsante) penso che l'unica strada sia utilizzare l'evento Worksheet_Change.

Ho provato a mettere giù qualche linea di codice,giusto per una bozza ma...manca il "far colorare" la 2° cella,inoltre non mi succede nulla :roll:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dgr As String
    dgr = [F5].Value
    If dgr = "ATTENZIONE" Then
        EntireRow.Cells.Interior.ColorIndex = 3
    ElseIf dgr = "ESTREMA ATTENZIONE" Then
        EntireRow.Cells.Interior.ColorIndex = 6
    ElseIf dgr = "PERICOLO" Then
        EntireRow.Cells.Interior.ColorIndex = 46
    ElseIf dgr = "PERICOLO ESTREMO" Then
        EntireRow.Cells.Interior.ColorIndex = 3
    End If
End If
End Sub


E' possibile avere un aiutino,magari una bozza di codice che cercherei poi di "sviluppare" per tutti gli INDICI?
Grazie
Ultima modifica di Paolo67 su 21/06/21 18:08, modificato 1 volte in totale.
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Sponsor
 

Re: Formattazione condizionale...in VBA

Postdi Marius44 » 21/06/21 21:38

Ciao
Premesso che nel codice che hai mostrato la prima e l'ultima condizione ti dovrebbero colorare in rosso la riga
occorre sapere "come" cambia la scritta in F5.
Perchè se il cambio avviene tramite formula l'evento Change non lo intercetta, intercetta SOLO il cambiamento "fisico"

Ciò detto, non sarebbe il caso di allegare il file (senza dati sensibili)?
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Formattazione condizionale...in VBA

Postdi Anthony47 » 22/06/21 00:35

Credo che la preoccupazione di Mario sia giusta; infatti penso che quelle scritte siano elaborate da formule che leggono la temperatura di qualche stazione meteorologica...
Bisogna quindi andare indietro a lavorare sulla cella che viene compilata con la temperatura e che poi provoca le scritte in F5. Supponiamo che questa cella sia in Foglio1!H5, e che le celle da colorare siano in Foglio2.
Allora prova mettendo questo codice sul "modulo vba di Foglio1" (vedi Nota1):
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$5" Then
    If Target.Value < (-10) Then        ' << Estremo pericolo
        Sheets("Foglio2").Range("F5,F7").Interior.ColorIndex = 3
    ElseIf Target.Value < (-5) Then    ' << Pericolo
        Sheets("Foglio2").Range("F5,F7").Interior.ColorIndex = 22
    ElseIf Target.Value < (-1) Then     ' << Estrema attenzione
        Sheets("Foglio2").Range("F5,F7").Interior.ColorIndex = 6
    ElseIf Target.Value < 5 Then        ' << Attenzione
        Sheets("Foglio2").Range("F5,F7").Interior.ColorIndex = 19
    End If
End If
End Sub

Nota1: operativamente, fai tasto dx sul tab col nome Foglio1 e scegli Visualizza codice; inserisci il codice che ti ho dato in questo modulo vba.

Se non e' H5 allora modifica quel If Target.Address = "$H$5"
Ho inventato io delle soglie di temperatura che generano gli allarmi crescenti; tu metterai le tue soglie
Come pure, non sono certo che i "colorIndex" scelti siano di tuo gradimento, ma puoi cambiarli liberamente

Se invece ho sparato nel vuoto allora devi chiarire tu quale e' la situazione reale.

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 23/06/21 00:28

Marius44 ha scritto:Ciao
Premesso che nel codice che hai mostrato la prima e l'ultima condizione ti dovrebbero colorare in rosso la riga
occorre sapere "come" cambia la scritta in F5.
Perchè se il cambio avviene tramite formula l'evento Change non lo intercetta, intercetta SOLO il cambiamento "fisico"

Ciò detto, non sarebbe il caso di allegare il file (senza dati sensibili)?
Ciao,
Mario

Ciao Marius44, innanzitutto grazie per la risposta.
Il codice che ho mostrato era errato ( me ne sono accorto dopo aver postato),il rosso doveva comparire solo nella 4° condizione. Nella prima invece solo un giallo chiaro...ho fatto confusione,tuttavia mi dava un errore.
Riguardo poi la scritta in F5,questa cambia tramite una formula (SE(E...))che si trova all'interno dello stesso foglio (che a sua volta è stata pre-elaborata in altri fogli...).
Per il file da allegare...dovrei fare alcune modifiche per "semplificarlo".
Infatti il foglio di lavoro originale consta di 14 fogli tutti collegati tra loro
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 23/06/21 01:14

Anthony47 ha scritto:Credo che la preoccupazione di Mario sia giusta; infatti penso che quelle scritte siano elaborate da formule che leggono la temperatura di qualche stazione meteorologica...

Ormai mi conosci bene Anthony :lol:

Anthony47 ha scritto:Bisogna quindi andare indietro a lavorare sulla cella che viene compilata con la temperatura e che poi provoca le scritte in F5...

Grazie per il codice Anthony ma...ti fermo subito,la scritta che compare è la conseguenza di un "lavoro" che parte da "lontano" e che è stato fatto a priori in altri fogli.
In realtà poi non serve il solo dato "temperatura" ma anche altri parametri che poi vengono elaborati tramite formule molto complesse. (te lo dico giusto per informazione...).
Quindi in definitiva in questo foglio devo "semplicemente" far cambiare il colore di 2 celle (la cella stessa ed un'altra contemporaneamente) a seconda delle scritte in esse presenti.
Ho messo giù un pò di righe che riguardano al momento solo il 1° INDICE( di 5...).
Codice: Seleziona tutto
Sub Colore_celle()
If Cells(5, 6) = "INDICE NON APPLICABILE" Then
   Cells(5, 6).Interior.ColorIndex = 2
   Cells(7, 6).Interior.ColorIndex = 2
    ElseIf Cells(5, 6) = "ATTENZIONE" Then
    Cells(5, 6).Interior.ColorIndex = 36
    Cells(7, 6).Interior.ColorIndex = 36
    ElseIf Cells(5, 6) = "ESTREMA ATTENZIONE" Then
    Cells(5, 6).Interior.ColorIndex = 6
    Cells(7, 6).Interior.ColorIndex = 6
    ElseIf Cells(5, 6) = "PERICOLO" Then
    Cells(5, 6).Interior.ColorIndex = 45
    Cells(7, 6).Interior.ColorIndex = 45
    ElseIf Cells(5, 6) = "PERICOLO" Then
    Cells(5, 6).Interior.ColorIndex = 3
    Cells(7, 6).Interior.ColorIndex = 3
    End If
End Sub

Noto subito che il cambio del colore non avviene (anche se cambia la scritta) a meno che io non visualizzi il codice e faccia il Debug premendo F8.
Inoltre non va avanti dandomi un errore:"Errore di run-time 1004":Errore definito dall'applicazione o dall'oggetto"
:roll:
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Marius44 » 23/06/21 07:04

Ciao
Ringrazio Anthony per l'implicita "lode" ;) .
Noto ancora due disattenzioni che possono causare qualche problema:
1) l'indentazione non è corretta (guarda il mio esempio e ti accorgerai della differenza)
2) L'ultima e la penultima condizione sono entrambe poste a "PERICOLO"

Ho aggiunto la prima riga di codice per "pulire" i precedenti.
A me, modificando il contenuto della cella F5 mi dà i colori corretti (nel secondo PERICOLO ho modificato in MASSIMO PERICOLO)

Codice: Seleziona tutto
Sub Colore_celle()
Range(Cells(5, 6), Cells(7, 6)).Interior.ColorIndex = xlNone
If Cells(5, 6) = "INDICE NON APPLICABILE" Then
   Cells(5, 6).Interior.ColorIndex = 2
   Cells(7, 6).Interior.ColorIndex = 2
ElseIf Cells(5, 6) = "ATTENZIONE" Then
    Cells(5, 6).Interior.ColorIndex = 36
    Cells(7, 6).Interior.ColorIndex = 36
ElseIf Cells(5, 6) = "ESTREMA ATTENZIONE" Then
    Cells(5, 6).Interior.ColorIndex = 6
    Cells(7, 6).Interior.ColorIndex = 6
ElseIf Cells(5, 6) = "PERICOLO" Then
    Cells(5, 6).Interior.ColorIndex = 45
    Cells(7, 6).Interior.ColorIndex = 45
ElseIf Cells(5, 6) = "MASSIMO PERICOLO" Then
    Cells(5, 6).Interior.ColorIndex = 3
    Cells(7, 6).Interior.ColorIndex = 3
End If
Stop
End Sub

Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 23/06/21 09:08

Ciao Marius,
grazie per le modifiche suggeritemi.
Ho notato però che con l'struzione STOP la macro si bloccava e non continuava il ciclo (l'ho momentaneamente esclusa).
Hai ragione ho fatto il copia incolla e non mi son reso conto di aver lasciato la stessa scritta "PERICOLO" anzichè "PERICOLO ESTREMO"
La macro sembra funzionare ma il cambio del colore avviene "solo" se la lancio con ALT+F8 altrimenti non si aggiorna in automatico nonostante avvenga il cambio del testo...
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Anthony47 » 23/06/21 10:07

Marius ha scritto:Ringrazio Anthony per l'implicita "lode" ;)
Scusa Mario se ho esagerato :D

Paolo67 ha scritto:Grazie per il codice Anthony ma...ti fermo subito,la scritta che compare è la conseguenza di un "lavoro" che parte da "lontano" e che è stato fatto a priori in altri fogli
Beh, allora devi andare indietro quanto basta per trovare una cella che viene modificata non da una formula ma da un input...

Ma puoi anche pensare ad altri approcci...
Ad esempio, se le modifiche vengono fatte da una macro allora basterebbe mettere in coda a questa macro, subito prima del suo End Sub, una Call alla macro che colora le celle. Cioe' ad esempio:
Codice: Seleziona tutto
Sub MacroCheImporta
'
'
Call Colore_Celle
End Sub


Oppure potresti usare l'evento Worksheet_Activate per applicare i colori nel momento in cui attivi il foglio:
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Dim strArr, CIArr, myMatch
Dim LForR As String, ColR As String
'
'DEFINIZIONI:
LForR = "F5"                '<<< La cella in cui guardare
ColR = "F5, F7"             '<<< Le celle da formattare
strArr = Array("Caso1", "Caso2", "Caso3", "Caso4", "Caso5")     '<<< Cosa trovare
CIArr = Array(2, 19, 6, 45, 3, 7)                               '<<< ColorIndex associato
'
'ESECUZIONE:
myMatch = Application.Match(Range(LForR), strArr, False)
If IsError(myMatch) Then
    Range(ColR).Interior.ColorIndex = xlNone                    'Se "Caso" non trovato
Else
    Range(ColR).Interior.ColorIndex = CIArr(myMatch)            'Colore se "Caso" trovato
End If
End Sub

Questo codice va messo nel modulo vba del foglio su cui vuoi applicare i colori (tasto dx sul tab col nome foglio; scelta Visualizza codice), in sostituzione del codice della Sub Worksheet_Change
Noterai che ho adottato un algoritmo non basato su If /ElseIf /End If, ma usando le prime righe per "descrivere" il da farsi e poi un codice per "eseguire" il da farsi.
Forse questo metodo ti facilita l'aggiunta di piu' condizioni; forse.

Ovviamente questo approccio funziona bene solo se per importare i nuovi dati cambi il foglio di lavoro

Spero che tra le tante cose che spariamo ci sia lo spunto giusto per te...

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 23/06/21 16:46

Anthony47 ha scritto:Oppure potresti usare l'evento Worksheet_Activate per applicare i colori nel momento in cui attivi il foglio:
Codice: Seleziona tutto
strArr = Array("Caso1", "Caso2", "Caso3", "Caso4", "Caso5")     '<<< Cosa trovare
CIArr = Array(2, 19, 6, 45, 3, 7)                               '<<< ColorIndex associato


Infatti così ho fatto ed il cambio di colore si aggiorna automaticamente.
Non capisco però perchè per 5 "casi" hai utilizzato 6 colori :roll:

A me succede che se faccio così
Codice: Seleziona tutto
 strArr = Array("ATTENZIONE", "ESTREMA ATTENZIONE", "PERICOLO", "PERICOLO ESTREMO")       '<<< Cosa trovare
    CIArr = Array(2, 36, 6, 46, 3)                                 '<<< ColorIndex associato

allora ottengo i giusti colori associati alle scritte:
BIANCO (2) ----->INDICE NON APPLICABILE (che in realtà non figura nell'Arrey)
GIALLO CHIARO (36) ----> ATTENZIONE
GIALLO (6) ----> ESTREMA ATTENZIONE
ARANCIONE (46) --->PERICOLO
ROSSO (3) ---->PERICOLO ESTREMO

mentre se l'aggiungo ma lascio inalterati i 5 codici dei numeri
Codice: Seleziona tutto
 strArr = Array("INDICE NON APPLICABILE", "ATTENZIONE", "ESTREMA ATTENZIONE", "PERICOLO", "PERICOLO ESTREMO")       '<<< Cosa trovare
    CIArr = Array(2, 36, 6, 46, 3)                                 '<<< ColorIndex associato

allora la scriita "INDICE NON APPLICABILE" si colora di GIALLO CHIARO (36) e non BIANCO (2) :roll:

Visto che la cosa sembri funzionare devo passare al resto degli indici...
Come procedo?Aggiungo al posto di...

Codice: Seleziona tutto
Dim strArr, CIArr, myMatch
    Dim LForR As String, ColR As String


qualcosa tipo:

Dim strArr, BBArr
DIM AForB As String, ColT As String

e cerco di seguire il codice come postato?
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Anthony47 » 23/06/21 17:47

Non capisco però perchè per 5 "casi" hai utilizzato 6 colori

Non ricordo come avevo fatto le prove, ma l'importante e' che ci siano ALMENO tanti colori quanti sono i "casi"; questa situazione PERO' ha mascherato un problema nel mio codice; infatti NON DEVO usare Range(ColR).Interior.ColorIndex = CIArr(myMatch) ma
Codice: Seleziona tutto
Range(ColR).Interior.ColorIndex = CIArr(myMatch-1)

Infatti CIArr e' un array in base 0, mentre con Match alla prima posizione corrisponde il valore 1.
Posso escludere di aver volutamente aggiunto un codice colore "cuscinetto" per evitare di fare -1 :D :D

Per replicare la cosa per piu' aree non serve creare nuove Dim e nuove variabili; ma ripeterai le istruzioni del blocco DEFINIZIONI (con le nuove definzioni) e ripeterai le istruzioni del blocco ESECUZIONE, che quindi figureranno N volte nella tua macro; e' disottimizzato ma funzionera' bene (se vuoi sperimentare, mettile in una Sub a sé stante e poi inserisci solo Call MacroEsecuzione invece dell'intero blocco)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 23/06/21 23:29

Ho provato a mettere assieme diretamente 1° e 2° indice:

Codice: Seleziona tutto
Private Sub Worksheet_Activate()
    Dim strArr, CIArr, myMatch
    Dim LforR As String, ColR As String
    '
    'DEFINIZIONE 1:
    LforR = "F3"                '<<< La cella in cui guardare
    ColR = "F3, F5"             '<<< Le celle da formattare
    strArr = Array("ATTENZIONE", "ESTREMA ATTENZIONE", "PERICOLO", "PERICOLO ESTREMO")       '<<< Cosa trovare
    CIArr = Array(2, 36, 6, 46, 3)                                 '<<< ColorIndex associato
    '
    'ESECUZIONE 1:
    myMatch = Application.Match(Range(LforR), strArr, False)
    If IsError(myMatch) Then
        Range(ColR).Interior.ColorIndex = xlNone                    'Se "Caso" non trovato
    Else
        Range(ColR).Interior.ColorIndex = CIArr(myMatch)      'Colore se "Caso" trovato
   'DEFINIZIONE 2:
    LforR = "F9"
    ColR = "F9, F11"
    strArr = Array("BENESSERE", "CAUTELA", "ESTREMA CAUTELA", "PERICOLO", "ELEVATO PERICOLO")
    CIArr = Array(2, 4, 36, 6, 46, 3)
    'ESECUZIONE 2:
    myMatch = Application.Match(Range(LforR), strArr, False)
    If IsError(myMatch) Then
        Range(ColR).Interior.ColorIndex = xlNone                    'Se "Caso" non trovato
    Else
        Range(ColR).Interior.ColorIndex = CIArr(myMatch)      'Colore se "Caso" trovato
     End If
    End If
    End Sub

Ho notato che il cambio dei colori avviene in modo regolare nella DEFINIZIONE/ESECUZIONE 1 mentre nella DEFINIZIONE/ESECUZIONE 2 lo switch avviene a partire solo dal 3° caso in poi.
In pratica:
Bianco (2)
Verde (4)
e Giallo chiaro (36) non si manifestano mai nonostante il testo si commuti.

Riguardo
Codice: Seleziona tutto
Range(ColR).Interior.ColorIndex = CIArr(myMatch-1)

Ho notato che mettendo -1 la problematica dei colori nelle celle aumenta :roll:
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Anthony47 » 24/06/21 12:34

L'istruzione giusta e' myMatch-1

Se cosi' le problematiche aumentano e' perche' forse c'e' confusione: ogni "caso" inserito in strArr fa il paio col corrispondente indice colore inserito in CIArr. Cosi' per F3, a ATTENZIONE corrisponde l'indice 2 (Bianco); a ESTREMA ATTENZIONE corrisponde 36 (Giallino); a PERICOLO corrisponde 6 (Giallo); a PERICOLO ESTREMO corrisponde 46 (Arancione). L'indice 3 (Rosso) non sara' mai usato perche' manca la quinta voce in strArr

Per debug, aggiungi queste due istruzioni subito prima di End Sub:
Codice: Seleziona tutto
'..
Range("G9").Value = Range("F9").Interior.ColorIndex
Range("G3").Value = Range("F3").Interior.ColorIndex
End Sub

In questo modo in colonna G verra' riportato l'indice colore di colonna F, per controllare che per ogni voce in strArr venga usato il colore indicato in CIArr. Se colonna G non e' diponibile usa un altra cella libera.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 25/06/21 00:06

test
Ultima modifica di Paolo67 su 25/06/21 00:18, modificato 2 volte in totale.
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 25/06/21 00:17

Allora,
ho riaggiunto myMatch-1
Ho aggiunto le 2 istruzioni
Codice: Seleziona tutto
Range("G9").Value = Range("F9").Interior.ColorIndex
Range("G3").Value = Range("F3").Interior.ColorIndex

Ed ho aggiunto nei "casi" anche "INDICE NON APPLICABILE"
Adesso i numeri dei "casi" sono dello stesso numero dei colori.
Questo il codice completo...
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Dim strArr, CIArr, myMatch
Dim LforR As String, ColR As String
'
'DEFINIZIONE 1:
LforR = "F3" '<<< La cella in cui guardare
ColR = "F3, F5" '<<< Le celle da formattare
strArr = Array("INDICE NON APPLICABILE", "ATTENZIONE", "ESTREMA ATTENZIONE", "PERICOLO", "PERICOLO ESTREMO") '<<< Cosa trovare
CIArr = Array(2, 36, 6, 46, 3) '<<< ColorIndex associato
'
'ESECUZIONE 1:
myMatch = Application.Match(Range(LforR), strArr, False)
If IsError(myMatch) Then
Range(ColR).Interior.ColorIndex = xlNone 'Se "Caso" non trovato
Else
Range(ColR).Interior.ColorIndex = CIArr(myMatch - 1) 'Colore se "Caso" trovato
'DEFINIZIONE 2:
LforR = "F9"
ColR = "F9, F11"
strArr = Array("INDICE NON APPLICABILE", "BENESSERE", "CAUTELA", "ESTREMA CAUTELA", "PERICOLO", "ELEVATO PERICOLO")
CIArr = Array(2, 4, 36, 6, 46, 3)
'ESECUZIONE 2:
myMatch = Application.Match(Range(LforR), strArr, False)
If IsError(myMatch) Then
Range(ColR).Interior.ColorIndex = xlNone 'Se "Caso" non trovato
Else
Range(ColR).Interior.ColorIndex = CIArr(myMatch - 1) 'Colore se "Caso" trovato
End If
End If
'..
Range("G9").Value = Range("F9").Interior.ColorIndex
Range("G3").Value = Range("F3").Interior.ColorIndex
End Sub


Ebbene,la formattazione funziona SOLO la 1°volta (ed aggiungo in maniera corretta) per entrambe gli INDICI.
Dopo anche se cambiano i valori e di conseguenza cambiano i "casi" non avviene il cambiamento dei colori.
In pratica è come se rimanesse in memoria l'ultimo colore memorizzato per entrambe i "casi".
Per "sbloccare" e ritornare alla normalità devo visualizzare il codice,premere F8 e dare invio fino alla fine dell'ultima istruzione.
A quel punto si verifica nuovamente il cambio di colore (corretto).
Ti allego 2 screen.
Ti ricordo che stiamo "lavorando" solo sui primi 2 INDICI del foglio.
Come puoi notare nella 1° immgine è stato immesso un valore per il quale entrambe gli indici non hanno applicabilità.I colori sono corretti.

Immagine

Nella 2° immagine il valore è cambiato e sono cambiati anche le scritte degli INDICI ma i colori sono rimasti uguali.

Immagine
:roll: :roll:

Facendo F8...ecco il risultato nuovamente corretto
Immagine

Buonanotte
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35

Re: Formattazione condizionale...in VBA

Postdi Anthony47 » 25/06/21 08:30

Questo codice va messo nel modulo vba del foglio su cui vuoi applicare i colori (tasto dx sul tab col nome foglio; scelta Visualizza codice), in sostituzione del codice della Sub Worksheet_Change
Hai seguito queste istruzioni? Se Sì allora il codice dovrebbe eseguirsi tutte le volte che il foglio in questione diventa attivo, applicando quindi alle celle la formattazione in funzione delle scritte in quel momento presenti.
Se invece No, allora quello che scrivi e' tutto normale.

Per i concetti di base vedi viewtopic.php?f=26&t=103893&p=647675#p647675
In particolare il "comma" Per inserire una macro in un Modulo di classe

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale...in VBA

Postdi Paolo67 » 25/06/21 22:32

Si il codice era inserito nel modulo VBA del foglio.
E' stato un mio errore in quanto facevo cambiare i dati per verificare il change dei colori direttamente dal foglio INDICI (avevo creato un collegamento momentaneo al foglio principale di input dati per evitare di spostarmi di continuo).
E' bastato eliminare il collegamento...
Ho completato tutti gli INDICI e adesso funziona benissimo.
Grazie!
Ciao
:)
OFFICE 2003 - OFFICE 2007
Paolo67
Utente Senior
 
Post: 121
Iscritto il: 20/04/21 20:35


Torna a Applicazioni Office Windows


Topic correlati a "Formattazione condizionale...in VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 56 ospiti