Cambio colore celle Excel

  • Trading Day 19 aprile Torino - Corso Gratuito sull'investimento

    Migliora la tua strategia di trading con le preziose intuizioni dei nostri esperti su oro, materie prime, analisi tecnica, criptovalute e molto altro ancora. Iscriviti subito per partecipare gratuitamente allo Swissquote Trading Day.

    Per continuare a leggere visita questo LINK

goony

La fortuna favorisce le menti preparate
Registrato
3/6/03
Messaggi
1.495
Punti reazioni
129
Ciao a tutti,

qualcuno ha mai provato (riuscendoci :D ) a far sì che il colore di una cella Excel si modifichi in base alla differenza tra il suo valore corrente e quello precedentemente memorizzato? (p.es. rosso se inferiore, verde se superiore, blu se uguale)?

Cerco una soluzione semplice e possibilmente nativa in Excel (quindi senza ricorrere a programmazione VBA per memorizzare il valore precedente su celle di appoggio e poi fare il confronto con quelle...)

Thks.
 
Siccome il valore precedentemente memorizzato viene perso nella sostituzione, personalmente non credo che sia possibile.
 
Siccome il valore precedentemente memorizzato viene perso nella sostituzione, personalmente non credo che sia possibile.

Già, questo è ciò che ho appurato anch'io (e di cui ho avuto conferma, smanettando sui vari siti internet), per questo cercavo una "genialata" ;)
 
probabilmente utilizzando una macro e la formattazione condizionale ottieni il risultato voluto
ci vuole fantasia però.

Sì, ma deve fare in modo che la macro memorizzi da qualche parte il vecchio valore di ogni cella un attimo prima di confermare il nuovo. Ho seri dubbi che sia possibile.
Scrivere un programma in un qualsiasi linguaggio di programmazione sì, ma in Excel... boh...
 
Sì, ma deve fare in modo che la macro memorizzi da qualche parte il vecchio valore di ogni cella un attimo prima di confermare il nuovo. Ho seri dubbi che sia possibile.
Scrivere un programma in un qualsiasi linguaggio di programmazione sì, ma in Excel... boh...

In Excel esiste il VBA, che è un linguaggio apposito per queste cose, ma che volevo tenere come "ultima spiaggia" soltanto se nessuno ha un'idea migliore
 
Nello specifico cosa inserisci tu e cosa va a modificare?
 
Nello specifico cosa inserisci tu e cosa va a modificare?

Non so se capisco bene la tua domanda, ma la mia necessità è molto semplice:
- Ho un valore in una cella che contiene una formula
- Questo valore viene variato in base alle celle collegate alla formula
- Se il nuovo valore è più alto del precedente la cella si dovrebbe colorare di verde, se più basso di rosso, se uguale di blu

Spero sia chiaro, altrimenti chiedi pure.

Grazie.
 
Non so se capisco bene la tua domanda, ma la mia necessità è molto semplice:
- Ho un valore in una cella che contiene una formula
- Questo valore viene variato in base alle celle collegate alla formula
- Se il nuovo valore è più alto del precedente la cella si dovrebbe colorare di verde, se più basso di rosso, se uguale di blu

Spero sia chiaro, altrimenti chiedi pure.

Grazie.

Premetto che è sempre difficile rispondere a questo genere di richieste perché generalmente le premesse tendono a modificarsi e a dilatarsi man mano che si procede oltre.
In ogni caso, sempre se ho capito la tua richiesta, non credo si possa trovare una combinazione di formule native per dare risposta al tuo problema.
E anche ammettendo che ciò sia possibile, direi che si tratterebbe di una soluzione da non preferire perché sarebbe necessariamente ed inutilmente complessa, poco efficiente ed elegante.
Al contrario, ricorrendo a VBA e sfruttando gli eventi del foglio di lavoro è facile implementare una soluzione limitata ad una specifica cella ma anche facilmente adattabile ad una casistica più generale.
Se interessa posso organizzarmi e provare a dare qui il mio contributo.
 
Premetto che è sempre difficile rispondere a questo genere di richieste perché generalmente le premesse tendono a modificarsi e a dilatarsi man mano che si procede oltre.
In ogni caso, sempre se ho capito la tua richiesta, non credo si possa trovare una combinazione di formule native per dare risposta al tuo problema.
E anche ammettendo che ciò sia possibile, direi che si tratterebbe di una soluzione da non preferire perché sarebbe necessariamente ed inutilmente complessa, poco efficiente ed elegante.
Al contrario, ricorrendo a VBA e sfruttando gli eventi del foglio di lavoro è facile implementare una soluzione limitata ad una specifica cella ma anche facilmente adattabile ad una casistica più generale.
Se interessa posso organizzarmi e provare a dare qui il mio contributo.

Ogni contributo è apprezzato: dato che non esiste una soluzione nativa (p.es. la più banale, con la formattazione condizionale, dove non capisco perchè hanno previsto una marea di casistiche ma non quella della variazione rispetto al valore precedente della cella :rolleyes:).

Vediamo la strada del VBA quanto comprometterà le prestazioni del mio foglio Excel (alquanto complesso e già "stressato" da un DDE che aggiorna le quotazioni in RT): da esperienze passate l'affidarsi all'evento change del foglio andava ad innescare la Sub ivi iscritta un numero indesiderato (e spropositato) di volte, al punto da rallentare a dismisura le prestazioni del foglio stesso (ma magari sbagliavo io qualcosa, non riuscendo ad ottimizzare al massimo il codice).

Le specifiche mi sembrano poche e semplici, ma se avessi bisogno di qualsiasi chiarimento, non hai che da chiederlo.

Grazie della disponibilità :)
 
Ogni contributo è apprezzato: dato che non esiste una soluzione nativa (p.es. la più banale, con la formattazione condizionale, dove non capisco perchè hanno previsto una marea di casistiche ma non quella della variazione rispetto al valore precedente della cella :rolleyes:).

Vediamo la strada del VBA quanto comprometterà le prestazioni del mio foglio Excel (alquanto complesso e già "stressato" da un DDE che aggiorna le quotazioni in RT): da esperienze passate l'affidarsi all'evento change del foglio andava ad innescare la Sub ivi iscritta un numero indesiderato (e spropositato) di volte, al punto da rallentare a dismisura le prestazioni del foglio stesso (ma magari sbagliavo io qualcosa, non riuscendo ad ottimizzare al massimo il codice).

Le specifiche mi sembrano poche e semplici, ma se avessi bisogno di qualsiasi chiarimento, non hai che da chiederlo.

Grazie della disponibilità :)

Vediamo allora un primo abbozzo di soluzione per stabilire se almeno a livello di principio ed efficienza può andare.

Supponi di avere in C1 la semplice formula: = A1 + B1

Il codice seguente provvede a colorare la cella target C1 al variare dei valori in A1 e/o B1 seguendo la regola che hai dato.

Codice:
Private oldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not IsNumeric(Target.Value) Then
        Exit Sub
    End If
    If Not IsNull(oldValue) Then
        If Range("C1").Value > oldValue Then
            Range("C1").Interior.Color = vbGreen
        ElseIf Range("C1").Value < oldValue Then
            Range("C1").Interior.Color = vbRed
        Else
            Range("C1").Interior.Color = vbBlue
        End If
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldValue = Null
    If IsNumeric(Range("C1").Value) Then
        oldValue = Range("C1").Value
    End If
End Sub

All'evento SelectionChange si provvede a recuperare e memorizzare in oldValue il valore della cella C1 prima della modifica.
All'evento Change il valore di oldValue viene confrontato con quello corrente sempre in C1 per applicare la tua regola di colorazione.

Se all'evento Change hai altro codice occorre regolarsi per evitare contrapposizioni indesiderate.
 
Vediamo allora un primo abbozzo di soluzione per stabilire se almeno a livello di principio ed efficienza può andare.

Supponi di avere in C1 la semplice formula: = A1 + B1

Il codice seguente provvede a colorare la cella target C1 al variare dei valori in A1 e/o B1 seguendo la regola che hai dato.

Codice:
Private oldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not IsNumeric(Target.Value) Then
        Exit Sub
    End If
    If Not IsNull(oldValue) Then
        If Range("C1").Value > oldValue Then
            Range("C1").Interior.Color = vbGreen
        ElseIf Range("C1").Value < oldValue Then
            Range("C1").Interior.Color = vbRed
        Else
            Range("C1").Interior.Color = vbBlue
        End If
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldValue = Null
    If IsNumeric(Range("C1").Value) Then
        oldValue = Range("C1").Value
    End If
End Sub

All'evento SelectionChange si provvede a recuperare e memorizzare in oldValue il valore della cella C1 prima della modifica.
All'evento Change il valore di oldValue viene confrontato con quello corrente sempre in C1 per applicare la tua regola di colorazione.

Se all'evento Change hai altro codice occorre regolarsi per evitare contrapposizioni indesiderate.

OK, ero arrivato anche io qui con una soluzione simile e con due problemi (che ha anche la tua):
1) Funziona se tutte le celle giacciono sullo stesso foglio (spostando le celle A1 e B1 in un foglio diverso da quello della C1 non funziona), ma questo penso sia facilmente risolvibile
2) Il DDE non scatena l'evento Change del foglio (nè Worksheet_Change, nè Worksheet_SelectionChange)...e qui mi ero miseramente arenato :boh:

Altra cosa (che ti anticipo già, altrimenti poi mi ***** :D): alla fine, il risultato dovrei applicarlo ad un intervallo di celle e non ad una sola (immagino sarà semplice, una volta trovato il meccanismo).

Thks. ;)
 
OK, ero arrivato anche io qui con una soluzione simile e con due problemi (che ha anche la tua):
1) Funziona se tutte le celle giacciono sullo stesso foglio (spostando le celle A1 e B1 in un foglio diverso da quello della C1 non funziona), ma questo penso sia facilmente risolvibile
2) Il DDE non scatena l'evento Change del foglio (nè Worksheet_Change, nè Worksheet_SelectionChange)...e qui mi ero miseramente arenato :boh:

Altra cosa (che ti anticipo già, altrimenti poi mi ***** :D): alla fine, il risultato dovrei applicarlo ad un intervallo di celle e non ad una sola (immagino sarà semplice, una volta trovato il meccanismo).

Thks. ;)

Cosa intendi per "intervallo di celle"? Vuoi dire che sul foglio hai più celle, ognuna con una sua formula, e vuoi che ognuna di essa al variare del suo valore cambi colore?
Ho interpretato bene?

Se gli eventi che sono alla base del "meccanismo" non vengono sollevati direi che il problema si sposta da un'altra parte. Dovresti capire perché tali eventi non si sollevano.
 
Cosa intendi per "intervallo di celle"? Vuoi dire che sul foglio hai più celle, ognuna con una sua formula, e vuoi che ognuna di essa al variare del suo valore cambi colore?
Ho interpretato bene?

Perfettamente.

Per essere precisi il DDE "appoggia" i dati in un foglio, dal quale poi vengono recuperati in più punti di altri fogli grazie alla funzione CERCA.X; in uno di questi fogli mi piacerebbe implementare il "cambio colore" per tutte le celle che prelevano i dati dal foglio con il DDE

Se gli eventi che sono alla base del "meccanismo" non vengono sollevati direi che il problema si sposta da un'altra parte. Dovresti capire perché tali eventi non si sollevano.

Bella questione...per questo mi ero arenato con il VBA...non "sente" nè il Change, nè il SelectionChange (a dire il vero li ho provati tutti e l'unico che si attiva, sia nel foglio con il DDE che in quello derivato, è il Worksheet_Calculate)
 
Perfettamente.

Per essere precisi il DDE "appoggia" i dati in un foglio, dal quale poi vengono recuperati in più punti di altri fogli grazie alla funzione CERCA.X; in uno di questi fogli mi piacerebbe implementare il "cambio colore" per tutte le celle che prelevano i dati dal foglio con il DDE



Bella questione...per questo mi ero arenato con il VBA...non "sente" nè il Change, nè il SelectionChange (a dire il vero li ho provati tutti e l'unico che si attiva, sia nel foglio con il DDE che in quello derivato, è il Worksheet_Calculate)

Andiamo per gradi e introduciamo la limitazione di un unico foglio di lavoro.

Se i dati sono su più fogli al momento non ti so dire. Per questo ti dicevo all'inizio che è difficile rispondere perché si inizia in un modo e poi si aggiungo altri particolari. ;)

Mettiamo di voler generalizzare la prima soluzione ed estenderla al caso di n celle soggetto a ricalcolo.

Poniamo che le celle sono al momento due:
- C1 = A1 + B1
- C3 = A3 + A4

Nel primo esempio la cella C1 è utilizzata direttamente nel codice che serve per colorarla. E' evidente che essendo ora due le celle da colorare, dovrei ripetere per due volte lo stesso codice e n volte se le celle fossero n.

Penso, allora, che sia più conveniente ricorrere ad un dizionario perché permette di indicizzare questi valori e quindi di riferirsi via via a ciascuna cella all'interno di un ciclo iterativo. In questo modo posso riutilizzare lo stesso codice per trattare tutte le n diverse celle.

Per memorizzare i valori, invece, è utile un vettore con la stessa dimensione del dizionario.

Ho così riscritto l'esempio precedente ipotizzando due celle da colorare.

Ho aggiunto un evento Activate dove dichiarare e inizializzare il dizionario e il vettore dei valori.

Codice:
Private Sub Worksheet_Activate()
    Dim i As Long
    
    Set Diz = CreateObject("Scripting.Dictionary")
    i = i + 1: Diz.Add i, "C1"
    i = i + 1: Diz.Add i, "C3"
    ReDim oldValue(Diz.Count)
End Sub

Di conseguenza, gli eventi Change e SelectionChange sono stati riscritti con all'interno il ciclo sul dizionario.

In definitiva, l'intera procedura è nel dettaglio questa:

Codice:
Option Explicit
Option Base 1

Private oldValue() As Variant
Private Diz As Object

Private Sub Worksheet_Activate()
    Set Diz = CreateObject("Scripting.Dictionary")
    Diz.Add 1, "C1"
    Diz.Add 2, "C3"
    ReDim oldValue(Diz.Count)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    
    If Not IsNumeric(Target.Value) Then
        Exit Sub
    End If
    For i = 1 To Diz.Count
        If Not IsNull(oldValue(i)) Then
            If Range(Diz(i)).Value > oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbGreen
            ElseIf Range(Diz(i)).Value < oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbRed
            End If
        End If
    Next i
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Long
    For i = 1 To Diz.Count
        oldValue(i) = Null
        If IsNumeric(Range(Diz(i)).Value) Then
            oldValue(i) = Range(Diz(i)).Value
        End If
    Next
End Sub

Per aggiungere ulteriori celle da colorare basta semplicemente aggiungerle nell'evento Activate, allungando la lista degli .Add.

A esempio, volendo aggiungere le celle J1 e J2, l'evento Activate diventerebbe:

Codice:
Private Sub Worksheet_Activate()
    Dim i As Long
    
    Set Diz = CreateObject("Scripting.Dictionary")
    i = i + 1: Diz.Add i, "C1"
    i = i + 1: Diz.Add i, "C3"
    i = i + 1: Diz.Add i, "J1"
    i = i + 1: Diz.Add i, "J2"
    ReDim oldValue(Diz.Count)
End Sub

e così via.

P.S.: Ho tolto il colore Blue perché questa eventualità crea problemi a più livelli.
 
Andiamo per gradi e introduciamo la limitazione di un unico foglio di lavoro.

Se i dati sono su più fogli al momento non ti so dire. Per questo ti dicevo all'inizio che è difficile rispondere perché si inizia in un modo e poi si aggiungo altri particolari. ;)

Mettiamo di voler generalizzare la prima soluzione ed estenderla al caso di n celle soggetto a ricalcolo.

Poniamo che le celle sono al momento due:
- C1 = A1 + B1
- C3 = A3 + A4

Nel primo esempio la cella C1 è utilizzata direttamente nel codice che serve per colorarla. E' evidente che essendo ora due le celle da colorare, dovrei ripetere per due volte lo stesso codice e n volte se le celle fossero n.

Penso, allora, che sia più conveniente ricorrere ad un dizionario perché permette di indicizzare questi valori e quindi di riferirsi via via a ciascuna cella all'interno di un ciclo iterativo. In questo modo posso riutilizzare lo stesso codice per trattare tutte le n diverse celle.

Per memorizzare i valori, invece, è utile un vettore con la stessa dimensione del dizionario.

Ho così riscritto l'esempio precedente ipotizzando due celle da colorare.

Ho aggiunto un evento Activate dove dichiarare e inizializzare il dizionario e il vettore dei valori.

Codice:
Private Sub Worksheet_Activate()
    Dim i As Long
    
    Set Diz = CreateObject("Scripting.Dictionary")
    i = i + 1: Diz.Add i, "C1"
    i = i + 1: Diz.Add i, "C3"
    ReDim oldValue(Diz.Count)
End Sub

Di conseguenza, gli eventi Change e SelectionChange sono stati riscritti con all'interno il ciclo sul dizionario.

In definitiva, l'intera procedura è nel dettaglio questa:

Codice:
Option Explicit
Option Base 1

Private oldValue() As Variant
Private Diz As Object

Private Sub Worksheet_Activate()
    Set Diz = CreateObject("Scripting.Dictionary")
    Diz.Add 1, "C1"
    Diz.Add 2, "C3"
    ReDim oldValue(Diz.Count)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    
    If Not IsNumeric(Target.Value) Then
        Exit Sub
    End If
    For i = 1 To Diz.Count
        If Not IsNull(oldValue(i)) Then
            If Range(Diz(i)).Value > oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbGreen
            ElseIf Range(Diz(i)).Value < oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbRed
            End If
        End If
    Next i
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Long
    For i = 1 To Diz.Count
        oldValue(i) = Null
        If IsNumeric(Range(Diz(i)).Value) Then
            oldValue(i) = Range(Diz(i)).Value
        End If
    Next
End Sub

Per aggiungere ulteriori celle da colorare basta semplicemente aggiungerle nell'evento Activate, allungando la lista degli .Add.

A esempio, volendo aggiungere le celle J1 e J2, l'evento Activate diventerebbe:

Codice:
Private Sub Worksheet_Activate()
    Dim i As Long
    
    Set Diz = CreateObject("Scripting.Dictionary")
    i = i + 1: Diz.Add i, "C1"
    i = i + 1: Diz.Add i, "C3"
    i = i + 1: Diz.Add i, "J1"
    i = i + 1: Diz.Add i, "J2"
    ReDim oldValue(Diz.Count)
End Sub

e così via.

P.S.: Ho tolto il colore Blue perché questa eventualità crea problemi a più livelli.


....come si sul dire...l'affare si ingrossa :D

Ora stacco per una salutare passeggiata all'aria aperta e domani provo la nuova release ;)

Intanto grazie ancora :bye:
 
Sorry, mi sono accorto che l'ultimo codice che ho postato non è quello che avrei dovuto inviare.

Anzitutto eliminare sia la dichiarazione delle variabili che l'evento Activate.

Creare un Modulo e aggiungervi questo codice:

Codice:
Public oldValue() As Variant
Public Diz As Object

Public Sub Init()
    Dim i As Long
    
    Set Diz = CreateObject("Scripting.Dictionary")
    i = i + 1: Diz.Add i, "C1"
    i = i + 1: Diz.Add i, "C3"
    i = i + 1: Diz.Add i, "J1"
    i = i + 1: Diz.Add i, "J2"
    ReDim oldValue(Diz.Count)
End Sub

Richiamare la routine Init del modulo utilizzando l'evento Open della cartella di lavoro:

Codice:
Private Sub Workbook_Open()
    Call Init
End Sub

In questo modo il codice per il foglio di lavoro risulta essere solo questo:

Codice:
Option Explicit
Option Base 1

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long

    If Not IsNumeric(Target.Value) Then
        Exit Sub
    End If
    For i = 1 To Diz.Count
        If Not IsNull(oldValue(i)) Then
            If Range(Diz(i)).Value > oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbGreen
            ElseIf Range(Diz(i)).Value < oldValue(i) Then
                Range(Diz(i)).Interior.Color = vbRed
            End If
        End If
    Next i
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Long
    
    For i = 1 To Diz.Count
        oldValue(i) = Null
        If IsNumeric(Range(Diz(i)).Value) Then
            oldValue(i) = Range(Diz(i)).Value
        End If
    Next
End Sub

Si tratta, quindi, dello stesso codice organizzato in modo diverso.
 
Ultimo aggiornamento.

Ho modificato il file e adesso è possibile avere i dati anche su fogli diversi.

Ho dovuto cambiare il formato del nome delle celle da colorare nella sub Init del modulo, in modo da poter incorporare anche il nome del foglio a cui ogni cella appartiene.

Ad esempio, volendo colorare la cella C1 del Foglio2 e la cella C2 del Foglio1, questo è ora il codice richiesto:

Codice:
    i = i + 1: Diz.Add i, "Foglio2!C1"
    i = i + 1: Diz.Add i, "Foglio1!C2"

Fare attenzione ad utilizzare sempre un punto esclamativo (!) per separare il foglio dalla cella.

Per poter gestire questo nuovo formato è cambiato logicamente il codice negli eventi.

Questo codice, adesso, non si trova più nei singoli fogli, ma l'ho spostato nel Modulo in modo da centralizzarlo per poterlo riutilizzare in tutti i fogli.

In questo modo, quindi, non bisogna riportare in ciascun foglio il codice per i due eventi, ma soltanto la chiamata alle due routine poste nel Modulo.

Cioè, in ogni foglio è necessario mettere il codice:

Codice:
Private Sub Worksheet_Change(ByVal Target As Range)
    Call SheetChange(Target)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call SheetSelectionChange(Target)
End Sub

in modo da richiamare le due routine scritte una volte per tutte nel Modulo.

Per chiarezza allego il file ColorCells.xlsm
 
Ultimo aggiornamento.

Ho modificato il file e adesso è possibile avere i dati anche su fogli diversi.

Ho dovuto cambiare il formato del nome delle celle da colorare nella sub Init del modulo, in modo da poter incorporare anche il nome del foglio a cui ogni cella appartiene.

Ad esempio, volendo colorare la cella C1 del Foglio2 e la cella C2 del Foglio1, questo è ora il codice richiesto:

Codice:
    i = i + 1: Diz.Add i, "Foglio2!C1"
    i = i + 1: Diz.Add i, "Foglio1!C2"

Fare attenzione ad utilizzare sempre un punto esclamativo (!) per separare il foglio dalla cella.

Per poter gestire questo nuovo formato è cambiato logicamente il codice negli eventi.

Questo codice, adesso, non si trova più nei singoli fogli, ma l'ho spostato nel Modulo in modo da centralizzarlo per poterlo riutilizzare in tutti i fogli.

In questo modo, quindi, non bisogna riportare in ciascun foglio il codice per i due eventi, ma soltanto la chiamata alle due routine poste nel Modulo.

Cioè, in ogni foglio è necessario mettere il codice:

Codice:
Private Sub Worksheet_Change(ByVal Target As Range)
    Call SheetChange(Target)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call SheetSelectionChange(Target)
End Sub

in modo da richiamare le due routine scritte una volte per tutte nel Modulo.

Per chiarezza allego il file ColorCells.xlsm

Buongiorno :)

Spero tu abbia tirato mezzanotte non a causa mia...:eek:

Cmq il lavoro è ottimo e funziona, bravo! OK!

Resta purtroppo il problema iniziale: il DDE non solleva il trigger dell'evento :mad:

Ho collegato le celle C2 e C3 del foglio2 ad un foglio3 con le quotazioni prese con il DDE: per la cella C2 "aspetto" la variazione del DDE, mentre per la C3 forzo manualmente nel foglio3 il valore della corrispondente cella, con il risultato che quando nel foglio3 varia la cella collegata alla C2, questa cambia il valore (ma non il colore), mentre quando vario manualmente la cella collegata alla C3 nel foglio3, allora nel foglio2 variano entrambi i valori (ovviamente) ma anche i colori (quella della cella collegata automaticamente e quella manualmente), perchè la variazione manuale "scatena" i triggers sia della C2 che della C3

Non so se è chiara la prova che ho fatto, comunque testimonia che tutto funziona, ma non con il DDE collegato all'evento Change; non so se e come sia possibile collegare il cambio colore all'evento Calculate (l'unico che pare "sentire") :mmmm:

Thks :)
 
Buongiorno :)

Spero tu abbia tirato mezzanotte non a causa mia...:eek:

Cmq il lavoro è ottimo e funziona, bravo! OK!

Resta purtroppo il problema iniziale: il DDE non solleva il trigger dell'evento :mad:

Ho collegato le celle C2 e C3 del foglio2 ad un foglio3 con le quotazioni prese con il DDE: per la cella C2 "aspetto" la variazione del DDE, mentre per la C3 forzo manualmente nel foglio3 il valore della corrispondente cella, con il risultato che quando nel foglio3 varia la cella collegata alla C2, questa cambia il valore (ma non il colore), mentre quando vario manualmente la cella collegata alla C3 nel foglio3, allora nel foglio2 variano entrambi i valori (ovviamente) ma anche i colori (quella della cella collegata automaticamente e quella manualmente), perchè la variazione manuale "scatena" i triggers sia della C2 che della C3

Non so se è chiara la prova che ho fatto, comunque testimonia che tutto funziona, ma non con il DDE collegato all'evento Change; non so se e come sia possibile collegare il cambio colore all'evento Calculate (l'unico che pare "sentire") :mmmm:

Thks :)

Buongiorno a te.
Anzitutto grazie per l'apprezzamento e tranquillo, io faccio tardi la notte proprio di mio! :D
Sicuramente ci sarà qualcosa da affinare, come sempre in questo lavoro, ma spero sia in qualche modo utile.
Capisco il problema degli eventi che non si sollevano, ma per capirci qualcosa dovei poter replicare la tua stessa situazione.
L'evento Calculate non credo possa esserti di aiuto, almeno in questo caso, perché è privo di parametri e non è temporalmente adatto per fare il backup dei valori correnti delle celle da colorare.
 
Indietro