Annullare contenuto celle



  • Annullare contenuto celle
    di mandoz (utente non iscritto) data: 12/02/2013 22:25:53

    ciao a tutti,
    espongo il mio problema. ho cercato di adattare un codice funzionante ... ora non funziona più.
    la mia necessità è la seguente. per i fogli 1 2 fino a 12 prendendo in esame le celle F10:F40
    se la cella F10=AE9 (vuota) il codice dovrebbe annullare il contenuto di E10 F10 G10... AD10

    noterete che i valori delle celle possono essere inseriti attraverso una formula o da elenco convalida dati.
    GRAZIE
     
    'proposta da xxx
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("F10:F40")) Is Nothing Then Exit Sub
    riga = Target.Row
            'If Cells(riga, 1) <> "" Then
                Range(Cells(riga, 5), Cells(riga, 25)).ClearContents
            'End If
    End Sub



  • di mandoz (utente non iscritto) data: 12/02/2013 22:37:38

    scusate per il formato dell'allegato non consentito.



  • di Mabolsie (utente non iscritto) data: 12/02/2013 22:39:50

    Ciao mandoz, perchè hai messo gli apici nell' IF ed END if ? Sono forse commenti o fatto parte del codice eseguibile ? Se è codice eseguibile levali e prova.
    Ciao Max



  • di mandoz (utente non iscritto) data: 12/02/2013 23:06:59

    ciao max
    gli apicetti fanno un ulteriore controllo di cui, in questo caso, non ho bisogno



  • di Mabolsie (utente non iscritto) data: 12/02/2013 23:23:25

    Allora metti l'apicetto anche alla riga in mezzo ad if ... end if altrimenti il programma ti esegue la riga Range che non ha più il controllo di If...End if e ti va a cancellare due celle che forse non vorresti siano cancellate.
    P.S sto guardando il file allegato ma non capisco cosa tu voglia fare ( forse è l'orario, è meglio che vada a letto!!!)
    Ciao Max



  • di Vecchio Frac data: 13/02/2013 21:17:46

    Il concetto è:
    "appena modifico una cella in F10:F40, voglio che le colonne da E a AD della stessa riga della cella modificata vengano cancellate".
    Devi identificare il range preciso in cui viene modificata un cella, e svuotare le celle di quella riga.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("F10:F40")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        if target = "" then
                Range(Cells(target.row, "E"), Cells(target.row, "AD")).ClearContents
        end if
        Application.EnableEvents = True
    End Sub






  • di mandoz (utente non iscritto) data: 13/02/2013 21:31:03

    grandissimo vecchio frac.
    il tuo codice è quello che cercavo.... mancherebbe solo una cosa
    nel cancellare il contenuto delle celle come già fa, il tuo codice dovrebbe salvaguardare le formule in esse contenute



  • di Vecchio Frac data: 14/02/2013 12:04:21

    Allora non ho capito l'obiettivo.
    Se inserisci un dato in F10, F11, F12, ... le celle nella stessa riga da B in avanti si compilano correttamente (ci sono delle formule).
    Se poi cancelli con Canc quel dato, le celle della stessa riga si cancellano e rimanogno le formule.
    Non ti serve codice VBA.





  • di mandoz (utente non iscritto) data: 14/02/2013 20:54:57

    brevemente..
    dopo aver impostato un valore in F10, le formule hanno compilato altre celle. ok .
    ho reso vuota la cella F10, il codice ha annullato come concordato. ok .
    ho avuto bisogno di impostare nuovamente un valore in F10 "diverso da vuoto" , mi sono accorto che
    le celle G10 H10... non si aggiornano più perchè senza formule.



  • di Vecchio Frac data: 14/02/2013 21:24:21

    Esaminando il file che hai allegato, vedo che in ognuno dei fogli da "1" a "12" (i mesi, per capirci) c'è quel codice che effettua il .ClearContents; quindi devi fare un passo indietro e cancellare quel codice.
    Di passaggio ti informo che non è necessario trascrivere eventuale codice che intercetta la modifica di un range per ogni foglio coinvolto, puoi rispramirare codice duplicato e ridondante scrivendolo una volta sola nell'evento Worrkbook_SheetChange di ThisWorkbook (che nella tua versione di Excel si chiama Questa_cartella_di_lavoro). Ma questo è eventualmente un passo successivo.
    In pratica ti basta riportare le formule dai fogli successivi al primo foglio per "tornare indietro".
    Al resto pensano le formule.





  • di mandoz (utente non iscritto) data: 14/02/2013 22:18:47

    farò un foglio "0" come campione.
    grazie