Condividi:        

lancio di macro al cambiamento di cella con lista

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

lancio di macro al cambiamento di cella con lista

Postdi g.poncina » 12/06/10 06:41

Ciao a tutti ed eccomi di nuovo nel forum.
Qualcuno mi sa dire come lanciare una macro al cambiamento del valore di una cella contenente una lista in un foglio di lavoro?
So che esiste l'evento change o selection change ma vorrei capire come funziona.
Grazie
g.poncina
Utente Junior
 
Post: 13
Iscritto il: 05/05/10 13:54

Sponsor
 

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 12/06/10 17:55

Se vuoi sapere come funziona l' evento Change, guarda l' help on line del vba alla voce "Evento Change (Excel)"
Se vuoi sapere come fare, ad esempio usa una macro come questa:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub     '<<<< USA IL VERO INDIRIZZO, in questo formato
Application.EnableEvents = False
Call LaTuaMacro
Application.EnableEvents = True
End Sub
Tasto dx sul tab col nome del foglio di cui vuoi intercettare il Change, scegli Visualizza codice, copia il codice e incollalo nel frame di dx.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi g.poncina » 15/06/10 18:32

ok grazie, ma se il range dei valori target delle celle da cambiare è composto da diverse celle (e non tutte unite)ed io volessi far partire la macro posso usare gli operatori or o and ??
Per capirci meglio se volessi far partire la macro quando uno dei valori presenti in celle diverse (es A1, C3,F5)cambia come devo impostare l'evento change?
grazie per la collaborazione
g.poncina
Utente Junior
 
Post: 13
Iscritto il: 05/05/10 13:54

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 15/06/10 23:51

Ad esempio:
Codice: Seleziona tutto
If Application.Intersect(Range("A1, C3, F5"), ActiveCell) Is Nothing Then Exit Sub

Ovviamente poi nella macro che segue, se le azioni da compiere sono differenziate a seconda di quale cella e' cambiata, userai Target.Address per meglio identificare la cella che ha scatenato l' evento.

Ciao

Edit del 18-6-2010
L' istruzione e' SBAGLIATA: invece di ActiveCell va usato Target.
Scusate...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi g.poncina » 16/06/10 17:23

Bene, quindi nel caso in cui ho delle celle non contigue contenenti liste(elenco a convalida) posso utilizzare il tuo esmpio per lanciare la macro ad ogni cambiamento di voce selezionato in una delle celle?
Ti ringrazio vivamente e mi congratulo con tutti voi.
Ciao
g.poncina
Utente Junior
 
Post: 13
Iscritto il: 05/05/10 13:54

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 17/06/10 02:37

SI, ma se non provi e riprovi impari poco...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi g.poncina » 17/06/10 15:06

Grazie del consiglio che comunque avevo già utilizzato prima di porre il quesito nel forum.
Tuttavia durante le varie prove con l'evento worksheep Change ho riscontrato qualche problemino.
Infatti non riesco a far generare l'evento nello stesso foglio per il cambiamento di alcune celle contigue(con una macro corrispondente) e il lancio di una macro per altre celle non contigue.
Mi spiego: quando cambia il valore delle celle es A1:A4 si avvia una sequenza di operazioni che scopre delle colonne nascoiste del foglio, copia dei dati in altre celle definite e rinasconde le colonne, mentre quando cambio i valori C2, D3, F4 si avvia una macro che aggiorna delle liste.
La macro per l'aggiornamento mi riesce ma quando unisco le 2 cose non ottengo alcun risultato.
g.poncina
Utente Junior
 
Post: 13
Iscritto il: 05/05/10 13:54

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 18/06/10 01:18

Quando con lo stesso evento devi attivare procedure diverse a seconda della cella che ha innescato l' evento allora e' evidente che le cose si complicano.
Una possibile soluzione, disottimizzata ma concettualmente semplice da realizzare, e' quella di inserire le possibili azioni in macro a se' stanti e poi richiamare la macro voluta a seconda della cella di partenza. Del tipo:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then Call Macro1
If Target.Address = "$A$2" Then Call Macro1
If Target.Address = "$A$3" Then Call Macro1
If Target.Address = "$A$4" Then Call Macro1
If Target.Address = "$C$2" Then Call Macro2
If Target.Address = "$D$3" Then Call Macro2
'etc etc
Application.EnableEvents = True
End Sub
Ovviamente questo e' fattibile quando hai "non tantissime" celle da verificare.
In alternativa devi usare altre logiche, quali il numero di riga, o di colonna, o "Intersect", And, Or, Not (nelle giuste dosi...) per determinare il gruppo a cui appartiene la cella cambiata e di conseguenza la macro da lanciare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi g.poncina » 18/06/10 10:10

Intuivo la difficoltà, comunque potresti farmi un esempio o linkarmi qualche caso già visto(io ho provato senza esito con intersect) con 2 gruppi di celle da abbinare a macro diverse ?
Ti ringrazio vivamente ciao
g.poncina
Utente Junior
 
Post: 13
Iscritto il: 05/05/10 13:54

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 18/06/10 19:00

Ad esempio
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Range1="A1:A4"
Range2= "A1, C3, F5"
If Not Application.Intersect(Range(Range1), Target) Is Nothing Then Call Macro1
If Not Application.Intersect(Range(Range2), Target) Is Nothing Then Call Macro2
Application.EnableEvents = True
End Sub

Tenete presente che l' esempio dove uso Application.Intersect(Range("A1, C3, F5"), ActiveCell) E' SBAGLIATO: invece di ActiveCell va usato Target.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi zio_tom » 17/09/15 17:28

Il Worksheet_Change non mi funziona se punto ad una cella il cui valore cambia mediante "Casella di controllo modulo" (vero e falso)
provato con funzione "se(a1;1;0)"
Non entra proprio nella SUB Worksheet_Change, non vede il cambiamento
se modifico a mano, allora ci entra
provato tutti i suggerimenti ed esempi che ho trovato (tutti molto simili)

uso Excel 2010 32bit sotto Windos10

avete qualche altro consiglio o idea anche in alternativa??
in pratica ho 4 "Casella di controllo modulo" tipo checkbox che puntano ognuno ad una casella, e scrivono "Vero" o "Falso"
le caselle sono contigue una sopra l'altra "N11:N14"
switchando uno dei 4, dovrei eseguire di nascondere o scoprire certe righe
zio_tom
Newbie
 
Post: 2
Iscritto il: 17/09/15 17:16

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 18/09/15 00:20

Ciao zio_tom, benvenuto nel forum.
L'evento WorksheetChange si verifica quando qualcosa cambia tramite l'interfaccia utente.
Se la tua cella cambia per effetto di una Casella di controllo allora potresti associare il codice all'evento Click della casella di controllo.

Se con questo spunto non risolvi allora allega il codice che hai provato a usare e spiega che cosa vorresti eseguire.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi zio_tom » 18/09/15 09:04

Grazie
In pratica come già spiegato
ho diversi Controlli Modulo, quelli con la spunta, che su data casella scrivono Vero o Falso
al variare di tale valore eseguo varie cose sul foglio
ed inoltre vorrei che quando è Vero, mostro certe righe, con Falso le nascondo
per essere più sicuro tramite una formula =se(A1;1;0) trasformo il Vero in 1 ed il Falso in 0

Mi sembra strano che Worksheet_Change non veda il cambiamento, risultato da una formula
se cambio il valore a mano funziona
zio_tom
Newbie
 
Post: 2
Iscritto il: 17/09/15 17:16

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 18/09/15 14:49

Il tuo messaggio non aggiunge niente a quanto detto finora, anzi sembra che non hai tenuto conto di quanto ti avevo detto sul significato di WorksheetChange.
Quindi non posso che ripetere il suggerimento gia' dato:
Anthony ha scritto:Se la tua cella cambia per effetto di una Casella di controllo allora potresti associare il codice all'evento Click della casella di controllo
Se con questo spunto non risolvi allora allega il codice che hai provato a usare e spiega che cosa vorresti eseguire.


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: lancio di macro al cambiamento di cella con lista

Postdi talete79 » 08/07/16 00:15

Salve. Premetto he sono niubbissimo e quindi potrei dire enormi castronerie.
Ho lo stesso problema. La macro è scritta bene, mi manca la definizione dell'evento. Anche io, infatti, sto cercando di attivare una macro nel momento in cui una particolare cella cambia valore (mediante formula). Inizialmente avevo pensato a Workbook_change, ma questa sarebbe stata la strada giusta se il cambiamento della cella fosse dato dall'utente.
La strada che ho intrapreso (ma ancora non gira) passa per l'utilizzo di Workbook_Calculate, ma con alcuni accorgimenti.
In pratica occorre creare una particolare cella (supponiamo sia la cella B5) che, a seconda della particolare situazione programmativa, abbia un dato valore. Nel momento in cui questo valore cambia, noi vogliamo che la macro si attivata.

Ebbene... ma come facciamo? Calculate non "conosce" il passato! Cioè, fa confronti tra celle tutte nello stesso stato e dunque non ci può essere d'aiuto. Se questa funzione non ha memoria, come faccio a dire "attiva la macro quando cambia il valore di B5?

In realtà, ho pensato di creare una seconda macro che copi in una seconda cella (supponiamo che questa cella sia C7) il valore (sottolineo: solo il valore) della prima cella.

A quel punto entra in gioco Calculate che fa il confronto ad ogni immissioni di dati. Quando durante l'uso del foglio, il valore di B5 cambia, (ma non di C7), si crea l'evento B5<>C7 e dunque la macro viene eseguita.

A questo punto avremmo finito, ma dobbiamo riportare il sistema nella condizione iniziale. dove i valori di B5 e C7 erano uguali. Pertanto occorrerà eseguire nuovamente la macro che copia il valore di B5 e lo incolla in C7. Domani p sabato, posterò un po' di codice ( per quello che posso fare).
Office 2013 Professional
talete79
Utente Junior
 
Post: 10
Iscritto il: 21/02/12 21:58

Re: lancio di macro al cambiamento di cella con lista

Postdi talete79 » 08/07/16 12:06

Private Sub Worksheet_Calculate()
If Cells("j4").Value <> Cells("i4") Then
Call Raggruppa

Call Macro1
End If
End Sub

Mi dice che la chiamata di routine o argomento non sono validi
Office 2013 Professional
talete79
Utente Junior
 
Post: 10
Iscritto il: 21/02/12 21:58

Re: lancio di macro al cambiamento di cella con lista

Postdi Anthony47 » 09/07/16 00:43

Usando J4 come "cella ombra" di I4 (se I4 e' la cella di cui vuoi monitorare la modifica):
Codice: Seleziona tutto
Private Sub Worksheet_Calculate()
If Range("j4").Value <> Range("i4").Value Then
    Application.EnableEvents = False
    Call Macro11                          '<<< L'azione da compiere
    Range("j4").Value = Range("i4").Value
    Application.EnableEvents = True
End If
End Sub

Va messa nel "modulo di codice" del foglio su cui lavori:
-tasto dx sul tab col nome foglio, scegli Visualizza codice
-copia il codice e incollalo nel frame vuoto di dx
Torna sul foglio di lavoro e vedi l'effetto che fa.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "lancio di macro al cambiamento di cella con lista":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti