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

[Excel 2007]-Evidenziare celle visibili con condizione II Opzioni
aetio
Inviato: Monday, July 25, 2011 9:03:26 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
ho dato al 3d questo titolo perché il problema che devo risolvere è una variante del 3d da cui prende spunto... Il "teatro delle operazioni" è il medesimo per cui l'impianto compositivo della macro dovrebbe essere uguale, le dichiarazioni anche... ciò che devo individuare invece è un'altra serie di dati, per cui nella macro andrebbero tolte alcune istruzioni e ne andrebbero aggiunte altre, o meglio... le istruzioni presenti nella macro andrebbero modificate, manipolate, per andare a puntare i dati da evidenziare in questa ricerca. Il preambolo mi è sembrato doveroso, l'uso del condizionale anche, per potere inquadrare velocemente ciò che mi serve, dato che l'argomento lo abbiamo già discusso in quel 3d, quindi è inutile riscrivere gran parte dei dati a suo tempo forniti... :))
Rispetto al problema (brillantemente risolto, come SEMPRE) del 3d del link, cosa devo individuare? Solo i dati scritti nelle celle situate:
- entro le 4 righe sotto all'area gialla in cui bordavo le celle di rosso (celle che colorerò di rosso 3)
- entro le 4 righe sopra all'area gialla in cui bordavo le celle di rosso (celle che colorerò di giallo 6)
Si tratterebbe quindi di (perdonatemi il termine, qui molto brutto!!) cannibalizzare la bellissima macro postata alla fine del 3d del link, mantenendo lo stesso impianto compositivo dato che il teatro operativo è il medesimo, ma togliendo le istruzioni che puntano ad individuare le celle che saranno colorate di verde 4, togliendo le istruzioni che puntano ad individuare le celle che saranno colorate di azzurro 34, togliendo le istruzioni che puntano ad individuare le celle che saranno bordate di rosso 3, aggiungendo le istruzioni che puntano alle celle situate 4 righe sotto e 4 righe sopra all'area gialla in cui si bordavano le celle di rosso 3, area limitata ovviamente da col.C a col.G
Intuitivamente credo che il lavoro da fare sia quello, ma nella mia somma ignoranza pur avendo provato e riprovato (con mia somma arrabbiatura, dato che la materia mi piace tantissimo, ma i miei limiti sono altrettanto immensi...) a modificare le istruzioni nella stupenda macro non sono riuscito ad ottenere ciò che mi serve...
Del resto non basta di certo il solo sapere scrivere per diventare poeti, scrittori...
Se nella mia richiesta sono stato "un Ungaretti", tanto per rimanere in tema letterario, sono a completa disposizione... ;))
Come al solito... Grazie assai e buona giornata,
eZio


Sponsor
Inviato: Monday, July 25, 2011 9:03:26 AM

 
a10n11
Inviato: Monday, July 25, 2011 10:05:28 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
nella macro le variabili:
Area10 = identificava le 10 righe di competenza
Rng1 = le 4 righe superiori
Rng2= le 4 righe inferiori
quindi basta lavorare nella parte del codice in cui veniva trattata la variabile Area10

questo è il codice modificato.

Sub coloraselezione4up4dwn()
Dim rng As Range, rng1 As Range, rng2 As Range
Dim mysett As Variant, sett As Variant, Itx As Variant
Dim Mval As Variant, Mval2 As Variant
Dim Area As Range, Ctrl As Boolean

Set rng = Range("B3", Range("B3").End(xlDown))
col = Selection.Column
counter = 0
'--------------------------------------
' Definisce l'area di selezione e conta le righe della selezione
miorange = Selection.Address
Set Area = Range(miorange).SpecialCells(xlCellTypeVisible)
For Each sel In Area
righe = righe + sel.Rows.Count
Next
'-------------------------------------------

For Each Itx In Area
counter = counter + 1
mysett = Cells(Itx.Row, 2).Value
i = Itx.Row
Do While Cells(i + 1, col).EntireRow.Hidden = True
i = i + 1
Loop

' il contatore serve per definire il limite di NextItx nel caso di selezioni parziali
'dei codici visibili-------------------------------------------------------
If counter < righe Then
nextItx = Cells(i + 1, col).Value
Else
nextItx = ""
End If
'-------------------------------------------------------------
For Each sett In rng
If sett = mysett Then
riga = sett.Row
'---------------------controllo Riga della selezione
blk1 = riga - 10
blk2 = riga - 14
blk3 = 4
If blk1 <= 3 Then blk1 = 3
If blk2 < 3 And blk1 > 3 Then
blk2 = 3
ElseIf blk1 <= 3 Then
Ctrl = True
End If
'-------------------------------------------------------------------------
If Not Ctrl Then
'zona -4
Set rng1 = Cells(blk2, 3).Resize(4, 5)
For Each Mval In rng1
If Mval.Value = Itx Then
Itx.Interior.ColorIndex = 6
Exit For
End If
Next Mval
End If
Set rng2 = Cells(riga, 3).Offset(1, 0).Resize(blk3, 5) 'zona +4
For Each Mval2 In rng2
If Mval2 = Itx And Itx.Interior.ColorIndex = xlNone Then
Itx.Interior.ColorIndex = 3
End If
Next Mval2
If nextItx = "" Then GoTo fine
Exit For
End If
Next sett
Ctrl = False
Next Itx
fine:
Set Area = Nothing
Set rng = Nothing
Set rng1 = Nothing
Set rng2 = Nothing
End Sub

saluti
Giap

aetio
Inviato: Monday, July 25, 2011 10:11:40 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,

...non sei un Angelo, sei un ARCANGELO!!
A parte gli scherzi... corro immediatamente a fare girare la macro...
Grazie infinite e buona giornata,
eZio

Nota importante:

a10n11 ha scritto:


...
quindi basta lavorare nella parte del codice in cui veniva trattata la variabile Area10
...


su quel "basta lavorare" si potrebbe scrivere un Trattato... :)))

.
aetio
Inviato: Monday, July 25, 2011 11:16:34 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
premetto una richiesta di scuse... ben sapendo che scriverò sicuramente almeno una castroneria :))

così, a prima vista, mi sembra che non bisogna lavorare sulla variabile Area10, o meglio non solo sulla variabile Area10, bensì anche sui codici
For Each mval3 In area10
If mval3 = nextItx Then
With Cells(i + 1, col).Borders
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
Exit For
End If


perché ciò che mi serve trovare con questa macro sono solo i codici scritti nelle celle situate:
- entro le 4 righe sotto all'area gialla in cui precedentemente bordavo le celle di rosso (celle che colorerò di rosso 3)
- entro le 4 righe sopra all'area gialla in cui precedentemente bordavo le celle di rosso (celle che colorerò di giallo 6)

In pratica la macro, pur mantenendo lo stesso impianto, anziché bordare di rosso le celle che trova in quell'area gialla deve solo colorare di rosso le celle dei codici che trova, situati entro le 4 righe sottostanti a detta area gialla... o di giallo le celle dei codici che trova, situati entro le 4 righe superiori a quell'area gialla... che non è l'area in cui vengono colorate, se ne vengono individuati i codici, quelle altre celle di verde o di azzurro... celle appartenenti ad un'altra area della tabella che in questa macro bypassiamo perché non costituiscono oggetto dell'attuale ricerca...
Ho provato la macro di questo 3d e conferma la mia supposizione... forse sbaglio?



Grazie assai per la pazienza (e la tolleranza) buona giornata,
eZio
a10n11
Inviato: Monday, July 25, 2011 12:22:31 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
come detto:
Commenta:

quindi basta lavorare nella parte del codice in cui veniva trattata la variabile Area10


vanno disattivate tutte le righe del codice in cui operava l'Area10
Area10 è il range dell'area gialla dove veniva eseguito il ciclo For per il confronto dei codici.
saluti
Giap

aetio
Inviato: Monday, July 25, 2011 2:41:11 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
problema risolto...
Grazie assai e buon pomeriggio!!
eZio

a10n11
Inviato: Monday, July 25, 2011 3:44:05 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
problema risolto...
Grazie assai e buon pomeriggio!!
eZio


salve
il problema era forse quello di analizzare per il range -4 ed il range +4 anche il codice successivo a quello elaborato??
se si bastava aggiungere un ciclo per ogni sezione puntando la comparazione alla variabile NextItx
saluti
Giap

aetio
Inviato: Monday, July 25, 2011 3:45:06 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
"la Matemetica non è un'opinione" e infatti... il problema per una serie di incredibili coincidenze sembrava risolto. In realtà il problema persiste eccome... :((
Prendo in prestito un passaggio del 3d originale, che forse fà capire meglio il problema:
aetio ha scritto:

-per quanto riguarda
Code:
la stessa riecerca la effettuo per il codice subito successivo . il 18

specifico: se lo trova nell'area in esame (C40:G50) borda il cod.18 di cella O50 di Rosso, se invece non lo trova lascia la cella così com'è...

ora il mio problema è: se lo trova nell'area in esame (C40:G50) ignora il cod.18 di cella O50, se invece lo trova entro le 4 righe sopra all'area in esame colora la cella di Giallo, mentre se lo trova entro le 4 righe sotto all'aera in esame colora la cella di Rosso.

Grazie assai per l'infinita pazienza e buon pomeriggio,
eZio
aetio
Inviato: Monday, July 25, 2011 3:50:13 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao, mentre postavo hai postato pure tu ...:))
a10n11 ha scritto:
aetio ha scritto:
Ciao,
problema risolto...
Grazie assai e buon pomeriggio!!
eZio


salve
il problema era forse quello di analizzare per il range -4 ed il range +4 anche il codice successivo a quello elaborato??
se si bastava aggiungere un ciclo per ogni sezione puntando la comparazione alla variabile NextItx
saluti
Giap

il problema è, in questa macro, di elaborare SOLO l'analisi per il range -4 ed il range +4 del codice successivo a quello elaborato.
E infatti l'emapsse è proprio l'editare in modo corretto le istruzioni per l'aggiunta di un ciclo per ogni sezione puntando la comparazione alla variabile NextItx

Saluti,
eZio
aetio
Inviato: Monday, July 25, 2011 6:33:07 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
nonostante stia provando e riprovando a risolvere questo problema seguendo il tuo prezioso consiglio... sbaglio sicuramente a dare qualche istruzione... più che altro penso sia proprio un problema di uso corretto dei termini VBA... e non mi restituisce ciò che cerco... (ma sia chiaro che la colpa è tutta dell'imbranato!!)
Grazie infinite per la pazienza e buona serata,
eZio
a10n11
Inviato: Monday, July 25, 2011 7:03:26 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
vedi qua:

Sub coloraselezione4up4dwn()
Dim rng As Range, rng1 As Range, rng2 As Range
Dim mysett As Variant, sett As Variant, Itx As Variant
Dim Mval As Variant, Mval2 As Variant, NextItx As Variant
Dim Area As Range, Ctrl As Boolean

Set rng = Range("B3", Range("B3").End(xlDown))
col = Selection.Column
counter = 0
'--------------------------------------
' Definisce l'area di selezione e conta le righe della selezione
miorange = Selection.Address
Set Area = Range(miorange).SpecialCells(xlCellTypeVisible)
For Each sel In Area
righe = righe + sel.Rows.Count
Next
'-------------------------------------------

For Each Itx In Area
counter = counter + 1
mysett = Cells(Itx.Row, 2).Value
i = Itx.Row
Do While Cells(i + 1, col).EntireRow.Hidden = True
i = i + 1
Loop

' il contatore serve per definire il limite di NextItx nel caso di selezioni parziali
'dei codici visibili-------------------------------------------------------
If counter < righe Then
NextItx = Cells(i + 1, col).Value
Else
NextItx = ""
End If
'-------------------------------------------------------------
For Each sett In rng
If sett = mysett Then
riga = sett.Row
'---------------------controllo Riga della selezione
blk1 = riga - 10
blk2 = riga - 14
blk3 = 4
If blk1 <= 3 Then blk1 = 3
If blk2 < 3 And blk1 > 3 Then
blk2 = 3
ElseIf blk1 <= 3 Then
Ctrl = True
End If
'-------------------------------------------------------------------------
If Not Ctrl Then
'zona -4
Set rng1 = Cells(blk2, 3).Resize(4, 5)
For Each Mval In rng1
If Mval.Value = Itx Then
Itx.Interior.ColorIndex = 6
End If
If Mval.Value = NextItx Then
Cells(i + 1, col).Interior.ColorIndex = 6
End If
Next Mval
End If
Set rng2 = Cells(riga, 3).Offset(1, 0).Resize(blk3, 5) 'zona +4
For Each Mval2 In rng2
If Mval2 = Itx And Itx.Interior.ColorIndex = xlNone Then
Itx.Interior.ColorIndex = 3
End If
If Mval2.Value = NextItx Then
Cells(i + 1, col).Interior.ColorIndex = 3
End If
Next Mval2
If NextItx = "" Then GoTo fine
Exit For
End If
Next sett
Ctrl = False
Next Itx
fine:
Set Area = Nothing
Set rng = Nothing
Set rng1 = Nothing
Set rng2 = Nothing
End Sub


NB:
nell'ipotesi che segue:

seleziono per il controllo i codici 18 e 19
controllo il codice 18 e lo trovo nella quartina inferiore (colore rosso)
controllo il suo successivo (19) e lo trovo nella quartina superiore del codice 18 (colore giallo
passo il controllo al codice 19
lo trovo nella quartina inferiore - qui nasce il problema- dovrebbe essere colorato di rosso ma ha già un colore
applicato precedentemente. Come si deve comportare??
saluti
Giap


aetio
Inviato: Monday, July 25, 2011 8:14:42 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
una cosa è certa... da solo di sicuro non ce l'avrei MAI fatta...!! Mamma mia...!!
Il problema che sottoponi è realistico, a volte succede che due settori da monitorare si trovino parecchio vicini. In quel caso, se si può fare e sopra tutto non ti crea particolare difficoltà, è assai meglio colorarlo di rosso...
Grazie assai, mi stai togliendo un'altra volta (ormai si può dire l'ennesima......) dai guai :)))
Buona serata, corro subito a testare la macro.......
eZio
aetio
Inviato: Monday, July 25, 2011 9:55:24 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
con grandi gioia e piacere ti comunico che anche stavolta hai fatto un pieno CENTRO!!
Sei davvero un fuoriclasse ammirevole, sotto ogni aspetto... tecnico e umano. Doti assai rare oggi.
Sono molto lusingato, lo dico sinceramente, dalla speciale attenzione che mi stai dedicando
Ora torno a godermi la tua splendida creatura...!!
GRAZIE INFINITE e buona serata,
eZio

a10n11
Inviato: Tuesday, July 26, 2011 9:39:44 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
modificando la parte della macro che vedi qui sotto, si ottiene quanto segue:
se la cella elaborata era stata già segnata con il colore rosso (presente nella quartina inferiore) , nella successiva
elaborazione del codice viene trovata anche nella quartina superiore (quindi da contrassegnare con il colore giallo),
la macro privilegia in ogni caso il colore rosso.
'---------------------------------------------
'zona -4
Set rng1 = Cells(blk2, 3).Resize(4, 5)
For Each Mval In rng1
If Mval.Value = Itx Then
If Itx.Interior.ColorIndex = 3 Then
Else
Itx.Interior.ColorIndex = 6
End If
End If
If Mval.Value = NextItx Then
If Cells(i + 1, col).Interior.ColorIndex = 3 Then
Else
Cells(i + 1, col).Interior.ColorIndex = 6
End If
End If
Next Mval
End If
'-----------------------------------------------
saluti
Giap

aetio
Inviato: Tuesday, July 26, 2011 11:21:58 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
sei proprio un tesoro, l'incarnazione per eccellenza di "Amico".
Grazie infinite, buona giornata
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.