riconosci celle piene



  • riconosci celle piene
    di Julio (utente non iscritto) data: 13/10/2012 18:29:29

    Salve, vorrei creare una macro capace di copiare delle intere righe presenti in un foglio solo se una determinata cella dell'elenco di partenza e' vuoto.
    Mi spiego meglio:
    Nel foglio 1 ho una tabella in cui la prima colonna riporta dei codici prodotto, la seconda colonna la descrizione del prodotto, la terza colonna la quantita' e la quarta colonna il prezzo; su alcuni prodotti la quantita' e' zero (terza colonna), praticamente la terza colonna e' quella che individua la necessita' del prodotto o meno. Io vorrei copiare la tabella nel foglio 2 ma visualizzando SOLO i prodotti che risultano avere quantita' maggiore di zero.
    Grazie
    Julio



  • di HarryBosch data: 13/10/2012 19:16:06

    Ciao Julio
    ci sono tanti modi per copiare le righe in base ad un determinato criterio; oltre a copiarle una ad una passandole con un ciclo, si potrebbe filtrare subito la tabella iniziale e quindi copiarla per intero (idea ripresa da un postumo intervento di VecchioFrac, su un thread molto simile).

    Prima di passare ai fatti ti chiedo se avevi fatto un qualche tentativo e se magari volevi postarlo in modo da correggerlo insieme.
    E, visto che ci siamo, sarebbe da conoscere un particolare di solito "appartenente" a questi casi: quando copi, vuoi cancellare la precedente copiatura, oppure ogni volta che lanci la macro le righe devono posizionarsi dopo le precedenti?




  • di Julio (utente non iscritto) data: 13/10/2012 19:38:00

    Grazie per la celere risposta.
    Io non ho ancora fatto prove, ci stavo riflettendo, ipotizzavo di usare un ciclio "DO" associato a "cells".
    Ad ogni modo nel foglio 2 vorrei che le voci precedentemente copiate si cancellassero.
    Mi sai indicare qual'e' stata la precedendte discussione in cui e' stato trattato questo argomento?
    Grazie
    Julio



  • di Vecchio Frac data: 13/10/2012 21:11:14

    Scusate ma non resisto ^_^
    cit. " (idea ripresa da un postumo intervento di VecchioFrac, su un thread molto simile) "

    Alla voce "postumo" il Sabatini Coletti, dizionario della lingua italiana, dice:

    • agg.
    1 Nato dopo la morte del padre: figlio postumo
    2 Pubblicato dopo la morte dell'autore: romanzo postumo; che si verifica dopo la morte dell'interessato: riconoscimento postumo
    3 estens. Che avviene in ritardo SIN tardivo: pentimento postumo

    • s.m. (spec. pl.)
    1 Alterazione o disturbo che permane come conseguenza di una malattia o di un trauma: i postumi dell'influenza
    2 estens. Conseguenza, strascico: i postumi della rivoluzione

    @Vanni
    Che significato volevi dare? spero non il secondo dell'aggettivo... ^_^

    @Julio
    Presumo che Vanni si riferisca a questo thread di questo forum:
    excelvba.altervista.org/Forum/thread.php?f=1&t=3324





  • di HarryBosch data: 15/10/2012 00:08:36


    Scusa VecchioFrac! Mi sono fatto qualche risata! Non so da dove mi sia saltato fuori quel "postumo", probabilmente avevo fame e la mia mente era orientata a certi profumi.. Non intendevo certo il significato 2!

    Comunque mi riferivo certamente ad una discussione passata, anche se non esattamente quella che hai indicato, ma molto simile. Vedo se la trovo...



  • di HarryBosch data: 15/10/2012 00:40:57

    Niente, non sono riuscito a trovarla.
    Ti propongo allora questo codice: più che un ciclo "Do", userei un "For Each" dopo aver settato l'intera tabella. Con il ciclo passo tutte le righe controllando solo il valore della colonna 3; se questo valore è maggiore di 0 o comunque vuoto, allora copio l'intera riga nel Foglio2.
    All'inizio della routine cancello l'intero Foglio2: .Cells.clear

    Se ti interessa, possiamo vedere anche la soluzione con il filtraggio iniziale della tabella.
     
    Sub Copia_righe_criterio()
        Dim rng As Range, cella As Range
        Dim r As Integer
        Application.ScreenUpdating = False
    
        Set rng = [A1].CurrentRegion
        With Sheets("Foglio2")
            .Cells.Clear
    
            For Each cella In rng.Rows
                If cella.Columns(3).Value <> "" And cella.Columns(3) > 0 Then
    
                    cella.EntireRow.Copy
                    r = .[counta(a:a)] + 1
                    .Rows(r).Insert
    
                End If
            Next
    
            .Select
            MsgBox "Tabella copiata"
        End With
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
    End Sub
    



  • di HarryBosch data: 15/10/2012 00:43:29

    se il foglio2 è formattato secondo una logica di "accoglimento" dei dati, allora per cancellare usa:
    .Cells.Clearcontents


  • Riconosci celle piene
    di Julio (utente non iscritto) data: 25/11/2012 15:17:55

    Scusate, stavo rileggendo le vostre interessanti risposte e mi sono accorto che non vi avevo ringraziato. Scusate.
    Grazie per avermi consigliato come risolvere al meglio la mia difficoltà e scusate se non l'ho fatto prima.

    Buona domenica
    Julio



  • di Vecchio Frac data: 25/11/2012 17:49:13

    Bè la tua considerazione fa sicuramente piacere ma non era necessaria, diciamo che se uno è soddisfatto delle risposte poi torna a proporre altri quesiti o, meglio, cerca di rispondere ai quesiti altrui ^_^
    Ti pregherei invece di spuntare la casella "Spunta se risolta" in una nuova risposta a questa discussione, per considerarla chiusa.




  • riconosci celle piene
    di Julio (utente non iscritto) data: 26/11/2012 07:24:02

    Ecco fatto.
    Grazie
    Julio