L'evento change

Storico discussioni

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

Cognolato Studio © 2005