Il problema dei 3 corpi: Attraverso continenti e decadi, cinque amici geniali fanno scoperte sconvolgenti mentre le leggi della scienza si sgretolano ed emerge una minaccia esistenziale. Vieni a parlarne su TopManga.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Filtro serch text e autofit rows su celle unite

Ultimo Aggiornamento: 19/07/2019 09:57
Post: 4
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
20/06/2019 14:39

Buongiorno a tutti,
e sempre grazie in anticipo per il vostro preziosio suppporto e suggerimenti.
Continuo nelle mie esperienze con VBA ( e relativi auto incasinamenti)
Nel file in allegato ho un foglio xls dove, putroppo, alcune celle sono unite per argomento
ma nelle colonne a seguire ho la necessità di mantenere/visualizzare i dettagli per i sottorgomenti.
Ho inserito una search text che effettua la ricerca sulla colonna A3 (dove sono le celle unite).
A valle del testo digitato il filtro agisce visualizzando solo la prima riga associata alla cella
unita e nascondendo le altre.
Ho provado con diversi modi per fare un autofit delle sole celle nascote abbinate alla cella unita
provando dal row.autofit al orow al MergeArea ma sono riusito solo a far visualizzare tutta le riche
del foglio e non solo quelle interessate al merge con la cella unità.
L'idea sarebbe quella di passare le varibile del merge sulla cella selezionata dal filtro per poi fare l'autofit
delle righe interessate.
C'è una soluzione/suggerimento applicabile?
Grazie in anticipo
Un saluto
Stefano

Post: 5.710
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
20/06/2019 15:44

Celle Unite
Ciao Gigadipa, semplice togli le celle unite, o meglio righe unite.

Excel per ricerche ed altro non le sopporta vanno bene solo per un fatto estetico.

una soluzione, visto che che le "Attività Previste" non sono molte, puoi creare tante colonne quante sono le attività, una cosa del genere.



ho modificato solo le colonne non altro, per la macro vedi tu.

Ciao By Sal [SM=x423051]

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 695
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
20/06/2019 16:43

Ciao
In aggiunta all'ottimo suggerimento di bySal (un caro saluto) ti propongo un'altra soluzione utilizzando il tuo schema ma con una piccola variazione: invece della TextBox usa una convalida dati nelle celle A1:A2
Queste le macro.
Nel Modulo del Foglio
Private Sub Worksheet_Change(ByVal Target As Range)
ur = ActiveSheet.Cells(Rows.count, 4).End(xlUp).Row
If Not Intersect(Target, Range("A2")) Is Nothing Then
  If Target.Value = "" Then
    Sheets("Marius").ShowAllData
    Sheets("Marius").Cells(2, 1).Select
  Else
    Call Filtro
  End If
End If
End Sub

In un Modulo standard (io l'ho denominato Marius)
Option Explicit

Sub Filtro() 'by Marius44
Dim rng As Range, cella As Range
Dim ur As Long, x As Long, i As Long, a As Long, count As Long, j As Long
ur = Cells(Rows.count, 4).End(xlUp).Row
Set rng = Range("A5:D" & ur)
For Each cella In rng
  x = cella.MergeArea.count         'determino quante celle sono unite
  If cella.MergeCells = True Then   'se la cella è unita allora...
    cella.UnMerge                   'divido
      For i = 1 To x - 1            'riporto il valore su tutte le celle divise
        cella.Offset(i, 0) = cella.Value
      Next i
    End If
  Next cella
  'eseguo il filtro
  Range("A5:D" & ur).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Range("A1:A2"), Unique:=False
  'ripristino le celle unite
  a = 1
  Application.DisplayAlerts = False
  For j = 1 To 3    'per colonna
    For i = 6 To ur 'per riga
ripeti:
      If Cells(i, j) = Cells(i + a, j) Then
        count = count + 1
        a = a + 1
        GoTo ripeti
      ElseIf Cells(i, j) <> Cells(i + 1, j) Then
        Range(Cells(i - a + 1, j), Cells(i, j)).Merge
        a = 1
      End If
    Next i
  Next j
  Application.DisplayAlerts = True
End Sub


Fai sapere. Ciao,
Mario
Post: 4
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
20/06/2019 19:18

Re: Celle Unite
by sal, 20/06/2019 15.44:

Ciao Gigadipa, semplice togli le celle unite, o meglio righe unite.

Excel per ricerche ed altro non le sopporta vanno bene solo per un fatto estetico.

una soluzione, visto che che le "Attività Previste" non sono molte, puoi creare tante colonne quante sono le attività, una cosa del genere.



ho modificato solo le colonne non altro, per la macro vedi tu.

Ciao By Sal [SM=x423051]


Grazie Sal.
Immaginavo che la tabella postata,male si adatta ad essere elaborata. Quindi su tuo consiglio cercherò di semplificare il tutto come suggerito. O comunque nell'ottica di non unire le celle. Provo anche la soluzione proposta da Marius e vi do un feedback.
Grazie grazie
Ciao Stefano
Post: 5
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
20/06/2019 19:23

Marius44, 20/06/2019 16.43:

Ciao
In aggiunta all'ottimo suggerimento di bySal (un caro saluto) ti propongo un'altra soluzione utilizzando il tuo schema ma con una piccola variazione: invece della TextBox usa una convalida dati nelle celle A1:A2
Queste le macro.
Nel Modulo del Foglio
Private Sub Worksheet_Change(ByVal Target As Range)
ur = ActiveSheet.Cells(Rows.count, 4).End(xlUp).Row
If Not Intersect(Target, Range("A2")) Is Nothing Then
  If Target.Value = "" Then
    Sheets("Marius").ShowAllData
    Sheets("Marius").Cells(2, 1).Select
  Else
    Call Filtro
  End If
End If
End Sub

In un Modulo standard (io l'ho denominato Marius)
Option Explicit

Sub Filtro() 'by Marius44
Dim rng As Range, cella As Range
Dim ur As Long, x As Long, i As Long, a As Long, count As Long, j As Long
ur = Cells(Rows.count, 4).End(xlUp).Row
Set rng = Range("A5:D" & ur)
For Each cella In rng
  x = cella.MergeArea.count         'determino quante celle sono unite
  If cella.MergeCells = True Then   'se la cella è unita allora...
    cella.UnMerge                   'divido
      For i = 1 To x - 1            'riporto il valore su tutte le celle divise
        cella.Offset(i, 0) = cella.Value
      Next i
    End If
  Next cella
  'eseguo il filtro
  Range("A5:D" & ur).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Range("A1:A2"), Unique:=False
  'ripristino le celle unite
  a = 1
  Application.DisplayAlerts = False
  For j = 1 To 3    'per colonna
    For i = 6 To ur 'per riga
ripeti:
      If Cells(i, j) = Cells(i + a, j) Then
        count = count + 1
        a = a + 1
        GoTo ripeti
      ElseIf Cells(i, j) <> Cells(i + 1, j) Then
        Range(Cells(i - a + 1, j), Cells(i, j)).Merge
        a = 1
      End If
    Next i
  Next j
  Application.DisplayAlerts = True
End Sub


Fai sapere. Ciao,
Mario

Grazie Mario,
Provo la soluzione che mi hai inviato e ti aggiorno.

Pro futuro come scrivevo a bySal cerco di semplificare il foglio e quindi la relativa post elaborazione
Grazie della disponibilita'.
Ciao
Stefano
Post: 6
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
21/06/2019 15:16

Re:
Gigadipa, 20/06/2019 19.23:

Grazie Mario,
Provo la soluzione che mi hai inviato e ti aggiorno.

Pro futuro come scrivevo a bySal cerco di semplificare il foglio e quindi la relativa post elaborazione
Grazie della disponibilita'.
Ciao
Stefano



Ciao Mario,
ho fatto la prova e vedo che intercettata la variazione sul folgio scompatta le prime due celle unite ( come da codice) poi pero' non
esegue più nulla.
Faccio qualche altra verifica e ti aggiorno, dammi solo un poco di tempo che per qualche giorno non potro' effetuare altre prove.
Grazie Grazie
Ciao
Stefano
Post: 698
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
21/06/2019 15:51

Ciao Stefano
a me funziona regolarmente - ovviamente agisco sul Foglio("Marius") ed utilizzo la scelta in Convalida dati.

Cosa intendi per "scompatta le prime due celle unite"?
Prova mettere uno Stop davanti a questa riga
Stop 'ripristino le celle unite
e poi avanza passo dopo passo con F9

Ciao,
Mario
Post: 7
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
16/07/2019 11:56

Filtro serch text e autofit rows su celle unite
Buongiorno Marius44,
scusami se solo ora dopo quasi un mese, putroppo per impegni personali, riesco a dedicarmi nuovamente a nuovi esercizi/verifiche su VBA.
Relativamente alla tua proposta di soluzione del 21/06/2019,
ho provato a fare come da te indicato ma il risultato è che vedo
scompattare solo la cella unita della prima attività elencata, poi
niente più.
Effettuato anche la prova con lo "stop" per vedere cosa succede...dopo
e per quello che riesco a capire non fa più nulla...nel senso che non non riesegue il mercge delle celle.
Alllego nuovamente il file dove ho inserito il cosdice suggerito anche per capire dove ho sbagliato.
Grazie in antcipo.
Ciao
Stefano
Post: 712
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
16/07/2019 21:40

Ciao
La macro che ti avevo inviato era predisposta per un foglio i cui dati partivano dalla riga 6 e, inoltre, avevano una Convalida dati da cui scegliere per cosa filtrare.

Prendendo ad esempio il tuo Foglio2 inserisci in F1 Titolo Attività.
Quando vuoi fare un filtro inserisci in F2 la denominazione e lancia la macro che ho adattato alla nuova struttura del Foglio. Eccola:
Option Explicit

Sub Filtro() 'by Marius44

'adattata per Foglio2

Dim rng As Range, cella As Range
Dim ur As Long, x As Long, i As Long, a As Long, count As Long, j As Long
ur = Cells(Rows.count, 4).End(xlUp).Row
Set rng = Range("A2:D" & ur)
For Each cella In rng
  x = cella.MergeArea.count         'determino quante celle sono unite
  If cella.MergeCells = True Then   'se la cella è unita allora...
    cella.UnMerge                   'divido
      For i = 1 To x - 1            'riporto il valore su tutte le celle divise
        cella.Offset(i, 0) = cella.Value
      Next i
    End If
  Next cella
  'eseguo il filtro
  Range("A2:D" & ur).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Range("F1:F2"), Unique:=False
  'ripristino le celle unite
  a = 1
  Application.DisplayAlerts = False
  For j = 1 To 3    'per colonna
    For i = 3 To ur 'per riga
ripeti:
      If Cells(i, j) = Cells(i + a, j) Then
        count = count + 1
        a = a + 1
        GoTo ripeti
      ElseIf Cells(i, j) <> Cells(i + 1, j) Then
        Range(Cells(i - a + 1, j), Cells(i, j)).Merge
        a = 1
      End If
    Next i
  Next j
  Application.DisplayAlerts = True
End Sub


Mettila a confronto con l'altra e nota le differenze.
Ciao,
Mario
Post: 8
Registrato il: 06/05/2019
Città: ROMA
Età: 59
Utente Junior
2016
OFFLINE
19/07/2019 09:57

Filtro serch text e autofit rows su celle unite
Buongiorno Mario,
per prima cosa grazie.
La modifica che mi hai inviato funziona e sono riuscito a capire dove sbagliavo.
Ho provato a fare uno step in più (perdonatemi eventuali inesattezze):
Nel foglio1 per prova ho fatto girare il modulo1 con la modifica da te suggerita.
Nel foglio2 ho splittato la tua soluzione nel modulo2 (scompatta le celle unite) e nel modulo4 (fa il merge delle celle).
Poi invece di digitare in F2 il testo da cercare, ho inserito una casella di ricerca (TextBox)
da dove poi viene fatto nell’ordine lo scompattamento celle unite, il filtro e il ricompattamento .
Non dovendo trattare molti record penso possa andare. Forse su tanti record magari è lento ma non ho provato.
Posto la soluzione per condivisione e se puo’ essere utile ad altri.
Sempre grazie
Ciao
Stefano
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:12. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com