Condividi tramite

Creare una macro per nascondere righe con celle vuote

Anonimo
2018-04-23T12:20:55+00:00

Buongiorno a tutti,

dovrei risolvere un problema di questo tipo:

Ho creato un file excel con due fogli.

Nel secondo ho un range di 10 stagioni sportive. In ogni stagione sportiva si svolgono dei corsi che non sono uguali per tutti gli anni. In ogni corso inserisco dei dati.

Nel foglio1 si sceglie l'anno sportivo ed in base alla scelta si visualizzano le cifre relative ai corsi svolti in quell'anno.

Arrivo ora al problema che vorrei risolvere.

Come ho scritto prima, nelle diverse stagioni sportive ci sono dei corsi che si ripetono, altri che non vengono svolti sempre, altri ancora che sono presenti una sola volta.

Nel foglio uno io ho inserito l'elenco di tutti i corsi svolti nelle diverse stagioni sportive, per cui, a seconda dell'anno scelto, ci saranno delle righe che risulta senza nessun dato al loro interno.

Come faccio a nascondere le righe relative ai corsi non effettuati in quell'anno in modo tale da visualizzare solo quelli che presentano dei dati?

Spero di essere riuscito a spiegarmi correttamente.

Come faccio a caricarvi il file di esempio?

Grazie a chiunque riesca ad aiutarmi ;)

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2018-04-24T12:31:16+00:00

    Ciao Bigigio,

    ti ringrazio molto per l'aiuto e mi scuso per la mia imprecisione.

    Prego e figuarati! 

    Ho provato il codice adattato e funziona.

    Bene :-)

    C'è la possibilità di attivare la macro in automatico ogni volta che si sceglie un anno sportivo dal menù, oppure l'unico modo è prevedere un bottone che attivi la macro ogni volta che ci si clicca sopra?

    Certo!

    • Fai clic dx sulla linguetta del foglio di interesse
    • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
    • Incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim Rng As Range

        Const sCellaAnno As String = "D3"         '<<=== Modifica

        Set Rng = Intersect(Me.Range(sCellaAnno), Target)

        If Not Rng Is Nothing Then

            Call Tester

        End If

    End Sub

    '<<========= 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel.

    In questo modo, la procedura Tester sarà automaticamente avviata ad ogni modifica del periodo selezionato nella casella a discesa nella cella D3 e, quindi, le righe vuote saranno nascoste e quelle non vuote saranno rese visibili.

    Potresti scaricare il mio file di prova Bigigio0180424.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-04-24T08:20:53+00:00

    Ciao Norman,

    ti ringrazio molto per l'aiuto e mi scuso per la mia imprecisione.

    Ho provato il codice adattato e funziona.

    C'è la possibilità di attivare la macro in automatico ogni volta che si sceglie un anno sportivo dal menù, oppure l'unico modo è prevedere un bottone che attivi la macro ogni volta che ci si clicca sopra?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-04-23T17:53:39+00:00

    Ciao Bigigio,

    grazie mille per questo primo aiuto che però non funziona come mi piacerebbe.

    Come vedrai dall'esempio, le righe da nascondere partono dalla riga 10 ed il range delle celle da prendere in esame vanno dalla J alla Y.

    Io ho provato ad usare la macro che mi hai inviato ma non riesco a farla funzionare anche cambiando i parametri (nome del figlio1, celle e righe).

    Come posso procedere?

    Ecco il link al file di esempio

    https://1drv.ms/x/s!ArenHzHMCMqGadOWdcscNczVaXw

    Il mio codice non ha funzionato con i tuoi dati perchè, tra l'altro, nel foglio Riepilogo, non si tratta di celle vuote ma invece di celle  con formule che possono restituire una stringa vuota. Una cella che contiene una formula non può mai essere vuota, anche se, nel caso di una formula che resituisce una stringa vuota, non si visualizzerebbe nulla nella  corrispondente cella.

    Pertanto, prova il seguente adattamento del mio precedente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range, Rng2 As Range, rRow As Range

        Dim i As Long, j As Long

        Dim LRow As Long

        Dim CalcMode As Long

        Dim bHide As Boolean

        Const sFoglio As String = "Riepilogo"       '<<=== Modifica

        Const sColonne As String = "J:Y"                '<<=== Modifica

        Const sPrimaRiga As Long =10             '<<=== Modifica

        Set WB = ThisWorkbook 

        Set SH = WB.Sheets(sFoglio)

          On Error GoTo XIT

            With Application

                .Calculation = xlCalculationManual

                .ScreenUpdating = False

            End With

        With SH

            Set Rng = .Cells(sPrimaRiga, "E").CurrentRegion

            Set Rng2 = Intersect(Rng, .Rows(sPrimaRiga).Resize(30), .Columns(sColonne))

        End With

        For Each rRow In Rng2.Rows

            bHide = False

            With rRow

                For j = 1 To .Columns.Count

                    bHide = .Cells(j).Value = vbNullString

                    If bHide = False Then Exit For

                Next j

                rRow.EntireRow.Hidden = bHide

            End With

        Next rRow

    XIT:     With Application

            .Calculation = xlCalculationAutomatic

            .ScreenUpdating = True

        End With

    End Sub

    '<<=========

    Potresti scaricare il mio file di prova Bigigio#2_0180423.xlsm.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-04-23T15:33:03+00:00

    Ciao Norman,

    grazie mille per questo primo aiuto che però non funziona come mi piacerebbe.

    Come vedrai dall'esempio, le righe da nascondere partono dalla riga 10 ed il range delle celle da prendere in esame vanno dalla J alla Y.

    Io ho provato ad usare la macro che mi hai inviato ma non riesco a farla funzionare anche cambiando i parametri (nome del figlio1, celle e righe).

    Come posso procedere?

    Grazie mille

    Ecco il link al file di esempio

    https://1drv.ms/x/s!ArenHzHMCMqGadOWdcscNczVaXw

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-04-23T14:45:24+00:00

    Ciao Bigigio,

    dovrei risolvere un problema di questo tipo:

    Ho creato un file excel con due fogli.

    Nel secondo ho un range di 10 stagioni sportive. In ogni stagione sportiva si svolgono dei corsi che non sono uguali per tutti gli anni. In ogni corso inserisco dei dati.

    Nel foglio1 si sceglie l'anno sportivo ed in base alla scelta si visualizzano le cifre relative ai corsi svolti in quell'anno.

    Arrivo ora al problema che vorrei risolvere.

    Come ho scritto prima, nelle diverse stagioni sportive ci sono dei corsi che si ripetono, altri che non vengono svolti sempre, altri ancora che sono presenti una sola volta.

    Nel foglio uno io ho inserito l'elenco di tutti i corsi svolti nelle diverse stagioni sportive, per cui, a seconda dell'anno scelto, ci saranno delle righe che risulta senza nessun dato al loro interno.

    Come faccio a nascondere le righe relative ai corsi non effettuati in quell'anno in modo tale da visualizzare solo quelli che presentano dei dati?

    Spero di essere riuscito a spiegarmi correttamente.

    Come faccio a caricarvi il file di esempio?

    Per caricare un file di esempio, utilizza Microsoft OneDrive o DropBox e pubblica un link al file in una risposta qui.

    Per caricare il file su DropBox, vedi:

    https://www.dropbox.com/it/help/topics/sharing_files_and_folders

    Per caricare il file su Microsoft OneDrive, vedi:

    https://support.office.com/it-it/article/Condividere-file-e-cartelle-di-OneDrive-9fcc2f7d-de0c-4cec-93b0-a82024800c07

    Nel frattempo, forse prova qualcosa del genere :

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

     '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range, rRow As Range

        Dim LRow As Long

        Dim CalcMode As Long

        Const sFoglio As String = "Foglio1"       '<<=== Modifica

        Const sColonne As String = "A:K"           '<<=== Modifica

        Const sRigaIntestazioni As Long = 3       '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        With Application

            CalcMode = .Calculation

            .Calculation = xlCalculationManual

            .ScreenUpdating = False

        End With

        With SH

            LRow = LastRow(SH)    ', .Columns(sColonne))

            Set Rng = Intersect(.Columns(sColonne), _

                                Rows(sRigaIntestazioni & ":" & LRow))

        End With

        For Each rRow In Rng.Rows

            rRow.Hidden = Application.CountA(rRow) = 0

        Next rRow

    XIT:

        With Application

            .Calculation = CalcMode

            .ScreenUpdating = True

        End With

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1, _

                            Optional sPassword As String)

        Dim bProtected As Boolean

        With SH

            If Rng Is Nothing Then

                Set Rng = .Cells

            End If

            bProtected = .ProtectContents = True

            If bProtected Then

                .Unprotect Password:=sPassword

            End If

        End With

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

        If bProtected Then

            SH.Protect Password:=sPassword, _

                       UserInterfaceOnly:=True

        End If

    End Function

    '<<========= 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento