Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Rendere assoluto il range di una formattazione condizionale Opzioni
aetio
Inviato: Monday, October 01, 2012 8:32:33 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
in un foglio di lavoro ho assegnato ad un range (S2:S22) una formattazione condizionale relativa a valori duplicati (la formula è =$S$2:$S$22 e segnalazione con cella colorata) per cui se un codice viene scritto in quel range per più di una volta la cella si colora di rosso. Fino a qui tutto bene. Il mio problema nasce quando devo cancellare uno o più codici della parte alta del range (es. i cod. in S2, S3, S4) e tagliare la parte rimanente (S5÷S22) per incollarla partendo da cella S2: nelle rimanenti celle S20÷S22 viene tagliata anche la formattazione condizionale e tali celle ridiventano neutre...
Non ho trovato nulla di risolutivo, ma penso che la soluzione sia annidata in una macro di tipo Private Sub da scrivere in un modulo del foglio di lavoro in cui essa debba lavorare, solo che non conosco la sintassi per scrivere quel codice.
L'intuizione è corretta, o c'è un'altra soluzione al mio problema?
Grazie assai e buona giornata
eZio
Sponsor
Inviato: Monday, October 01, 2012 8:32:33 AM

 
a10n11
Inviato: Monday, October 01, 2012 10:23:21 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
mi pare di aver già trattato questo argomento (mantenimento di un range selezionato nel caso di aggiunta righe)

in questo caso, simile, basta affidarsi ad una macro automatica che memorizza in una variabile il range oggetto di formattazione condizionale,
toglie la vecchia formattazione e la reinserisce dopo aver eseguito il taglia/copia/incolla.
un esempio:

Private Sub Worksheet_Change(ByVal Target As Range)
Set miorange = Range("S2:S22")
With miorange
.FormatConditions.Delete
.FormatConditions.AddUniqueValues
.FormatConditions(miorange.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).DupeUnique = xlDuplicate
End With
With miorange.FormatConditions(1).Interior
.Color = 3
End With
Set miorange = Nothing
End Sub

saluti
Giap

aetio
Inviato: Monday, October 01, 2012 11:15:42 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
la tua memoria non t'inganna ;-))
infatti per tentare di risolvere il problema attingevo (con le mie limitate nozioni in questo ambito... molto simili a quelle di un pitecantropo :-)) ) a quel caso specifico, ma non riuscivo a scrivere il codice in modo corretto:
Range("S2:S22").Select
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False

Ad onore del vero avevo cercato di dare un range multiplo all'istruzione, anziché limitarsi alla col.S... Range("M2:M22,O2:O22,Q2:Q22,S2:S22"), ma non riusciva a risolvere... stassera, con calma, me la riguardo e cercherò di capire i miei errori :-))
Grazie assai, buona giornata,
eZio

aetio
Inviato: Monday, October 01, 2012 11:19:47 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
ho dimenticato di inserire il codice da cui attingevo:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("Riferimento1").Interior.ColorIndex = xlNone
With ActiveWorkbook.Worksheets("FR-F").Names("Riferimento1")
.RefersTo = "='FR-F'!$B$13:$B$17"
End With
Range("Riferimento1").Interior.ColorIndex = 46
End Sub

Non riuscivo a inserire correttamente il testo della macro in questa, e probabilmente gli errori li facevo in questa fase.
Ciao e Grazie
aetio
Inviato: Tuesday, October 02, 2012 2:06:06 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Ecco il report:
L'errore era tutto e solo mio...
dato che dovevo far lavorare la macro in varie colonne (ciascuna colonna indipendente dalle altre) avevo creato per ciascuna colonna una macro del tipo
Private Sub Worksheet_Change(ByVal Target As Range)
solo che pensavo di diversificare ciascuna macro in base al range... e quindi
Private Sub Worksheet_Change_1(ByVal Target As Range)
Set miorange1 = Range("M2:M22")
Private Sub Worksheet_Change_2(ByVal Target As Range)
Set miorange2 = Range("O2:O22")
Private Sub Worksheet_Change_3(ByVal Target As Range)
Set miorange3 = Range("Q2:Q22")

etc.

In realtà il tutto avrebbe dovuto girare sotto la stessa istruzione (Private Sub Worksheet_Change(ByVal Target As Range) )


Inoltre ho dovuto modificare l'istruzione
.Color = 3
in
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0

perché la macro, in caso di valore duplicato, mi restituiva la cella nera e non rossa (boh?? il 3 è il codice del rosso... il VBA ieri aveva la luna storta?? :-)) )
Ad ogni modo ora funziona tutto a merviglia, ma di sicuro senza l'aiuto di a10n11 anche stavolta sarei ancora lì a capire come fare.
Grazie infinite, buon pomeriggio
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.