Nascondere le righe vuote



  • Nascondere le righe vuote.
    di Spyball (utente non iscritto) data: 21/11/2013 15:46:29

    Buongiorno a tutti gli utenti del forum. E' da poco che mi sto cimentando nel linguaggio VBA e non riesco a creare un codice che alla pressione di un bottone (gia creato) mi nasconda tutte le RIGHE vuote di un determinato intervallo.
    L'intervallo in questione è (G92:AQ786). Quindi se in questo intervallo una riga non ha celle con valori, vorrei che la riga sia nascosta.

    Io ho creato il codice sotto riportato ma non funziona o meglio mi nasconde anche le righe in cui sono presenti valori.

    Al contrario sono riuscito a creare il codice che mi scopra le celle nascoste e che mi svuoti la tabella una volta terminato il lavoro (piccola soddsfazione anche se molto banale

    Grazie mille !!
     
    Private Sub CommandButton1_Click()
    For Each CL In Range("G92:AQ786")
    If CL.Value = "" Then CL.EntireRow.Hidden = True
    Next CL
    End Sub



  • di totygno71 data: 21/11/2013 15:49:54

    Il codice che hai creato spazzola tutte le celle del range che hai individuato e se in questo trova una cella vuota allora nasconde l'intera riga anche se le celle vicine sono piene...
    Devi indirizzare la ricerca solo sulle celle che vuoi controllare se sono vuote e cosi risolvi il tutto.
    Spero di essere stato spiegato ^_^


  • nascondi righe vuote
    di canapone (utente non iscritto) data: 21/11/2013 16:01:09


    Ciao,

    faccio una prova.

    La macro nasconde e scopre

    rv.EntireRow.Hidden = Not rv.EntireRow.Hidden

    le righe vuote

    -----------------

    Se vuoi solo nascondere

    rv.EntireRow.Hidden = True

    ---------------------------

    Spero sia d'aiuto
     
    Sub nascondiRV()
    
    Dim rv As Range
    
    Set rv = Range([g92].End(xlDown), [aq786].End(xlUp))
    
    On Error Resume Next
        Set rv = rv.SpecialCells(4)
        If Err = 0 Then
        rv.EntireRow.Hidden = Not rv.EntireRow.Hidden
    
    End If
    
    End Sub



  • di Grograman (utente non iscritto) data: 21/11/2013 16:13:19


     
    Range("G92:AQ786").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    



  • di Raffaele_53 (utente non iscritto) data: 21/11/2013 16:21:28

    Dico la mia solo a Canapone
    Scusami, se mi permetto nel VBA, non potrei mai con le formule...

    Se non erro si tratta di eliminare righe oppure nasconderle.
    Non puoi fare ----> Range([g92].End(xlDown), [aq786].End(xlUp))
    Sono su righe/colonne diverse
    Devi elaborare ogni cella della riga per vedere se è vuota.
    Al quel punto nascondi la riga. Ma come NON desritto dall'utente succede che se nascondiamo la rigaX, la macro va bene.
    Ma nascondiamo anche quello che c'è in rigaX dalla colonna A sino G e poi nascondiamo dopo dopo la colonna AQ
    Questo il problema, non si possono nascondere dei range. Solo righe e colonne.
    Nascondere = chiudere o eliminarle (mai dei range, almeno possiamo solo eliminarle e spostare le celle sotto per comodita al loro posto)


  • nascondi righe vuote
    di canapone (utente non iscritto) data: 21/11/2013 16:21:58

    Ciao a tutti

    attenzione : la macro che ho condiviso non va bene, non fa quello che pensavo.



  • Colorare forme se cambia una cella
    di canapone (utente non iscritto) data: 21/11/2013 16:29:58


    Ciao Raffaele,

    grazie! Stavo adattando una macro che uso al lavoro per un altro fine.

    Ho trovato questo in rete: sono molto affascinato dal VBA (che capisco poco poco)

    Saluti

     
    Sub vadoanascondermi()
    Dim RV As Range
    Dim CELL As Range
    Set RV = Application.Intersect(ActiveSheet.UsedRange, Range("g92:aq786"))
    For Each CELL In RV
    If Application.CountA(CELL.EntireRow) = 0 Then CELL.EntireRow.Hidden = True
    Next
    End Sub
    



  • di Raffaele_53 (utente non iscritto) data: 21/11/2013 16:48:37

    Ciao Canapone (un grosso saluto)

    Invito l'utente a spostare un files con adeguate spiegazioni.
    Desidera eliminare/nascondere colonne OK
    Desidera altro?. Potrebbe nell'allegato dirci cosa desidera ottenere nelle varie celle.



  • di Spyball (utente non iscritto) data: 21/11/2013 17:56:26

    Grazie a tutti per l'impegno. I codici che mi avete consigliato purtroppo non funzionano.

    Il mio obbiettivo è nascondere intere righe le cui celle siano tutte vuote e non eliminarle. (mi serve fare ciò per ridurre al minimo lo spazio occupato dalla tabella nel momento in cui la stamperò).

    Come ho detto avendo una tabella che si sviluppa in un determinato range (G92:AQ786) piena di celle con numeri inseriti manualmente, vorrei che alla pressione del pulsante che ho creato, le righe completamente vuote siano nascoste (Es. se le celle da G93 a AQ93 sono tutte vuote, quella riga dovrà essere nascosta).

    Vi allego un file di esempio molto ridotto rispetto a quello che userò ma quello che mi serve si capisce bene.
    Grazie di nuovo


  • macro nasconti righe
    di canapone data: 21/11/2013 18:16:53


    Ciao,

    cerco di aggirare il problema che nella colonna A - anche con riga vuota- un codice lo trova.

    Ho messo un 1 al counta.

    In attesa di migliori soluzioni

    Saluti
     
    Sub vadoanascondermi()
    Application.ScreenUpdating = False
    
    Dim RV As Range
    Dim CELL As Range
    Set RV = Application.Intersect(ActiveSheet.UsedRange, Range("B3:K19"))
    For Each CELL In RV
    If Application.CountA(CELL.EntireRow) = 1 Then CELL.EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
    
    
    End Sub
    


  • allegato un esempio
    di canapone data: 21/11/2013 18:22:42

    Condivido il file dove ho fatto una prova veloce.

    Saluti



  • di spyball (utente non iscritto) data: 21/11/2013 18:29:46

    Ok grazie mille. Ho provato il file che mi hai allegato e funziona come vorrei. Domani mattina copio il codice che mi hai creato sul mio file che ho al lavoro e vi faccio sapere. Per ora di nuovo grazie.


  • macro nascondi righe g92 aq786
    di canapone (utente non iscritto) data: 22/11/2013 07:14:01

    Ciao,

    ho allegato un nuovo file, mi sembra più presentabile.

    Adatta i riferimenti - ho messo Foglio1 G92:AQ786- con i quali la macro deve lavorare.

    Saluti
     
    Option Explicit
    
    Sub NASCONDIG92AQ786()
    Application.ScreenUpdating = False
    Dim i As Integer
    Dim RStart As Range
    Dim REnd As Range
    Set RStart = Sheets("Foglio1").Range("G92")
    Set REnd = Sheets("Foglio1").Range("G92").End(xlDown).Offset(0, 36)
    Range(RStart, REnd).Select
    On Error Resume Next
    With Selection
    .EntireRow.Hidden = False
    For i = 1 To .Rows.Count
    If WorksheetFunction.CountBlank(.Rows(i)) = 36 Then
    .Rows(i).EntireRow.Hidden = True
    End If
    Next i
    End With
    Set RStart = Nothing
    Set REnd = Nothing
    Sheets("Foglio1").Range("g92").Select
    Application.ScreenUpdating = True
    End Sub
    
    Sub MOSTRA92786()
    Application.ScreenUpdating = False
    Sheets("foglio1").Rows("92:786").EntireRow.Hidden = 0
    Application.ScreenUpdating = True
    End Sub
    



  • di Spyball (utente non iscritto) data: 22/11/2013 08:45:51

    Ho provato ad aggiornare i riferimenti ma mi da un errore di debug su questa stringa:

    Set RStart = Sheets("Foglio3").Range("G92")

    Nel codice io ho solo sostituito "foglio1" con "foglio3" perchè nel mio file la tabella si trova nel foglio3.

    Ho nuovamente allegato il file che tu hai creato per la simulazione e lo ho aggiornato esattamente come è la mia tabella.
    Nella tua simulazione la macro funzionava perfettamente non riesco a capire dove sia il problema. Cmq. grazie!



  • di Grograman (utente non iscritto) data: 22/11/2013 08:59:28

    Ciao!

    Una sfoltita alla routine di Canapone eliminando un pò di select:
     
    Option Explicit
    Sub NASCONDIG92AQ786()
      Dim ws As Worksheet
      Dim i As Long
      Set ws = ActiveSheet
      Application.ScreenUpdating = False
      With ws
        i = .Range("G" & .Rows.Count).End(xlUp).Row
        .Cells.EntireRow.Hidden = False
        For i = i To 92 Step -1
          If WorksheetFunction.CountBlank(.Range(Cells(i, 8), Cells(i, 43))) = 36 Then
            .Rows(i).EntireRow.Hidden = True
          End If
        Next i
      End With
      Application.ScreenUpdating = True
      Set ws = Nothing
    End Sub
    
    Sub MOSTRA92786()
      Application.ScreenUpdating = False
      Cells.EntireRow.Hidden = 0
      Application.ScreenUpdating = True
    End Sub
    
    



  • di Spyball (utente non iscritto) data: 22/11/2013 09:15:27

    Ragazzi FUNZIONA!!! Grazie mille a tutti per l'impegno!