Domanda Userform filtra data

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
Ciao

Per rimuovere i filtri sul foglio prova con:

Visual Basic:
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Nota: se utilizzi il codice:
ActiveSheet.ShowAllData
senza che l'elenco sia stato filtrato ottieni un errore.
funziona a metà :)
nel senso, che io ho il tasto che mi attiva l userform, che attiva i filtri , su un altro foglio, di conseguenza l activesheet non va bene.
se utilizzo arc però, non mi funziona.
ps ovviamente ho provato la macro con il foglio ,dove ce la tabella, e funziona.
 

Bruno

Utente abituale
Expert
13 Settembre 2015
804
43
Italy
365/64 Bit W10
68
Ciao

Ecco il suggerimento, da adattare nel tuo foglio (Modifica i riferimenti)

Visual Basic:
If Foglio2.FilterMode Then Foglio2.ShowAllData
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
Ciao

Per rimuovere i filtri sul foglio prova con:

Visual Basic:
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Nota: se utilizzi il codice:
ActiveSheet.ShowAllData
senza che l'elenco sia stato filtrato ottieni un errore.
hai ragione scusa,il link mi era stato suggerito da dracoscrigno...mi sono confuso io
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
Ciao

Non ti ho indicato nessun link
Se usi tabelle devi far riferimento alle tabelle.

Su un foglio puoi avere una sola area filtrata
Per superare questo limite puoi utilizzare più tabelle.



In questo link trovi come fare ad utilizzare le tabelle
https://www.forumexcel.it/forum/threads/matrice-da-un-range-specialcells-xlcelltypevisible.27976/
aspetta ho fatto casino io...sarà l orario... ARC non è una tabella,ma è una selezione di celle, appunto denominata ARC.
poiche quella selezione sia in formato tabella è un altro discorso.
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
buona domenica.
piano piano sto procedendo col mio file.
Visual Basic:
Private Sub cbt_ok_Click()
Dim c As Long
Dim arc As Range
'SCELTA OPZIONE PERIODO
'SCELTA PER MESE
'Dim sept As Integer

Set gennaiocas = chkb_gennaio
Set febbraiocas = chkb_febbraio
Set marzocas = chkb_marzo
Set aprilecas = chkb_aprile
Set maggiocas = chkb_maggio
Set giugniocas = chkb_giugno
Set lugliocas = chkb_luglio
Set agostocas = chkb_agosto
Set settembrecas = chkb_settembre
Set ottobrecas = chkb_ottobre
Set novembrecas = chkb_novembre
Set dicembrecas = chkb_dicembre

 jan = 21
 feb = 22
 mar = 23
 apr = 24
 may = 25
 jun = 26
 jul = 27
 aug = 28
 sept = 29
 ott = 30
 nov = 31
 dec = 32
 
 
If gennaiocas.Value = True Then c = jan Else
If febbraiocas.Value = True Then c = feb Else
If marzocas.Value = True Then c = mar Else
If aprilecas.Value = True Then c = apr Else
If maggiocas.Value = True Then c = may Else
If giugniocas.Value = True Then c = jun Else
If lugliocas.Value = True Then c = jul Else
If agostocas.Value = True Then c = aug Else
If settembrecas.Value = True Then c = sept Else
If ottobrecas.Value = True Then c = ott Else
If novembrecas.Value = True Then c = nov Else
If dicembrecas.Value = True Then c = dec Else


Set arc = Sheets("ARC").Range("ARC")
arc.AutoFilter Field:=1, Criteria1:=c, _
        Operator:=11, Criteria2:=0, SubField:=0
        
        
 'SCELTA RUOTA PER LA QUALE FILTRARE
 
    Set Bari = chkb_Bari
    Set Cagliari = chkb_Cagliari
    Set Firenze = chkb_Firenze
    Set Genova = chkb_Genova
    Set Milano = chkb_Milano
    Set Napoli = chkb_Napoli
    Set Palermo = chkb_Palermo
    Set Roma = chkb_Roma
    Set Torino = chkb_Torino
    Set Venezia = chkb_Venezia
        
 If Bari.Value = True Then Range("ARC[[BA]:[BA_4]]").Copy
  
  [B][U]  Dim activesheets As Range[/U][/B]
[U][B]    activesheets.Range("O3").Paste
    
 
If Sheets("ARC").FilterMode Then Sheets("ARC").AutoFilter.ShowAllData[/B][/U]
[B][U]        [/U][/B]
Unload Me


End Sub
Ora, sono bloccato sulla parte in grassetto e sottolineata.
l intento è che dopo aver filtrato la tabella,nel foglio1, prenda delle colonne e le copi, nel foglio 2,dove c'è il tasto filtra per intenderci, in una cella, ad esempio O3.
Arriva fino alla copiatura, poi però non me le incolla.
 

Bruno

Utente abituale
Expert
13 Settembre 2015
804
43
Italy
365/64 Bit W10
68
Ciao

Puoi spiegare questa riga?
Visual Basic:
Range("ARC[[BA]:[BA_4]]").Copy
togli il .Copy ed inserisci: .Select
Descrivi quale selezione ottieni
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
Ciao

Puoi spiegare questa riga?
Visual Basic:
Range("ARC[[BA]:[BA_4]]").Copy
togli il .Copy ed inserisci: .Select
Descrivi quale selezione ottieni
ba:ba_4 praticamente sono le colonne dei 5 numeri sulla ruota di bari.
il nome delle colonne sono:
BA
BA_1
BA_2
BA_3
BA_4
e si ripete per ogni ruota(ovviamente cambi le iniziali CA=CAGLIARI ve=VENEZIA ECC).
In questo caso,seleziona B:F ossia le colonne B,C,D,E,F , ovviamente con i valori filtrati.

la riga, che hai quotato, in teoria funziona, perchè effettivamente viene selezionato quell intervallo.
ps l ho scritta cosi, perchè ho fatto la registrazione della macro e ho ottenuto il seguente codice:

Visual Basic:
Sub COPIA()
'
' COPIA Macro
'

'
    Sheets("ARC").Select
    ActiveSheet.ListObjects("ARC").Range.AutoFilter Field:=1, Criteria1:=21, _
        Operator:=11, Criteria2:=0, SubField:=0
    Range("ARC[[BA]:[BA_4]]").Select
    Selection.Copy
    Sheets("Analisi Mensile").Select
    Range("O3").Select
    ActiveSheet.Paste
End Sub
ho pensato, per non vedere lo spostamente in un altro foglio, che saltando Range("ARC[[BA]:[BA_4]]").Select e mettendolo al posto di selection in "selection.Copy" avrei risparmiato una riga di codice, e a monitor non avrei visto il passaggio da un foglio all altro
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
19.319
713
66
Napoli
2013
356
Per non vedere a schermo il passaggio tra un foglio e l’altro devi usare

Codice:
Application.ScreenUpdating = False/True
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
Per non vedere a schermo il passaggio tra un foglio e l’altro devi usare

Codice:
Application.ScreenUpdating = False/True
si ma non c'è un metodo, per saltare la selezione , o meglio, l attivazione del foglio1, la selezione dell intervallo, l attivazione del foglio2 ,selezione della cella e poi incollare?
cioè, so che l intervallo da selezionare, in larghezza è sempre lo stesso, cambierà solamente in altezza, in base a quante righe filtrate ci saranno.
quindi so che per ogni ruota le colonne sono quelle, non posso sfruttare questa cosa?
devo per forza, passare da un foglio all altro?
 

furious84

Utente abituale
27 Agosto 2018
111
16
excel 365
0
non ne salto fuori.
Visual Basic:
Private Sub cbt_ok_Click()
Dim c As Long
Dim arc As Range
'SCELTA OPZIONE PERIODO
'SCELTA PER MESE
'Dim sept As Integer

Set gennaiocas = chkb_gennaio
Set febbraiocas = chkb_febbraio
Set marzocas = chkb_marzo
Set aprilecas = chkb_aprile
Set maggiocas = chkb_maggio
Set giugniocas = chkb_giugno
Set lugliocas = chkb_luglio
Set agostocas = chkb_agosto
Set settembrecas = chkb_settembre
Set ottobrecas = chkb_ottobre
Set novembrecas = chkb_novembre
Set dicembrecas = chkb_dicembre

 jan = 21
 feb = 22
 mar = 23
 apr = 24
 may = 25
 jun = 26
 jul = 27
 aug = 28
 sept = 29
 ott = 30
 nov = 31
 dec = 32
 
 
If gennaiocas.Value = True Then c = jan Else
If febbraiocas.Value = True Then c = feb Else
If marzocas.Value = True Then c = mar Else
If aprilecas.Value = True Then c = apr Else
If maggiocas.Value = True Then c = may Else
If giugniocas.Value = True Then c = jun Else
If lugliocas.Value = True Then c = jul Else
If agostocas.Value = True Then c = aug Else
If settembrecas.Value = True Then c = sept Else
If ottobrecas.Value = True Then c = ott Else
If novembrecas.Value = True Then c = nov Else
If dicembrecas.Value = True Then c = dec Else


Set arc = Sheets("ARC").Range("ARC")
arc.AutoFilter Field:=1, Criteria1:=c, _
        Operator:=11, Criteria2:=0, SubField:=0
        
        
[B] 'SCELTA RUOTA PER LA QUALE FILTRARE
 
    Set Bari = chkb_Bari
    Set Cagliari = chkb_Cagliari
    Set Firenze = chkb_Firenze
    Set Genova = chkb_Genova
    Set Milano = chkb_Milano
    Set Napoli = chkb_Napoli
    Set Palermo = chkb_Palermo
    Set Roma = chkb_Roma
    Set Torino = chkb_Torino
    Set Venezia = chkb_Venezia
    
    Dim BA As Range
    Dim CA As Range
    Dim FI As Range
    Dim GE As Range
    Dim MI As Range
    Dim NA As Range
    Dim PA As Range
    Dim RO As Range
    Dim TOR  As Range
    Dim VE As Range
    
      BA = Worksheet("arc").Range("ARC[[BA]:[BA_4]]").Select
    'CA = Range("ARC[[CA]:[CA_4]]").Copy
    'FI = Range("ARC[[FI]:[FI_4]]").Copy
    'GE = Range("ARC[[GE]:[GE_4]]").Copy
    'MI = Range("ARC[[MI]:[MI_4]]").Copy
    'NA = Range("ARC[[NA]:[NA_4]]").Copy
    'PA = Range("ARC[[PA]:[PA_4]]").Copy
    'RO = Range("ARC[[RO]:[RO_4]]").Copy
    'TOR = Range("ARC[[TOR]:[TOR_4]]").Copy
    'VE = Range("ARC[[VE]:[VE_4]]").Copy
    
If Bari.Value = True Then BA.Copy
 'If Cagliari.Value = True Then CA
 'If Firenze.Value = True Then FI
 'If Genova.Value = True Then GE
 'If Milano.Value = True Then MI
 'If Napoli.Value = True Then NA
 'If Palermo.Value = True Then PA
 'If Roma.Value = True Then RO
 'If Torino.Value = True Then TOR
 'If Venezia.Value = True Then VE
  

    ActiveWorkbook.Sheets("Analisi Mensile").Range("O3").Select
    ActiveSheet.Paste[/B]
    
  ' FA IL RESET DEL FILTRO
If Sheets("ARC").FilterMode Then Sheets("ARC").AutoFilter.ShowAllData
     'CHIUDE L USERFORM
Unload Me


End Sub
la parte in grassetto dovrebbe fare per ogni ruota questa operazione, nel caso in cui la casella corrispondente sia selezionata:
Visual Basic:
Sub COPIA()
'
' COPIA Macro
'

'
    Sheets("ARC").Select
    ActiveSheet.ListObjects("ARC").Range.AutoFilter Field:=1, Criteria1:=21, _
        Operator:=11, Criteria2:=0, SubField:=0
    Range("ARC[[BA]:[BA_4]]").Select
    Selection.Copy
    Sheets("Analisi Mensile").Select
    Range("N3").Select
    ActiveSheet.Paste
End Sub
ossia nel foglio ARC selezionare le colonne della ruota selezionata, e copiarle nel foglio Analisi Mensile in una certa cella.
registrando la macro ovviamente funziona, solo che vorrei velocizzare il procedimento, se possibile.
ovviamente la parte dove filtra , non serve inserirla nella parte in grassetto, ma solamente la copiatura.
ps nelle colonne, ci possono essere righe non consecutive, ad esempio 1,2,3,20,21,22,23,40,ecc lo specifico, perchè mi sembra d aver lettoci siano problemi a copiare celle non contigue.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!