› Excel e gli applicativi Microsoft Office › Formattazione condizionale con vba.
-
AutoreArticoli
-
Buona giornata;
nell'esempio in allegato ho impostato "Formattazione condizionale" con "Lettura facilitata" nel Range "=$A$3:$A$7" con le regole:
=(E(RESTO(RIF.RIGA($A3);2)=0;$A3<>""))
e
=(E(RESTO(RIF.RIGA($A3);2)<>0;$A3<>""))
Per qualche motivo che ancora mi sfugge, a volte, il Range viene modificato.
Chiedo se è possibile impostare nuovamente il Range "=$A$3:$A$70" con Codice VBA.Al momento ho provvisoriamente risolto con il Codice:
Option Explicit Sub Riquadra() Application.ScreenUpdating = False Range("A3:A7").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:="=""""" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Borders(xlLeft) .LineStyle = xlContinuous End With With Selection.FormatConditions(1).Borders(xlRight) .LineStyle = xlContinuous End With With Selection.FormatConditions(1).Borders(xlTop) .LineStyle = xlContinuous End With With Selection.FormatConditions(1).Borders(xlBottom) .LineStyle = xlContinuous End With Selection.FormatConditions(1).StopIfTrue = False Range("C2").Select Application.ScreenUpdating = True End Subche risolve la "Formattazione condizionale" riquadrando i record ma senza proporre la "Lettura facilitata".
Qualche suggerimento?
Grazie dell'attenzione che potrete dedicarmi.
Giuseppe
Allegati:
You must be logged in to view attached files.ho impostato "Formattazione condizionale" con "Lettura facilitata"
Cos'è la "lettura facilitata" ?
Nel merito del codice della Sub Riquadra(), puoi compattare il codice sia evitando di ripetere il riferimento a Selection (ti basta un With iniziale) sia evitando di impostare ogni singola proprietà Borders perchè la collection Borders() si riferisce già a tutti gli orientamenti 8esterni) della cella:
Sub Riquadra() Application.ScreenUpdating = False With Range("A3:A7") .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:="=""""" .FormatConditions(.FormatConditions.Count).SetFirstPriority .FormatConditions(1).Borders.LineStyle = xlContinuous .FormatConditions(1).StopIfTrue = False End With Range("C2").Select Application.ScreenUpdating = True End SubBuon pomeriggio vecchio frak;
Cos'è la "lettura facilitata" ?
La "Lettura facilitata" prevede di alternare le righe con fondo "neutro" da quelle con fondo "colorate".
... ti basta un With iniziale
Ti ringrazio del suggerimento che però non risolve il mio problema della "Lettura facilitata".
Giuseppe
ciao
Per qualche motivo che ancora mi sfugge, a volte, il Range viene modificato.
il range della formattazione viene spezzato modificato ecc...
solo se inserisci annulli righe..........altrimenti è fisso
Salve a tutti
Senza ricorrere al VBA seleziona l'intervallo che ti interessa e nella FC inserisci questa formula:
=E(A2<>"";RESTO(SUBTOTALE(3;$A$1:$A2);2))
e scegli la bordatura e il colore per l'alternanza.
Fai sapere. Ciao,
Mario
Non ho provato ma penso che una cosa cosi' dovrebbe funzionare:
Sub Riquadra() Application.ScreenUpdating = False With Range("A3:A7") .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:="=""""" .FormatConditions(.FormatConditions.Count).SetFirstPriority .FormatConditions(1).Borders.LineStyle = xlContinuous .FormatConditions(1).StopIfTrue = False .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=(E(RESTO(RIF.RIGA($A3);2)=0;$A3<>""""))" .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent1 .TintAndShade = 0.799981688894314 io ho messo un colore a caso .FormatConditions(1).StopIfTrue = False 'e qui continui con l'altra formula con lo stesso concetto per l'altro colore End With End SubPensando ad alta voce, non si potrebbe creare una tabella (in senso stretto: un ListObject) e applicare un formato predefinito a righe alternate?
Buona sera Aldo Ercolini;
Ti ringrazio del tuo contributo, purtroppo il Tuo codice genera un errore di run-time:

Vedrò di verificare il Tuo codice ed aggiornarti su eventuali sviluppi.
Grazie della Tua attenzione.
Giuseppe
Buona sera vecchio frak;
... si potrebbe creare una tabella (in senso stretto: un ListObject) e applicare un formato predefinito a righe alternate?
Temo di no; nell'immagine in allegato puoi ben vedere che il range è variabile in funzione della Directory (Cartella) selezionata e delle opzioni scelte.

GiuseppeA margine di quanto sopra, perdonami vecchio frac, credo di dover rinunciare a seguirvi su questo Forum; rientrando per verificare eventuali sviluppi delle Discussioni ho "perso" 7 minuti per gestire il consenso ai "Cookie" e "Intresse legittimo".
Sono consapevole che è interesse legittimo utilizzare "Cookie" per questo e altri Forum ma, alla mia età, 7 minuti sono veramente troppi, una volta dichiarati tutti i consensi , credo, si potrebbe evitare di riproporre continuamente le stesse richieste.
Auguro a Tutti buon Lavoro.
Giuseppe
Da provare
`Sub Riquadra2() Set Rng = ThisWorkbook.Worksheets("Foglio1").Range("A3:A7") With Rng .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=(E(RESTO(RIF.RIGA($A3);2)=0;$A3<>""""))" With .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = -4015 'azzuro chiaro .TintAndShade = 0 End With End With End Sub`Colora come preferisci una cella qualsiasi, posizionati sopra e usa questo per conoscere il numero
Sub cokore_cella() 'MsgBox ActiveCell.Interior.Pattern MsgBox ActiveCell.Interior.PatternColorIndex 'MsgBox ActiveCell.Interior.ThemeColor 'MsgBox ActiveCell.Interior.TintAndShade 'MsgBox ActiveCell.Interior.PatternTintAndShade 'MsgBox ActiveCell.Interior.ColorIndex 'MsgBox ActiveCell.Interior.Color End SubBuona giornata Raffaele;
grazie della Tua proposta, soluzione interessante.Vedo di adattarla alle mie reali esigenze.
A Tua disposizione in poargepe@libero.it
Giuseppe
Buongiorno GiuseppeMN
Non hai detto una parola circa la formula da me proposta (post #43205). L'hai provata? Non funziona come dovrebbe? Che problemi ti ha creato? Oppure non ho capito io e volevi SOLO una soluzione con VBA?
Scusa l'insistenza ma mi premeva (e mi preme) sapere se dava il risultato voluto.
Scusa se ti ho importunato. Grazie e ciao,
Mario
credo di dover rinunciare a seguirvi su questo Forum; rientrando per verificare eventuali sviluppi delle Discussioni ho "perso" 7 minuti per gestire il consenso ai "Cookie" e "Intresse legittimo".
Ho notato anch'io, qualche giorno fa, una certa insistenza da parte del forum a chiedermi l'approvazione dei cookies. Credo che si sia trattato di un'anomalia temporanea. In ogni caso mi dispiace se ci abbandoni ma capisco che per ciascuno di noi il proprio tempo è assolutamente prezioso e quindi la tua decisione verrà rispettata senza che ciò sia pregiudizievole nei tuoi confronti.
Vale a dire: sentiti liberissimo di andare e tornare quando vuoi
(Come direbbe Adam Douglas: "...addio e grazie per tutto il pesce")
Buona giornata Marius;
effettivamente mi serve una soluzione solo con VBA.
In realtà la possibilità di ripristinare il range già impostato in "Formattazione condizionale".
Nel file, del quale ho proposto l'immagine, quando scelo determinate funzioni, esempio "Stampa Directory", a volte,vengono modificati i riferimenti in "Formattazione condizionale"
A questo punto, per ripristinare il range devo:
Aprire "Formattazione condizionale"
e
Manualmente, ripristinare i parametriNiente di drammatico ma cercavo un modo automatico per ripristinare il range.
Grazie della tua attenzione.
Giuseppe
Raffaele, ho notato che non sono visibili le immagini che avevo allegato, provo a riproporle.
Queste sono le impostazioni originali.

Queste sono le impostazioni modificate da ripristinare.

Giuseppe
Buona giornata vecchio frac;
Credo che si sia trattato di un'anomalia temporanea.
Verificherò nei prosimi giorni e, se l'anoamlia sarà risolta, sarò ben felice di continuare a partecipare in Forum.
Grazie di tutto.
Giuseppe
Non capisco quale problema ci sia...a parte il range A3 o A4 -- A7 o D1000
Se la cella in colonna A è piena + la riga è pari mette un colore
Ci sarà solo una condizione (colore azzuro), se sbagliato lascia il bianco
Perchè hai due condizioni? Hai due colori?>>>Set Rng = ThisWorkbook.Worksheets("NOME-FOGLIO").Range("A4:D1000")
NOME-FOGLIO + Range("A4:D1000")>>>.FormatConditions.Delete
Qualsiasi Formattazione-Condizionale (giusta o errata) viene eliminata e crea una sola condizione...=(E(RESTO(RIF.RIGA($A3);2)=0;$A3<>""))Buona sera Raffaele;
Perchè hai due condizioni? Hai due colori?
Ho due colori; come puoi notare, nella seconda immagine della risposta #43229 la "Formattazione condizionale" è corretta fino alla riga 10 poi è necessario ripristinare i range.
In buona sostanza sarebbe sufficiente ripristinare i due range; con il tuo codice ripristino tutto range, colori e riquadri.Molto indegnamente ho modicato il tuo codice in questo modo mi sembra accettabile.
Option ExplicitSub Ripristina()Dim rng As RangeSet rng = ThisWorkbook.Worksheets("Foglio1").Range("A3:A10000")With rng.FormatConditions.Delete.FormatConditions.Add Type:=xlExpression, Formula1:="=(E(RESTO(RIF.RIGA($A3);2)=0;$A3<>""""))".FormatConditions(1).Borders.LineStyle = xlContinuous.FormatConditions.Add Type:=xlExpression, Formula1:="=(E(RESTO(RIF.RIGA($A3);2)<>0;$A3<>""""))".FormatConditions(2).Borders.LineStyle = xlContinuousWith .FormatConditions(2).Interior.PatternColorIndex = xlAutomatic.Color = -10.TintAndShade = 0End WithEnd WithEnd SubIn realtà il secondo colore, ora è -10, preferirei fosse grigio chiaro; ma questo è solo un dettaglio che vedrò di sistemare.
Giuseppe
Allegati:
You must be logged in to view attached files.Trovato in rete il codice
Buona giornata gianfranco55.
Grazie della tua attenzione dedicatami in risposta #43203; Solo ora riesco a darti riscontro e mi scuso del ritardo.il range della formattazione viene spezzato modificato ecc...
solo se inserisci annulli righe..........altrimenti è fissoIl mio unico dubbio è sull'istruzione:
ActiveSheet.Range("$A$2:$A$10000").RemoveDuplicates Columns:=1, Header:=xlYesMa ho risolto con la prosta di Raffaele53 nella risposta #43221 opportunamente adattata alle mie necessità.
Buon fine settimana.
Giuseppe
ciao
Giuseppe
.RemoveDuplicates
non è un dubbio sfortunatamente è una realtà
la formattazione condizionale viene spezzettata....è un assurdo ma lo fa
-
AutoreArticoli
