rilevare cambio di alcune celle



  • rilevare cambio di alcune celle
    di sabotto (utente non iscritto) data: 28/10/2014 14:19:26

    Ho una cartella con vari fogli.
    In uno di essi (supponiamo Foglio1), appena vario a mano un valore di una delle celle deve partire una Macro1 che mi aggiorna altre celle (es: Z1,Z2) dello stesso foglio. Per fare cio ho intercettato l'evento Workbook.SheetChange

    Nel Foglio2 ho una serie di celle dove dentro c'è una mia funzione che è influenzata dalle celle di cui sopra (Z1, Z2) per cui, con Application.Volatile le ho sempre aggiornate.

    Ma, sempre nel Foglio2 ho altre celle (es: X1,X2) che sono valorizzate da una macro che prende i valori delle celle che hanno la mia funzione e fa delle cose.

    Quindi riepilogando quando a mano cambio un valore del Foglio1, a cascata si modificano anche Z1,Z2 di Foglio1 e X1,X2 di Foglio2

    Io Vorrei che la macro di Foglio2 partisse appena una delle celle X1, X2 cambiano.

    Ma come posso fare, avendo già "impegnato" l'evento per la prima macro?
    Allego il codice dell'evento

     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
        
        Dim CelleScatenanti As Range
    
        ' La variable CelleScatenanti contiene l'intervallo di celle che
        'causeranno il lancio di Macro1 quando esse varieranno
        
        'Se il foglio che si sta variando è uno tra 1:3
        If InStr(1, "1 2 3", Sh.Name) Then
            
            Set CelleScatenanti = Range("C8:D9,C13:D14,C18:D19") '
            If Not Application.Intersect(CelleScatenanti, Range(Source.Address)) Is Nothing Then
    
                ' Lancia l'apposita macro 
                Macro1
                
           End If
       
       End If
    
    
    
    End Sub



  • di Lucas87 data: 28/10/2014 14:53:31

    Ciao
    Aggiungi un if che controlla se la cella modificata corrisponde a X1 o X2 del foglio2 e avvii la macro
     
    If Sh.Index = 2 And Target.Address(0, 0) = "X1" Or Target.Address(0, 0) = "X2" Then
        richiama_tua_macro
    End If
    



  • di sabotto (utente non iscritto) data: 28/10/2014 16:19:17

    Il problema è che avevo gia fatto cosi ma l'evento non scatta due volte (intendo sia per il variare di alcune celle che per quelle che variano per conseguenza.)
    Mi rendo conto che non sono stato chiaro, allora allego un file semplicissmo di test dove si capisce molto meglio cio che voglio dire.
    Grazie



  • di sabotto (utente non iscritto) data: 28/10/2014 16:25:05

    Chiedo scusa non considerate il primo file è sbagliato. Tra un attimo allego quello giusto



  • di Sabotto (utente non iscritto) data: 28/10/2014 16:33:38

    File di test corretto: Prva Sabo1
    Grazie



  • di sabotto (utente non iscritto) data: 28/10/2014 16:37:07

    In pratica nel file di esempio la Macro2 non viene eseguita mai, pur essendo inserita nelle chiamate di Workbook.SheetChange.



  • di Lucas87 data: 28/10/2014 16:43:30

    A me funzionano tutte e 2



  • di sabotto (utente non iscritto) data: 28/10/2014 16:49:23

    Cioè, inserendo un valore nella cella A2 del Foglio1 ti ritrovi il valore nella cella G2 del Foglio2?
    Se si ed hai Excel 2007 allora forse c'è qualche settaggio da impostare?



  • di scossa data: 28/10/2014 17:11:59

    @sabotto: secondo me, al di là del funzionare o meno, fai un errore di base nell'impostazione della tua UDF, e cioè di non passarle, come argomento, il range a cui "attingere".



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di sabotto (utente non iscritto) data: 28/10/2014 17:14:06

    Ho provato una cosa banalisima.
    in cella A1 ho messo un numero e nelle colonne successive la formula cella precedente per 2
    quindi B1 = A1*2
    C1 = B1*2
    D1 = C1*2
    e cosi via
    quindi variando la prima cella A1 variano tutte di conseguenza.
    Nell'evento Workbook_SheetChange ho messo solo l'istruzione
    Debug.Print Source.Address
    Per vedere se viene richiamato l'evento per ogni cella che varia e invece nella fnestra immediata ho trovato solo l'indirizzo della A1, quindi solo della cella il cui valor è digitato da me manualmente mentre non rileva tutte le altre celle che variano di conseguenza.
    Che diavolo puo essere allora?



  • di sabotto (utente non iscritto) data: 28/10/2014 17:19:27

    scosa@: scusa ma non ho capito, puoi spiegarmi?
    Comunque la mia UDF è una funzione che cicla un dato foglio passatoi come paramentro e mi restituisce un dato da essi in base ad una serie di logiche, in effetti io gli passo i parametri per dirgli dove deve andare a pescare, quei ho fatto solo un esempio.
    Ma probabilmente o meglio sicuramente, non ho capito cosa volevi intendere



  • di scossa data: 28/10/2014 19:14:05

    cit. sabotto: "Per vedere se viene richiamato l'evento per ogni cella che varia e invece nella fnestra immediata ho trovato solo l'indirizzo della A1, quindi solo della cella il cui valor è digitato da me manualmente mentre non rileva tutte le altre celle che variano di conseguenza.
    Che diavolo puo essere allora?
    "

    Semplicemente perché il cambiamento del risultato di una formula non scatena l'evento Change.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di scossa data: 28/10/2014 19:37:30

    cit. sabotto: "Comunque la mia UDF è una funzione che cicla un dato foglio passatoi come paramentro e mi restituisce un dato da essi in base ad una serie di logiche, in effetti io gli passo i parametri per dirgli dove deve andare a pescare, quei ho fatto solo un esempio"

    Senza il file reale è inutile fare esempi, anche perché il file di esempio che hai postato è del tutto privo di senso e fine a se stesso.

    P.S.: mi spieghi perché cambi i nomi delle variabili nelle routine di evento:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)

    l'originale Target ti suona male?




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di sabotto data: 28/10/2014 23:38:46

    Il cambio del nome del parametro Target con Source non l'ho fatto io, me lo trascino dietro da vari copia e incolla. Onestamente solo ora che me lo hai fatto notare tu c'ho fatto caso. Trovai tempo fa il codice gia scritto e me lo sono portato cosi, non c'è nessun motivo.
    Per il problema iniziale alla fine ho risolto mettendo un bottone che chiama la macro.
    Penso si possa chiudere
    Grazie a tutti