Copia righe condizionate



  • Copia righe condizionate
    di GruppoSIA data: 29/01/2016 10:53:25

    Salve a tutti, sto cercando di risolvere un problema che a molti potrebbe apparire banale ma per me non lo è. Ho creato una file di excel con una serie di fogli con delle tabelle dove sono elencati degli articoli, e dove la prima colonna rappresenta la quantità e le altre la descrizione il prezzo etc. Ora avrei bisogno di riassumere su un altro foglio, solo le righe che hanno una quantità diversa da zero, in modo da ottenere una sola tabella dove vengono elencati le sole righe di articoli ordinati e senza righe vuote. E' una cosa difficile o banale? Mi potete dare dei suggerimenti?
    Grazie a tutti.



  • di alfrimpa data: 29/01/2016 10:56:33

    Ciao GruppoSIA

    Potresti allegare un file di esempio giusto per capire la struttura dei dati e mostrare come devono essere elencati sul foglio di riepilogo?

    Alfredo

    P.S. Hai postato la medesima richiesta anche su altro forum (h t t p://www.forumexcel.it/forum/6-domande-su-excel-in-generale/1890-spostare-righe-in-modo-condizionato) venti minuti prima di questa. Non mi sembra un comportamento molto corretto.

    Tra l'altro su quel forum il crossposting (ossia postare la medesima richiesta su più forum) è vietato dal loro regolamento.





  • di GruppoSIA data: 29/01/2016 16:13:26

    Mi spiace dell'equivoco, non sapevo fosse una cosa negativa postare su più forum, non conosco i forum in generale e questi specialistici in particolare, cercavo solo info. ho allegato il file di esempio richiesto.
    Grazie per l'interessamento



  • di alfrimpa data: 30/01/2016 18:05:12

    Ciao

    Ti allego file (gruppoSIA.xlsm) con la macro che vedi sotto inserita scritta sulla base dell'esempio da te postato.

    Esegui tale macro e verifica che il risultato nel foglio "Riepilogo" sia quello da te voluto.

    E' ovvio che, molto probabilmente, andrà modificata in base ai dati presenti sul tuo file "reale". Sei in grado di farlo

    Alfredo  
     
    Sub macro1()
    Dim i As Integer
    Dim rng As Range
    Dim cel As Range
    Dim ur As Long
    Application.ScreenUpdating = False
    For i = 1 To ThisWorkbook.Worksheets.Count - 1
    Sheets(i).Activate
    Set rng = Range("a1:a50") <=== questa è la istruzione che andrebbe modificata in base al numero delle righe presenti sui fogli
    For Each cel In rng
            If cel.Value = 1 Or cel.Value > 1 Then
                Range("a" & cel.Row & ":" & "d" & cel.Row).Copy Destination:=Worksheets("Riepilogo").Range("a" & ur + 1)
            End If
            ur = Worksheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Row
        Next cel
    Next i
    Worksheets("Riepilogo").Select
    Application.ScreenUpdating = False
    End Sub
    






  • di alfrimpa data: 30/01/2016 18:17:57

    Ciao

    Scusami ho allegato un file sbagliato.

    Ho riallegato quello giusto gruppoSIA1.xlsm

    Tieni conto che, per motivi che magari spiegherò poi, su Foglio1 e Foglio2 non ci dovrebbero essere righe vuote.


    Alfredo





  • di GruppoSIA data: 01/02/2016 14:24:25

    Grazie Alfrimpa, ma non sono riuscito a trovare il file di esempio, probabilmente sbaglio io, ma dove lo trovo?



  • di alfrimpa data: 01/02/2016 14:41:54

    Il file si chiama gruppoSIA1.xlsm ed è il secondo in alto a destra (fra tre).

    Alfredo




  • Copia righe condizionate
    di GruppoSIA data: 03/02/2016 15:54:19

    Grazie Alfredo, la tua soluzione fa effettivamente quello che volevo , mancherebbe ancora un piccolo fondamentale passo:
    dovrei importare solo le righe che mi servono evitando di riportare tutte le volte la riga q.tà descrizione etc, e se riesco ad importare le righe senza formattazione è ancora meglio. Cmq è già un gran passo avanti, anche perchè studiando il tuo listato. sono riuscito ad aggiungere altri fogli a variare le righe etc.



  • di Mister_x (utente non iscritto) data: 03/02/2016 16:32:23

    ciao

    intanto che piove ho apportato una modifica alla sub() di Alfredo , che saluto

    da provare , in base alle tue ultime proposte
    sostituire con la precedente

    ciao
     
    Sub Alfredo_modificata()
    Dim i As Integer
    Dim rng As Range
    Dim cel As Range
    Dim ur As Long
    ur = 1
    Worksheets("Riepilogo").Select
    Application.ScreenUpdating = False
    Range("A1:D1000").Clear  ''Contents
    Range("A1:D1000").Interior.Color = xlNone
    For i = 1 To Sheets.Count
    If Sheets(i).Name <> "Riepilogo" Then
    Set rng = Sheets(i).Range("a1:a50")
    For Each cel In rng
      If cel = "Q.tà" And ur > 1 Then ur = ur + 1
            If cel.Value <> "" And cel <> "Q.tà" Then
                Sheets(i).Range("a" & cel.Row & ":" & "d" & cel.Row).Copy Destination:=Range("a" & ur)
                  Range("a" & ur & ":d" & ur).Interior.Color = xlNone
                  Range("a" & ur & ":d" & ur).Select
                    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
                    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
                    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
                    Selection.Borders(xlEdgeTop).LineStyle = xlNone
                    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
                    Selection.Borders(xlEdgeRight).LineStyle = xlNone
                    Selection.Borders(xlInsideVertical).LineStyle = xlNone
                    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
               ur = ur + 1
            End If
     Next cel
    End If
    Next i
    Set rng = Nothing
    Range("A1").Select
    Application.ScreenUpdating = False
    End Sub
    
    






  • di Mister_x (utente non iscritto) data: 03/02/2016 16:36:42

    ciao

    mi sono accorto di un errore

    sostituisci
    Range("A1").Select
    Application.ScreenUpdating = False < -----
    End Sub

    con True
    Range("A1").Select
    Application.ScreenUpdating = True
    End Sub

    riciao