Discussione:
Formattazione condizionale con codice vba
(troppo vecchio per rispondere)
errebi
2008-08-04 23:43:54 UTC
Permalink
Ripropongo:
vorrei poter fomattare da codice ( con il Worksheet_Change ) ogni
singola cella di un'area fissa ($H$8:$AB$50) se assumono una serie di
valori (una decina) derivanti anche da formula e/o da digitazione.
Tali valori potrebbero far riferimento ad un intervallo denominato,
evitando il Select.Case o la serie di If.
In concreto vorrei che se una cella nel mio intervallo assume un
valore "A" o "F" o "C" .... questi vengano in rosso e grassetto. E
tornino con la formattazione pre-impostata se vengono ri-modificati in
valori diversi.
Il problema di fondo è di superare il limite di tre formattazioni
condizionali (Excel 2003), usando le stesse e, in aggiunta, ulteriori
formattazioni con codice.
Potendo formattare da codice in questo modo, potrei avere ulteriore
formattazione, come l'evidenziazione della riga ecc.) da formattazione
condizionale, o viceversa.
Grazie
eliano
2008-08-05 23:41:01 UTC
Permalink
Post by errebi
vorrei poter fomattare da codice ( con il Worksheet_Change ) ogni
singola cella di un'area fissa ($H$8:$AB$50) se assumono una serie di
valori (una decina) derivanti anche da formula e/o da digitazione.
Tali valori potrebbero far riferimento ad un intervallo denominato,
evitando il Select.Case o la serie di If.
In concreto vorrei che se una cella nel mio intervallo assume un
valore "A" o "F" o "C" .... questi vengano in rosso e grassetto. E
tornino con la formattazione pre-impostata se vengono ri-modificati in
valori diversi.
Il problema di fondo è di superare il limite di tre formattazioni
condizionali (Excel 2003), usando le stesse e, in aggiunta, ulteriori
formattazioni con codice.
Potendo formattare da codice in questo modo, potrei avere ulteriore
formattazione, come l'evidenziazione della riga ecc.) da formattazione
condizionale, o viceversa.
Grazie
Ciao errebi.
Vedo che nessuno risponde al tuo invito e penso che la ragione sia la
commistione della formattazione condizionale di excel con quella da Vba.
Credo che la soluzione migliore sia procedere con formattazione da Vba, con
la quale non hai nessun limite se non il limite massimo dei colori
utilizzabili sia per lo sfondo che per i caratteri, ad esempio, oltre a tante
altre funzionalità.
Auguri
Eliano
errebi
2008-08-06 07:28:09 UTC
Permalink
Post by eliano
Post by errebi
vorrei poter fomattare da codice ( con il Worksheet_Change ) ogni
singola cella di un'area fissa ($H$8:$AB$50) se assumono una serie di
valori (una decina) derivanti anche da formula e/o da digitazione.
Tali valori potrebbero far riferimento ad un intervallo denominato,
evitando il Select.Case o la serie di If.
In concreto vorrei che se una cella nel mio intervallo assume un
valore "A" o "F" o "C" .... questi vengano in rosso e grassetto. E
tornino con la formattazione pre-impostata se vengono ri-modificati in
valori diversi.
 Il problema di fondo è di superare il limite di tre formattazioni
condizionali (Excel 2003), usando le stesse e, in aggiunta, ulteriori
formattazioni con codice.
Potendo formattare da codice in questo modo, potrei avere ulteriore
formattazione, come l'evidenziazione della riga ecc.) da formattazione
condizionale, o viceversa.
Grazie
Ciao errebi.
Vedo che nessuno risponde al tuo invito e penso che la ragione sia la
commistione della formattazione condizionale di excel con quella da Vba.
Credo che la soluzione migliore sia procedere con formattazione da Vba, con
la quale non hai nessun limite se non il limite massimo dei colori
utilizzabili sia per lo sfondo che per i caratteri, ad esempio, oltre a tante
altre funzionalità.
Auguri
Eliano
Ciao Eliano :)
si, mi rendo conto ... Del resto avevo già posto analogo problema
tempo fa x un altro tipo di lavoro ... e appunto non era arrivata una
soluzione.
Avendo visto i tuo codice qualche gg. fa ... mi era tornato l'uzzolo
di poter incrociare le due cose.

E cmq mi tornerebbe utile lo stesso il solo codice (attivabile da
macro) che mi rendesse un formato sulle celle di un intervallo (in
ciascun Active.Sheet) se queste assumono (x valore o formula) valore =
A , F o C
(nell'area data del foglio attivo mi metti in rosso e grassetto tutte
le A, le F le C.....).
Come sempre confido nella Vs. abilità.

Grazie per l'attenzione.

errebi
Antonio
2008-08-06 09:28:02 UTC
Permalink
Post by errebi
E cmq mi tornerebbe utile lo stesso il solo codice (attivabile da
macro) che mi rendesse un formato sulle celle di un intervallo (in
ciascun Active.Sheet) se queste assumono (x valore o formula) valore =
A , F o C
(nell'area data del foglio attivo mi metti in rosso e grassetto tutte
le A, le F le C.....).
Come sempre confido nella Vs. abilità.
Se ti và bene con macro prova qualcosa del genere

'<----------------

Sub ApplFormat()
Range("B2:M30").Select '<= Da cambiare range
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
'<= Da cambiare B2 con inizio tuo range

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.Color = -16776961
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub

'<----------------

Sub ToglFormat()
Range("B2:M30").Select '<= Da cambiare range
Selection.FormatConditions.Delete
End Sub

'<----------------

che associ a due pulsanti, qualdo ti serve evidenziare applichi con pulsante
1, poi togli con pulsante 2
Nell'esempio ho considerato il range B2:M30 ma tu adatta al tuo, poi creati
un elenco di criteri (risultati formule o altro) e assegna un nome io ho
messo "ELENCO"
In questo caso ho utilizzato la formattazione condizionale applicata tramite
macro quindi ovviamente và bene se non hai altre formattazioni sul range.
p,s, controlla se funziona, in quanto io ho v.2007 ed ho utilizzato
registratore di macro e non posso testare su versioni precedenti, ad ogni
modo se segui passo passo operazioni puoi usare anche tu registratore di
macro per ottenere, la formula da mettere nella formattazione è
"=CONFRONTA(B2;ELENCO;0)" .

Ciao
Antonio
errebi
2008-08-08 15:39:26 UTC
Permalink
Post by Antonio
Post by errebi
E cmq mi tornerebbe utile lo stesso il solo codice (attivabile da
macro) che mi rendesse un formato sulle celle di un intervallo (in
ciascun Active.Sheet) se queste assumono (x valore o formula) valore =
A  , F  o C
(nell'area data del foglio attivo mi metti in rosso e grassetto tutte
le A, le F le C.....).
Come sempre confido nella Vs. abilità.
Se ti và bene con macro prova qualcosa del genere
'<----------------
Sub ApplFormat()
    Range("B2:M30").Select '<= Da cambiare range
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        '<= Da cambiare B2 con inizio tuo range
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Bold = True
        .Italic = False
        .Color = -16776961
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub
'<----------------
Sub ToglFormat()
    Range("B2:M30").Select '<= Da cambiare range
    Selection.FormatConditions.Delete
End Sub
'<----------------
che associ a due pulsanti, qualdo ti serve evidenziare applichi con pulsante
1, poi togli con pulsante 2
Nell'esempio ho considerato il range B2:M30 ma tu adatta al tuo, poi creati
un elenco di criteri (risultati formule o altro) e assegna un nome io ho
messo "ELENCO"
In questo caso ho utilizzato la formattazione condizionale applicata tramite
macro quindi ovviamente và bene se non hai altre formattazioni sul range.
p,s, controlla se funziona, in quanto io ho v.2007 ed ho utilizzato
registratore di macro e non posso testare su versioni precedenti, ad ogni
modo se segui passo passo operazioni puoi usare anche tu registratore di
macro per ottenere, la formula da mettere nella formattazione è
"=CONFRONTA(B2;ELENCO;0)" .
Ciao
Antonio
Ciao Antonio.
Grazie mille x il riscontro.
Ho impostato il seguente codice:

Sub ApplicaFormati()

Range("B2:M30").Select

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=CONFRONTA(B2;ELENCO;0)"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With
End Sub

Questo però non risolve il problema con le formattazioni precedenti.
Anche se ü un'utile automazione per aree da formattare.
Ancora grazie cmq.
Ciao! :)

Loading...