Evento OnChange Macro

  • Attivare una macro di Linda 84
    E' possibile lanciare una macro in modo automatico
    quando il valore in una cella cambia ?
    grazie .
    questo sito e' una bomba,complimenti.

    Lancio di macro di Big ronnie
    Ciao linda,tu vuoi che la macro parta ad ogni cambiamento di una qualsiasi cella o ad ogni cambiamento di una cella ben definita(cioè ogni volta che cambia per es. la cella "a1"?

    Esattamente di Linda 84
    Esattamente quando una cella esemp a1 cambia o
    raggiunge un certo valore naturalmente mentre
    cio non accade si deve poter continuare a lavovare sul foglio.
    grazie big ronnie.

    di Big ronnie
    Ciao linda,ti invio tre piccole routine che dovrebbero fare al caso tuo,provale e poi fammi sapere.
     
    Inserisci questa macro nell'editor vba del foglio dove è la cella che deve cambiare
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Ad ogni cambiamento di range("a1") viene eseguita la macro COLORE
    Set Target = Range("a1")
    If Target <> Cambio Then Colore
    Set Target = Nothing
    End Sub
    
    inserisci questa nell'editor vba in Thisworkbook:
    
    Sub Workbook_Open()
    'ogni volta che si apre il file questa macro assegna il valore di range("a1") alla variabile Cambio
    CambiamentoCella
    End Sub
    
    e quest'ultima in modulo1:
    
    Sub CambiamentoCella()
    If Cambio = "" Then Cambio = 0
    Cambio = Range("a1")
    End Sub
    Sub Colore()
    Range("b1").Interior.ColorIndex = 3
    End Sub
    
    Come esempio ad ogni cambiamento della cella "A1" faccio partire la macro COLORE.

    Correzione codice di Big ronnie
    Scusami linda ho sbagliato codice.usa questo nuovo codice.
     
    nell'editor del foglio:
    
    Sub Worksheet_Change(ByVal Target As Range)
    If Cambio <> Range("a1") Then Colore
    CambiamentoCella
    End Sub
    
    In Thisworkbook:
    
    Sub Workbook_Open()
    CambiamentoCella
    End Sub
    
    Nel Modulo1:
    
    Public Cambio
    Sub CambiamentoCella()
    If Cambio = "" Then Cambio = 0
    Cambio = Range("a1")
    End Sub
    Sub Colore()
    Range("b1").Interior.ColorIndex = 3
    End Sub
    

    Booooom!!!!!! di Linda84
    Perfetta big ronnie grazie!!!
    la tua risposta mi apre un mondo da scoprire.

    Buon ferragosto a a big ronnie e a tutti di Linda 84
    Il codice che mi a postato big ronnie funzionano benissimo per lanciare una sub da una condizione legata ad una cella,e dopo averci lavorato e studiato non ho trovato il metodo per lanciarne un altra legandola alla codizione di un altra cella.
    in questo esemoio se il valore della clla f9 aumenta cancello il contenuto di q9
    come posso fare per cancellare il contenuto
    di q10 se il valore della cella f10 aumenta?
     
    Sub Worksheet_Change(ByVal Target As Range)
    a=1
    If Cambio > Range("a1") Then Colore
    CambiamentoCella
    End Sub
    
    
    Sub Workbook_Open()
    CambiamentoCella
    End Sub
    
    
    
    Public Cambio
    Sub CambiamentoCella()
    If Cambio = "" Then Cambio = 0
    Cambio = Range("f9")
    End Sub
    Sub Colore()
     Range("q9").Select
        Selection.ClearContents
    End Sub
    
    

    Lampeggio celle di Big ronnie
    Ciao linda, ti invio del codice sperando faccia al caso tuo,eventualmente descrivi il tuo problema nella sua totalità così eviteremo di compilare codice che poi non serve.nel codice c'è un ampia descrizione di ciò che fanno le macro.ciao
     
    nel Foglio1
    
    Sub Worksheet_Change(ByVal Target As Range)
    If ContenutoCella = "" Then ContenutoCella = 0
    'Se il contenuto della cella "F" (dalla Numero 1 a 20 vedi ciclo FOR nella Routine sottostante) CAMBIA _
     allora questa chiama l'altra macro chiamata COLORE e assegna il nuovo valore alla variabile ContenutoCella. _
     Io ho selezionato le prime venti Celle di "F",ma questo valore lo devi adattare tu alle tue esigenze.
    If ContenutoCella <> Range(Cella) Then
        Colore 'Macro Modulo 1
        ContenutoCella = Range(Cella) 'Nuovo Assegnamento
    End If
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set a = Application.ActiveCell 'Variabile Oggetto Cella Attiva
    For I = 1 To 20
    'Se la cella selezionata è tra le prime 20 della colonna "F" allora assegno il contenuto della cella _
     attiva alla variabile globale "ContenutoCella" e il riferimento alla variabile globale "Cella".Infine _
     assegno il Numero Di riga (  "I" sempre della cella attiva) alla variabile globale "NumeroRiga" che _
     mi servirà nella macro Colore.Le variabili globali sono dichiarate nel MODULO 1.
    If a.Address(rowabsolute:=False, columnabsolute:=False) = "F" & CStr(I) Then
    ContenutoCella = Range("F" & I) 'CONTENUTO
    Cella = a.Address(rowabsolute:=False, columnabsolute:=False) 'RIFERIMENTO(esempio: F18)
    NumeroRiga = I 'NUMERO DI RIGA
    End If
    Next I
    End Sub
    
    in thisworkbook
    
    Sub Workbook_Open()
    Cella = "A1" ' Assegno un riferimento qualsiasi alla Variabile Cella per evitare un errore.
    End Sub
    
    nel modulo 1
    
    'Variabili Globali
    Public ContenutoCella
    Public Cella As String
    Public NumeroRiga
    Sub Colore()
    Worksheets(1).Range("Q" & NumeroRiga).Clear
    End Sub
    
    

    di Linda84
    Solo ieri sera ho potuto leggere la tua post
    ho studito il tuo codice che funziona perfettamente e grazie alle
    tue spiegazioni oggi ne so piu' di ieri.
    questo codice pero' a differenza del primo prevede che la cella soggetta a camdiamento
    sia selezionata mentrenel mio caso il valore che cambia e' inserito da un altra applicazione
    presumo in c++che li riceve via web.
    comunque presumo che mi sara' uile in determinate condizioni.
    nel frattempo ho lavorato sul tuo primo codice che ho adattato semplicemente ripetendo per n volte come ti posto .
    poi visto ce funzionava anche troppo bene in autoatico, mi e' venuta l'esigenza di insetire un controllo che attiv0 con un pulsante manuale
    e funziona perfettamente.
    poi (l'appetito vien mangiando)ho inserito un codice ce dopo aver fatto il suo lavoro
    si rimettesse nulla condizione di blocco e aspetta lo sblocco manuale.
    anche questa fonziona ma per qualche secando lo schermo balla e qualche volta si blocca lo stack.

    il controllo lo effettuo tramite il valore in due celle aa5 ab5
    ab5 fissa cotiene 2 aa5 se contiene 2 blocca se 1 sblocca.

    che caos ho combinato?grazie ancora big ronnie.
     
    Sub Worksheet_Change(ByVal Target As Range)
    
    
    If Cambio5 < Range("f5") Then banca5
    CambiamentoCella5
    
    
    If Cambio6 < Range("f6") Then banca6
    CambiamentoCella6
    
    
    Sub Workbook_Open()
    CambiamentoCella5
    CambiamentoCella6
    
    
    
    Public Cambio5
    
    Sub CambiamentoCella5()
    If Cambio5 = "" Then Cambio5 = 0
    Cambio5 = Range("f5")
    End Sub
    Sub banca5()
    a = Range("aa5").Value
    
    B = Range("ab5").Value
    
    If a = B Then
    
    Exit Sub
    
    Else

    Aaaaa di Linda84
    Scusa
     
    Public Cambio5
    
    Sub CambiamentoCella5()
    If Cambio5 = "" Then Cambio5 = 0
    Cambio5 = Range("f5")
    End Sub
    Sub banca5()
    a = Range("aa5").Value
    
    B = Range("ab5").Value
    
    If a = B Then
    
    Exit Sub
    
    Else
    
     Range("Q5").Select
        Selection.ClearContents
      End If
    
         Range("Aa5").Select
         Selection.ClearContents
        ActiveCell.FormulaR1C1 = "2"
        Range("Q5").Select
        With Selection.Interior
            .ColorIndex = 34
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
     Exit Sub
     

    di Big ronnie
    Ciao linda,il problema sta nel richiamare la cella "q5" dopo la fine del ciclo if.questo genera dinuovo l'evento change.ti mando il codice con delle modifiche vedi se fà per te.comunque c'è un post interessante per te di chric "esecuzione automatica macro" del 30-08-06, dovrebbe semplificare ciò che stai facendo.
     
    Nel modulo1:
    
    
    Public Cambio5
    Public cambio6
    Sub CambiamentoCella5()
    If Cambio5 = "" Then Cambio5 = 0
    Cambio5 = Range("f5")
    End Sub
    Sub CambiamentoCella6()
    If cambio6 = "" Then cambio6 = 0
    cambio6 = Range("f6")
    End Sub
    Sub banca5()
    a = Range("aa5").Value
    B = Range("ab5").Value
    If a = B Then
      Exit Sub
    Else
     Range("Q5").Select
      Selection.ClearContents
        With Selection.Interior
            .ColorIndex = 34
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
       End With
            Range("Aa5") = 2
    End If
    End Sub
    Sub banca6()
    a = Range("aa6").Value
    B = Range("ab6").Value
    If a = B Then
      Exit Sub
    Else
     Range("Q6").Select
      Selection.ClearContents
        With Selection.Interior
            .ColorIndex = 34
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
       End With
            Range("Aa6") = 2
    End If
     End Sub