Condividi:        

Far prendere un collasso alle righe obsolete

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Far prendere un collasso alle righe obsolete

Postdi Alessandro999 » 02/03/18 18:49

Codice: Seleziona tutto
righe = Cells(Rows.Count, 1).End(xlUp).Row

For I = righe To 1 Step -1

Cells(I, 2).Select

If Selection.Value = "N" Then ActiveSheet.Outline.ShowLevels RowLevels:=1               ' 1 collassa 2 espandi

Next I




Salve a tutti, in questi giorni di Burian ho bisogno di un aiuto per finire una cosa che rimandavo da tempo... Su un foglio protetto (perchè non voglio si possa vedere il contenuto di alcune celle e per evitare che alcune vengano sovrascritte), vorrei poter espandere o collassare alcune righe che sono singolarmente raggruppate. (non tutte solo quelle che presentano un certo carattere in una apposita cella della stessa riga)

Faccio un esempio con una riga : Prendiamo a caso la riga 15, se l'utente mette il carattere (N) come nascondi in (B15), la macro dovrebbe far collassare tale riga, altrimenti la deve lasciare espansa.

In pratica se l'utente inserisce il carattere N e preme sull' apposito pulsante che lancia la macro, questa fa collassare la riga, mentre se trova la cella vuota lascia la riga espansa.

Se possibile vorrei chiedere se si puo' introdurre una seconda opzione, cioe il carattere (V) nel senso che se l'utente inserisce (N) la riga collassa , ma poi se in un secondo momento l'utente decide di espandere la riga per riconsultarne il contenuto allora basta che metta il carattere (V) come visibile al posto della (N) di nascondi e la riga si espande nuovamente.


Note:

Tutte le righe del foglio come si vede hanno la funzione di raggruppamento

Da una riga all' altra vi è una riga vuota, in alcuni casi potrebbero esserci più di una riga vuota, perchè c'è una macro che messa in funzione cancella le righe che contengono dati che non servono più.

Il foglio ha anche una macro che predispone nuove righe in fondo a quelle già presenti.

Sotto posto un' immagine del foglio di calcolo dove si vedono le varie righe tutte espanse.


P.S Per la cronaca lo spezzone di codice proviene da una macro di Anthony.... eccetto la penultima riga, ecco perchè non funziona :)

GRAZIE per la vostra attenzione e buona serata.

Immagine
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Sponsor
 

Re: Far prendere un collasso alle righe obsolete

Postdi Marius44 » 02/03/18 19:03

Ciao
Se ho capito bene dovrebbe essere sufficiente inserire il codice nell'Evento Worksheet_Change, sia nel caso della N (nascondere) sia nel caso di V (visualizzare).
L'unico problema starebbe nel come inserire una V (cioè cambiare la N) se la riga è nascosta. Ma se, come dici e vedo, tutte le righe hanno la funzione di raggruppamento, basta cliccare sul più e la riga torna visibile e, quindi, togli la N senza necessità di inserire la V.

Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Far prendere un collasso alle righe obsolete

Postdi Alessandro999 » 03/03/18 10:45

ciao Marius, ho provato ad inserire il codice nel foglio con l' Evento Worksheet_Change ma mi crea altri problemi,non funziona bene se clicco in altri pulsanti con alcune macro collegate non funzionano (vedi barra arancione su immagine) post precedente.

Poi mi hai fatto giustamente notare che quando la riga è nascosta la V dove la metti ? per la riga una volta collassata non è possibile estenderla perchè il foglio è protetto, vedi codice seguente, ogni macro presente contiene le due righe di codice seguenti per impedire si inseriscano dati nelle celle che contengono formule, sono righe lunghe che vanno da A a DJ con celle dove si va a inserire numeri e celle adiacenti che contengono formule.

Se possibile mi sarebbe più indicata una macro da inserire in un modulo da attivare solo quando occorre con un classico pulsante, mentre per far tornere visibili le righe nascoste potrei ripiegare sempre con il carattere V messo in una cella che nel foglio è sempre visibile diciamo C1, in cui se l 'utente mette la V tutte le righe nascoste si espandono, (in questo modo a differenza di una riga specifica si espanderebbero tutte... ma mi accontento, va bene lo stesso)

Grazie per la risposta.


Codice: Seleziona tutto
Sheets("ELENCO").Unprotect Password:="password"


Codice: Seleziona tutto
Sheets("ELENCO").Protect Password:="19dragonfly"




Riepilogo Il codice seguente non funziona

Codice: Seleziona tutto
Sub Nascondi_Obsoleti()

Sheets("ELENCO").Unprotect Password:="PASSWORD"

righe = Cells(Rows.Count, 1).End(xlUp).Row

For I = righe To 1 Step -1

Cells(I, 2).Select

If Selection.Value = "" Then ActiveSheet.Outline.ShowLevels RowLevels:=1   ' 1 chiudi

Next I

Sheets("ELENCO").Protect Password:="PASSWORD"

End Sub
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Far prendere un collasso alle righe obsolete

Postdi Marius44 » 03/03/18 13:28

Ciao
per poter dare risposte sensate sarebbe bene avere il file (senza dati sensibili, ma fai presto a metterne di fasulli) sul quale poter lavorare.
In merito all'ultima domanda (il seguente codice non funziona) tu stai dicendo ad Excel di salire dall'ultima cella piena, controllare se la cella relativa al ciclo della colonna 2 è vuota, e se è vuota nasconde il livello. Ma mi pare che tua abbia detto che non sempre vi sono righe vuote da nascondere (" in alcuni casi potrebbero esserci più di una riga vuota ").
Se possibile, è meglio vedere il file anche per capire quali sono " alcune macro collegate non funzionano "

Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Far prendere un collasso alle righe obsolete

Postdi Anthony47 » 04/03/18 00:36

Mah... una possibile alternativa potrebbe essere questa macro di Worksheet_SelectionChange, che impedisce la selezione di aree se in colonna B c'e' "N":
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim tCell As Range
If Application.Intersect(Target, Range("B:B")) Is Nothing Or Target.Columns.Count > 1 Then
    If Application.WorksheetFunction.CountIf(Cells(Target.Range("A1").Row, 2).Resize(Target.Rows.Count, 1), "N") > 0 Then
        Cells(Target.Range("A1").Row, 2).Resize(Target.Rows.Count, 1).Select
    End If
End If
End Sub

Partendo da Excel, fai tasto dx sul tab col nome foglio, scegli Visualizza codice; copia il codice e incollalo nella finestra del vba che si e' aperta.

Poi torna su excel e prova a selezionare una cella /un'area e vedi l'effetto a seconda che colonna B contenga N o altro.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Far prendere un collasso alle righe obsolete

Postdi Alessandro999 » 04/03/18 10:59

Leggo bene ora le nuove risposte, grazie Marius, per il foglio dovrei togliere un mucchio di cose vedo se e cosa posso fare, Anthony vedo anche la tua risposta... nel frattempo mi ero arrangiato in questo modo per nascondere le righe:

Codice: Seleziona tutto
Sub raggruppa_righe()

Dim ultA As Long

Dim riga As Long

With Sheets("ELENCO")

    ultA = .Range("B" & Rows.Count).End(xlUp).Row
   
    For riga = ultA To 1 Step -1
       
        If .Cells(riga, 2).Value = "n" Then Rows(riga).Hidden = True           
   
    Next riga

End With

End Sub



e in quest' altro per renderle visibili tramite pressione di un semplice pulsante associato:

Codice: Seleziona tutto
Sub righe_tutte_aperte()

ActiveSheet.Outline.ShowLevels RowLevels:=2

End Sub


nel messaggio seguente
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Far prendere un collasso alle righe obsolete

Postdi Alessandro999 » 04/03/18 11:47

Anthony ho seguito le tue istruzioni, inserendo la macro e in caso di presenza del carattere "N" nelle celle di alcune righe della colonna B viene impedita la modifica e la selezione di altre celle di tale riga.

La mia intenzione però era quella di nascondere le righe che nella loro cella di colonna B contengono il carattere N

Siccome il foglio è protetto (per proteggere le celle che contengono formule) non è possibile far colassare il raggruppamento (ogni singola riga ha la funzione di raggruppamento)

Vorrei poter collassare certe righe per rendere più leggibile il foglio, perchè con il tempo diventano molte e a una certa scadenza poi alcune righe non servono (quasi) più, quindi se fossero invisibili sarebbe meglio.

Per il (quasi) scritto sopra intendo che la riga non posso cancellarla perchè sul foglio di calcolo ci sono delle celle che contengono la formula somma.... per dare un importo generale di certe colonne.

La macro che ho postato un paio di post sopra, anzi la rimetto qui sotto. sembra funzionare ho cambiato il pezzo di codice:

If .Cells(riga, 2).Value = "n" Then ActiveSheet.Outline.ShowLevels RowLevels:=1

in

If .Cells(riga, 2).Value = "n" Then Rows(riga).Hidden = True

Non capisco perchè nel secondo caso funziona e nel primo no. :-?

Qui sotto riposto il codice... può andare bene/creare problemi in alcuni casi.... non so.... si può scrivere in maniera diversa per renderlo più veloce.

Grazie di tutto.


Codice: Seleziona tutto
Sub raggruppa_righe()

Dim ultA As Long

Dim riga As Long

With Sheets("ELENCO")

    ultA = .Range("B" & Rows.Count).End(xlUp).Row
   
    For riga = ultA To 1 Step -1
       
        If .Cells(riga, 2).Value = "n" Then Rows(riga).Hidden = True           
   
    Next riga

End With

End Sub
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Far prendere un collasso alle righe obsolete

Postdi Anthony47 » 05/03/18 00:22

Si, l'alternativa che ti avevo proposto io consisteva nell'impedire di selezionare righe marcate "n", nell'ipotesi che l'obiettivo fosse impedirne la modifica.

Comunque mi pare che una soluzione funzionante e abbastanza soddisfacente ce l'hai gia'; o no?
Se hai problemi con la protezione del foglio allora puoi sempre sproteggere il foglio all'inizio della macro e riproteggere alla fine; tipo
Codice: Seleziona tutto
Sub MiaMacro()
Sheets("pippo").Unprotect Password:="Segretissima"
'codice
'codice
Sheets("pippo").Protect Password:="Segretissima"
End Sub

Quanto alla velocita', temo che con le righe separate non si possa fare molto.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Far prendere un collasso alle righe obsolete

Postdi Alessandro999 » 05/03/18 10:10

Anthony47 ha scritto:Si, l'alternativa che ti avevo proposto io consisteva nell'impedire di selezionare righe marcate "n", nell'ipotesi che l'obiettivo fosse impedirne la modifica.

Comunque mi pare che una soluzione funzionante e abbastanza soddisfacente ce l'hai gia'; o no?
Se hai problemi con la protezione del foglio allora puoi sempre sproteggere il foglio all'inizio della macro e riproteggere alla fine; tipo
Codice: Seleziona tutto
Sub MiaMacro()
Sheets("pippo").Unprotect Password:="Segretissima"
'codice
'codice
Sheets("pippo").Protect Password:="Segretissima"
End Sub

Quanto alla velocita', temo che con le righe separate non si possa fare molto.

Ciao


Grazie Anthony : ) , se dici che va bene sono tranquillo, per quanto riguarda il codice per sproteggere e riproteggere il foglio, li avevo già messi come di solito faccio sempre per far funzionare bene le macro (sono molto cauto) e per bloccare poi l'eventualità che si vada a scrivere in celle con formule, in alcuni post precedenti non si vedono perchè li ho tagliati via assieme a una pletora di righe di commenti che metto fra le righe di codice. :lol:

Buona Giornata Anthony.
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia


Torna a Applicazioni Office Windows


Topic correlati a "Far prendere un collasso alle righe obsolete":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti