Copiare solo celle visibili



  • Copiare solo celle visibili
    di MatteoM data: 28/07/2016 13:58:46

    Buongiorno a tutti, per caso esiste un istruzione che permette di copiare, in sostituzione all cells.select, soltanto tutte le righe in evidenza tralasciando quelle nascoste? Questa operazione mi permetterebbe di creare dei file molto piu snelli e gestibili piu facilmente.

    Grazie mille :)



  • di Luca73 data: 28/07/2016 15:20:35

    Ciao
    ho fattro uno prova nascondendo alcune righe e funziona
    Copia solo qulle visibili
    Ciao
    Luca
     
    Sub mia()
    Range("A1:A20").SpecialCells(xlCellTypeVisible).Copy Destination:=Range("B21")
    End Sub
    






  • di MatteoM data: 28/07/2016 15:51:25

    Ciao Luca, ti ringrazio per avermi risposto :)

    Purtroppo mi rifiuta l'operazione per via delle celle unite. Ho provato anche in altri modi ma nulla.

    Stavo provando anche con un'altra soluzione: cercare le righe nascoste e cancellarle una volta trovate.

    Ho usato queste istruzioni,però mi si blocca :/ --> Errore di run time 424 Necessario oggetto 
     
    i = 9
                              Do Until Cells(i, "A").Interior.ColorIndex = xlNone
                              Rows(i).Select
                              If EntireRow.Hidden = True Then
                              Selection.Delete Shift:=xlUp
                              i = i - 1
                              Else
                              i = i + 1
                              End If
                              Loop



  • di Vecchio Frac data: 28/07/2016 16:00:40

    L'errore accade perchè scrivere "EntireRow.Hidden" non vuol dire niente, a quale riga "EntireRow" dovrebbe riferirsi? Non credere che solo perchè l'hai selezionata un attimo prima tu ne abbia impostato un riferimento.
    Due soluzioni alternative:
    1) if selection.If EntireRow.Hidden Then
    2) if rows(i).hidden then

    Ciò premesso però è meglio dire sempre tutto... solo dopo è saltato fuori che avevi celle unite :)





  • di Vecchio Frac data: 28/07/2016 16:01:23

    Errata corrige.
    1) if selection.EntireRow.Hidden Then

    Ovviamente :)





  • di MatteoM data: 28/07/2016 16:02:31

    ok ho risolto! Ho sostituito l'if con questo e tutto funziona!
     
    If Rows(i).EntireRow.Hidden Then



  • di Luca73 data: 28/07/2016 16:03:43

    Ciao
    in effetti le celle unite creano solo e soltanto casino.
    Io cerco di non usarle mai

    Rispetto alla tua sub prova a modificarla come sotto
     
    Do Until Cells(i, "A").Interior.ColorIndex = xlNone
       If Rows(i).EntireRow.Hidden = True Then
          Rows(i).EntireRow.Delete Shift:=xlUp
       Else
          i = i + 1
       End If
    Loop






  • di MatteoM data: 28/07/2016 16:04:49

    Grazie Vecchio Frac! Ho seguito il tuo consiglio e ho usato l'espressione rows(i).hidden è molto piu sintetica!



  • di MatteoM data: 28/07/2016 16:27:22

    Grazie Luca, chiedo scusa per il dettaglio delle celle unite, mi sono scordato di scriverlo



  • di Vecchio Frac data: 28/07/2016 16:42:39

    Comunque il suggerimento di Luca rimane valido se sai che le celle unite si estendono anche alla seconda colonna. Ripeti il ragionamento se sai se si estendono oltre. Al limite si può scrivere il codice che indovina l'estensione massima delle celle unite. Non so se ne vale la pena :)

    Range("A1:B20").SpecialCells(xlCellTypeVisible).Copy Destination:=Range("B21")