Il mio suggerimento e' che lo fai con una macro "On Time" che ogni N secondi controlla se sul foglio di importazione ci sono delle celle che differiscono da quanto riportato su un "foglio replica" (che deve gia' esistere):
La macro da mandare in esecuzione ogni N secondi e' questa:
- Codice: Seleziona tutto
Public myNext As Date 'IN TESTA AL MODULO
Sub HighL()
Dim DDESh As Worksheet, Shadw As Worksheet, myC As Range, myCVal
Dim myFl As Boolean, myDiff As String
'
Set DDESh = Sheets("Foglio1") '<<<1 il foglio con i link
Set Shadw = Sheets("1shad") '<<<2 il foglio "replica"
'
myDiff = Format(Now, "hh:mm:ss") & vbCrLf
For Each myC In DDESh.Range("B5:B55")
myCVal = myC.Value
If IsNumeric(myCVal) And myCVal <> 0 Then
If Abs((myCVal - Shadw.Range(myC.Address).Value) / myCVal) > 0.1 Then '***
myFl = True
myDiff = myDiff & myC.Address & ", " '+++
End If
Shadw.Range(myC.Address).Value = myCVal
End If
Next myC
If myFl Then
If Len(myDiff) > 200 Then myDiff = Left(myDiff, 200) & "...."
UserForm1.Show vbModeless
UserForm1.Label1.Caption = myDiff
Else
Unload UserForm1
End If
End Sub
Va inserita in un Modulo standard; le due istruzioni marcate <<< vanno adattate al tuo caso.
Il "foglio replica" deve gia' esistere, e corrispondere a quando indicato nella riga marcata <<<2.
Le condizioni per cui si innesca la segnalazione e' codificata nell'istruzione marcata *** (ora scatta quando un valore cambia oltre il 10% del precedente valore); il tipo di messaggio segnalato e' codificato nell'istruzione marcata +++ (ora viene segnalato l'indirizzo di cella)
All'inizio, quando avvii per la prima volta l'esecuzione della Sub HighL e' meglio che il foglio replica sia vuoto, salvo che nei primi cicli rapidamente esso verra' allineato al foglio principale (questo provochera' alcune segnalazioni probabilmente improprie nel primo minuto di esecuzione).
Per avviare l'esecuzione automatica della macro:
Dopo il codice della Sub HighL aggiungi questa macro:
- Codice: Seleziona tutto
Sub Avvio()
Call HighL
myNext = Now + TimeSerial(0, 0, 10) '### Riesegui tra 10 secondi
Application.OnTime myNext, "Avvio"
End Sub
Per rieseguire piu' spesso /meno spesso cambia l'istruzione marcata ###
Nel modulo "Questa_Cartella_di_Lavoro" inserire
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("1shad").Cells.ClearContents
Call Avvio
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime myNext, "Avvio", , False
End Sub
Infine devi inserire nel tuo file una userform1 contenente una sola "Label", che sara' usata per le segnalazioni. Il tempo minimo di persistenza del messaggio e' pari al ritardo di riesecuzione della Sub HighL, nel senso che alla prossima riesecuzione il messaggio potra' scomparire (non ci sono variazioni superiori alle soglie impostate) o si aggiornera' (se nel frattempo ci sono state variazioni).
Dopo che hai fatto tutto cio' puoi controllare il funzionamento del tutto avviando "a mano" piu' volte la Sub HighL.
Infine salvi il file, lo chiudi e lo riapri: l'esecuzione della Sub HighL avverra' periodicamente (secondo il ritardo impostato nella Sub Avvio) fino alla chiusura del file.
Ciao