Celle diverse da zero



  • Celle diverse da zero
    di Emans (utente non iscritto) data: 17/04/2015 17:15:30

    Buonasera,
    avrei la seguente esigenza: da una serie di calcoli riassumo in una tabella con numero di celle fisse 8 valori in una colonna G corrispondenti ad 8 valori in una colonna H. Questi valori sono numeri variabili. Dovrei creare un'altra tabella in automatico con solanto i valori diversi da 0 della colonna G associati alla colonna H. Sono riuscito a filtrarli in automatico con il codice seguente. Il problema che poi devo prelevare questi valori su di un altro foglio per fare altri calcoli e con la tabella filtrata non funziona. Grazie dell'aiuto.
     
    Private Sub Worksheet_Activate()
        Columns("G:G").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=1, Criteria1:="<>0"
    
    End Sub



  • di Walter Lagnocca (utente non iscritto) data: 17/04/2015 18:03:53

    Potresti provare con questa istruzione inserita in ciclo del tipo:
    - For Next
    oppure, se non hai celle vuote,
    - Do While

    W Lagnocca

     
    ...
    If IsNumeric(.Cells(r, 1)) And IsNumeric(.Cells(r, 1)) <> 0 Then
    ...



  • di Emans (utente non iscritto) data: 20/04/2015 08:27:33

    Ciao,

    non sono così bravo, potresti ampliarmi il codice d'esempio. Grazie



  • di lepat (utente non iscritto) data: 20/04/2015 09:25:15

    allega un file di esempio con i dati ed il risultato desiderato



  • di Emans (utente non iscritto) data: 20/04/2015 10:23:56

    Ho allegato il file di esempio. La tabella dove dovrei prelevare i valori è quella di riepilogo, creandone un'altra a fianco prenedendo solo i valori diversi da zero.

    Grazie



  • di Emans (utente non iscritto) data: 20/04/2015 10:57:21

    Scusate,

    vorrei specificare che il valore che fa da riferimento per i valori diversi da 0 sulla colonna del riepilogo, è quello della colonna M, quindi di conseguenze presi soltanto quelli che si portona dietro i valori della colonna N ed O.

    Grazie



  • di lepat (utente non iscritto) data: 20/04/2015 12:00:03

    dov'è il risultato desiderato ?



  • di Emans (utente non iscritto) data: 22/04/2015 08:43:49

    Buongiorno,

    mi scuso, il risultato voluto è quello nel foglio esecutivo. Grazie Saluti



  • di alfrimpa data: 22/04/2015 11:35:24

    Ciao Emans

    Potresti provare questa macro (ovviamente da adattare).

    In pratica estrae i valori diversi da zero della zona "RIEPILOGO" del foglio1 e li inserisce a partire da A3 in sequenza.

    Spero sia utile.

    Alfredo
     
    Sub Estrai()
    Dim miorange As Range
    Dim cel As Range
    Dim r As Integer
    Set miorange = Worksheets("Foglio1").Range("m3:m68")
    r = 3
    For Each cel In miorange
        If cel.Value <> 0 Then
            Worksheets("esecutivo").Cells(r, 1).Value = cel.Value
            Worksheets("esecutivo").Cells(r, 2).Value = cel.Offset(0, 1).Value
            Worksheets("esecutivo").Cells(r, 3).Value = cel.Offset(0, 2).Value
        r = r + 1
        End If
    Next cel
    End Sub
    






  • di alfrimpa data: 22/04/2015 11:36:49

    Ho omesso di dire che inserisce i dati da A3 sul foglio "Esecutivo".

    Alfredo





  • di eMANS (utente non iscritto) data: 22/04/2015 11:56:09

    Grazie,

    funziona alla pefezione, è possibile avere l'aggiornamento dell'estrazione in tempo reale oppure ogni volta
    va fatta rieseguire la macro.

    Grazie di nuovo

    Saluti



  • di alfrimpa data: 22/04/2015 12:11:14

    Cit.: "è possibile avere l'aggiornamento dell'estrazione in tempo reale oppure ogni volta
    va fatta rieseguire la macro."

    Puoi spiegare meglio cosa vuoi fare?

    Alfredo






  • di Emans (utente non iscritto) data: 22/04/2015 12:26:39

    E' possibile avere la tabella di estrazione sempre aggiornata al variare della tabella di prelevamento dati senza eseguire operazioni manuali di esecuzione macro quindi a prova di errore per distrazioni. Spero di essere stato chiaro.
    Grazie



  • di alfrimpa data: 22/04/2015 13:46:48

    Ciao Emans

    Non so quale sia il livello di conoscenza del VBA che tu hai per cui non sono sicuro che quello che sto per dirti riuscirai a comprenderlo appieno.

    In VBA è possibile legare l'esecuzione di una macro ad un evento che si verifica sul foglio di lavoro (ad es. una modifica con l'evento Change).

    Purtroppo, però, il variare di un risultato in una formula (e nella tua tabella RIEPILOGO ci sono tutte formule) non viene riconosciuto, almeno per quanto ne so, come una modifica del foglio di lavoro.

    Quello che si può fare è legare l'esecuzione del codice al variare delle celle di input sul foglio1 (le colonne C, D ed F mi sembra).

    Proverò ad allegarti un file congegnato in questo modo ma dovrai essere tu a dire se ti va bene oppure no.

    Spero di essere stato chiaro.

    Alfredo





  • di alfrimpa data: 22/04/2015 14:28:06

    Ciao Emans

    Ti allego file dove ho inserito la sottostante macro che viene eseguita ogni qual volta viene modificata una cella dell'intervallo Foglio1!C3:E117

    Fai delle prove e fammi sapere se era questo che volevi.

    Alfredo
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim miorange As Range
    Dim cel As Range
    Dim r As Integer
    Application.EnableEvents = False
    Set miorange = Worksheets("Foglio1").Range("m3:m68")
    r = 3
    If Not Intersect(Target, Range("c3:e117")) Is Nothing Then
        For Each cel In miorange
            If cel.Value <> 0 Then
                Worksheets("esecutivo").Cells(r, 1).Value = cel.Value
                Worksheets("esecutivo").Cells(r, 2).Value = cel.Offset(0, 1).Value
                Worksheets("esecutivo").Cells(r, 3).Value = cel.Offset(0, 2).Value
            r = r + 1
            End If
        Next cel
    End If
    Application.EnableEvents = True
    End Sub
    






  • di Emans (utente non iscritto) data: 22/04/2015 14:29:26

    Diciamo che non sono molto esperto di Vba e per non farla eccessivamente complicata creo un pulasante che ad ogni pressione mi esegue la macro.

    Grazie

    Saluti



  • di alfrimpa data: 22/04/2015 14:32:08

    Ed infatti era quello che intendevo io con la precedente macro che va associata ad un pulsante.

    Non credo vi siano molte probabilità di sbagliare se si deve fare solo un clic sul pulsante (l'importante è che i dati immessi siano corretti.

    Comunque prova anche l'altra soluzione e dimmi quale preferisci.

    Alfredo





  • di Emans (utente non iscritto) data: 22/04/2015 14:38:54

    Grazie

    funziona alla perfezione.



  • di Emans (utente non iscritto) data: 22/04/2015 14:41:35

    Penso, visto che funziona, ad usare l'aggiornamento automatico. Grazie di nuovo.

    Ciao



  • di alfrimpa data: 22/04/2015 15:19:56

    Grazie a Te del riscontro.

    Alfredo





  • di Emans (utente non iscritto) data: 22/04/2015 15:32:17

    Ho un altro problema: la tabella di inserimento dati è su di un altro foglio che si chiama "Preset", come faccio ad indicargli che il range è su di un altro foglio?

    Grazie



  • di alfrimpa data: 22/04/2015 16:59:44

    Ciao Emans

    Basta sostituire "Foglio1" con "Preset nell'istruzione:

    Set miorange = Worksheets("Foglio1").Range("m3:m68")

    Attenzione: poi l'intera macro va inserita nel modulo del foglio "Preset" perché va associata all'evento Change di questo e tolta dal modulo del Foglio1.

    Solo un ultimo consiglio (se non lo hai già fatto): sul foglio di immissione dati, allo scopo di prevenire le cancellature accidentali delle formule, seleziona la zona di immissione dati (es. C3:E117) vai in Formato Celle, Protezione e deseleziona la casella "Bloccata". Poi dal menù Revisione proteggi il foglio.

    In questo modo le formule non potranno essere cancellate.

    Alfredo





  • di Emans (utente non iscritto) data: 22/04/2015 17:05:24

    Ok Grazie