Condividi:        

[Excel] Svuotare celle con convalida

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

[Excel] Svuotare celle con convalida

Postdi fabio83 » 17/06/06 21:07

Ciao.
Sto facendo un programma per la gestione di gare d'orienteering (veramente è già alla sua prima revisione dopo un trofeo gestito magicamente!) e sto inserendo un'interfaccia grafica user friendly (almeno ci provo :)
Il problema è questo:
per ogni percorso è possibile far partire un atleta al minuto. Esistono più categorie per ogni percorso. Ho impostato le celle con la Convalida percui se chiedo la categoria HA mi elenca, sotto il relativo percorso, i soli minuti disponibili per quel percorso non elencadomi nelle altre celle di griglia (griglia di minuti disponibili).

Il problema è che alla modifica della cella dove è la categoria dovrebbe corrispondere la cancellazione del contenuto di tutte e 6 le celle con convalida dove si trovano le griglie. In pratica mi serve pulire delle celle in automatico al cambiamento (generico) di una (ed una sola) determinata altra cella.
Dovrebbe essere una Function dove l'IF non è specificato (come si fa?) ?
Lo sò mi dilungo tanto e non ci si capisce niente. Spero sia stato chiaro stavolta!

A presto,
Fabio
fabio83
Utente Junior
 
Post: 15
Iscritto il: 17/06/06 20:52

Sponsor
 

Postdi Alexsandra » 17/06/06 21:57

Dovresti chiarire se le celle da svuotare sono sulle righe o sulle colonne
e inoltre metti un titolo più esatto,
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

non c'entra molto la convalida

Postdi fabio83 » 17/06/06 22:08

Ciao. Grazie dell'immediata risposta!
In effetti mi sono spiegato male. Lasciamo perdere la convalida che non c'entra molto.

Mi occorre svuotare delle celle, in automatico, alla modifica di una determinata cella.

Le celle da svuotare stanno sulla stessa riga ma non mi serve svuotare l'intera riga (a meno che lo svuotamento non sia possibile solo per riga o per colonna).

In pratica poniamo: se scrivo una qualunque cosa in A1 allora le celle B2, C4; D6 si svuotano. Ovviamente se, successivamente, scrivo qualcosa in B2, C4 o D6 il loro contenuto non mi viene subito cancellato ma solo che avrò di nuovo modificato il valore di A1. Questo è quanto vorrei realizzare.

Spero abbia puntualizzato meglio il problema. Grazie ancora,

Fabio
fabio83
Utente Junior
 
Post: 15
Iscritto il: 17/06/06 20:52

Postdi Alexsandra » 18/06/06 07:15

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Range("B2,C4,D6").ClearContents
End Sub
La devi mettere nel foglio in cui devi cancellare le celle.
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi dayns » 04/03/07 17:08

Ciao a tutti,
scrivo qui visto il post ancora aperto,ed è la soluzione che più o meno cercavo.
Volevo sapere se era possibile con la stessa soluzione fare in modo che cancellando o modificando i dati nella cella A1,si potevano azzerare celle in altri fogli?
Esempio: cancellando i dati in A1 del foglio 1,si azzerano le celle B2,C4,D6 contemporaneamente azzerare le celle B2,C4,D6 del foglio 2 e del foglio 3.
Spero di essere stato chiaro.
Grazie anticipatamente
dayns
Utente Junior
 
Post: 10
Iscritto il: 15/05/06 14:36

Postdi Anthony47 » 05/03/07 00:07

Ciao dayns,
la soluzione proposta da Alexsandra e’ pronta per fare quello che dici; basta trasformarla in qualcosa tipo

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
Range("B2,C4,D6").ClearContents
Sheets("Foglio2").Range("B2,C4,D6").ClearContents
Sheets("Foglio3").Range("B2,C4,D6").ClearContents
End If
Application.EnableEvents = True
End Sub

Ho anche aggiunto le due istruzioni Application.EnableEvents per evitare il restart recursivo della macro per effetto dei cambiamenti che la stessa macro produce, ma nella sostanza la soluzione e’ quella di Alexsandra.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi dayns » 05/03/07 00:33

Ciao Anthony,
grazie per la risposta ;) ,funziona perfettamente era quello che cercavo.
Ora se è possibile volevo sapere ,si può azzerare anche una casella di controllo (il quadratino con il segno di spunta)con la stessa soluzione?
Forse chiedo troppo ma sono abbastanza ignorante in materia.

Grazie
dayns
Utente Junior
 
Post: 10
Iscritto il: 15/05/06 14:36

Postdi Anthony47 » 05/03/07 01:19

Nota l' istruzione aggiuntiva.

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
Range("B2,C4,D6").ClearContents
Sheets("Foglio2").Range("B2,C4,D6").ClearContents
Sheets("Foglio3").Range("B2,C4,D6").ClearContents

ActiveSheet.CheckBoxes(1).Value = xlOff

End If
Application.EnableEvents = True
End Sub


Se ci sono piu' checkbox puoi leggerne il numero con
Codice: Seleziona tutto
CBCnt = ActiveSheet.CheckBoxes.Count

e poi organizzare un ciclo di For/Next per pulirli tutti.

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

Postdi dayns » 05/03/07 10:21

Ciao,
Grazie funzione benissimo,solo che non riesco a creare il ciclo For/Next.
Ho 10 CheckBoxes nel primo foglio,5 nel secondo e 6 nel terzo.
Diciamo che creato quest'ultima soluzione ho ottenuto tutto quello che cercavo .
Grazie in anticipo
dayns
Utente Junior
 
Post: 10
Iscritto il: 15/05/06 14:36

Postdi dayns » 05/03/07 11:24

Altro quesito ,
girando per il forum ho trovato queto
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'. . . . .
'. . . . .
If Worksheets("Foglio1").Range("A1").Value = "" Then
MsgBox ("ERRORE: La cella A1 deve essere compilata prima di chiudere il file; telefonare a . . . per chiarimenti")
Cancel = True
Exit Sub
End If
'. . . .
'. . . . .
End Sub


come si può applicare al checkboxes ?E' possibile una cosa del genere?
Sto chiedendo troppo? :D
dayns
Utente Junior
 
Post: 10
Iscritto il: 15/05/06 14:36

Postdi Anthony47 » 05/03/07 14:15

Ciao dayns,
trovi abbondanti esempi nell’ help on-line del vba editor; guarda l’ argomento “Utilizzo di istruzioni For...Next” selezionando la voce Next sul tab Indice.
Per lo scan dei fogli puoi usare una soluzione non ottimizzata ma efficace tipo Sheets(“Nome-del-foglio”).Select, ripetendo le operazioni di clean dei combobox per ognuno dei fogli che ti interessano.
Se proprio non ti funziona, posta le istruzioni del tuo codice e vediamo come correggere.
Per quanto riguarda la gestione tramite l’ evento BeforeClose, puoi adottarlo e funzionera’ anche sul tuo foglio; MA tieni presente che se vuoi creare una automazione per altri utenti, questa deve essere “solida e supportata”, cosa che non puoi garantire appoggiandoti a un forum.

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


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Svuotare celle con convalida":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti