Domanda Macro copia dati filtrati..... in base alla data inserita

cristian69

Utente junior
7 Ottobre 2018
62
8
excel 2007
0
Buonasera, ho creato una semplice macro che alla pressione del pulsante filtra i dati da un foglio per copiarli in un altro. Solo che e statica NELLA COLONNA MB, vorrei che prendesse la data inserita nella scheda Operativi A3 per poi scegliere la colonna in base alle date della riga 12. SmileFace ... sembra facile, ma non sono in grado
Visual Basic:
Sub Macro2()
'
' Operativi Macro
'

'

    Application.ScreenUpdating = False 'nasconde
 
    'qui puliamo vecchi dati
    Range("A7:C302").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    
    'qui inseriamo il filtro
    Sheets("Giorni ferie").Select
    ActiveSheet.Range("$A$15:$QG$311").AutoFilter Field:=340, Criteria1:=Array( _
        "JOLLI", "L1", "L2", "S"), Operator:=xlFilterValues
        
   'qui copia i nomi ma il Range dovrebbe cambiare in base hai dati filtrati
    Range("D16:E311").Select
    Selection.Copy
    
    'incolla i nuovi dati
    Sheets("Operativi").Select
    Range("A7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
'QUI "MB" e la colonna data per la precisione la data e nella riga 12 con formato "[$-it-IT]ggg gg mmmm aa"
    Sheets("Giorni ferie").Select
    Range("MB16:MB311").Select
    Application.CutCopyMode = False
    Selection.Copy
    
   'incolliamo i dati
    Sheets("Operativi").Select
    Range("C7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        'qui rimettiamo apposto i filti e torniamo alla scheda iniziale
    Sheets("Giorni ferie").Select
    ActiveSheet.Range("$A$15:$QG$311").AutoFilter Field:=340
    Sheets("Operativi").Select
    
    Application.ScreenUpdating = True 'riattiva
    
End Sub
grazie in anticipo a chi puo aiutarmi
 

Allegati

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
La data nel foglio "Operativi" in A3 (30/09/2019), non esiste nel foglio "Giorni ferie" :dubbioso:
In questo caso qual'è il campo da filtrare?
 
  • Like
Reactions: cristian69

cristian69

Utente junior
7 Ottobre 2018
62
8
excel 2007
0
Gia vero :occhispalancati: ma solo perche per darvi un file di esempio ho dovuto distruggerlo, per ipotizzare la macro si potrebbe usare il 16/9/2019 che ce. Comunque dovrebbe funzionare con qualsiasi data si inserisceSaluto_saluto
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
Spero di aver interpretato bene la richiesta:
Visual Basic:
Sub Macro2()
    Dim miaData As Date
    Dim iField As Integer
   
    miaData = Sheets("operativi").Range("A3") 'variabile data da ricercare
   
    Do 'ciclo che ricerca la data e restituisce il campo
        iField = iField + 1
        If iField > Columns.Count Then Exit Sub
    Loop Until Cells(12, iField) = miaData

    Application.ScreenUpdating = False 'nasconde

    'qui puliamo vecchi dati
    Range("A7:C302").ClearContents
   
    'qui inseriamo il filtro
    Sheets("Giorni ferie").Range("$A$15:$QG$311").AutoFilter _
        Field:=iField, _
        Criteria1:=Array("JOLLI", "L1", "L2", "S"), _
        Operator:=xlFilterValues
       
   'qui copia i nomi ma il Range dovrebbe cambiare in base hai dati filtrati
    Sheets("Giorni ferie").Range("D16:E311").Copy
   
    'incolla i nuovi dati
    Sheets("Operativi").Range("A7").PasteSpecial Paste:=xlPasteValues
   
    'QUI "MB" e la colonna data per la precisione la data e nella riga 12 con formato "[$-it-IT]ggg gg mmmm aa"
    Sheets("Giorni ferie").Range(Cells(16, iField), Cells(311, iField)).Copy
   
   'incolliamo i dati
    Sheets("Operativi").Range("C7").PasteSpecial Paste:=xlPasteValues
       
    'qui rimettiamo apposto i filti e torniamo alla scheda iniziale
    Sheets("Giorni ferie").Range("$A$15:$QG$311").AutoFilter Field:=iField
 
    Application.ScreenUpdating = True 'riattiva
End Sub
 
  • Like
Reactions: cristian69

cristian69

Utente junior
7 Ottobre 2018
62
8
excel 2007
0
Grazie per laiuto a leggere il codice da profano sembra logico e interpretato quello che cercavo. pero non mi funziona ho provato anche a togliere
Visual Basic:
Application.ScreenUpdating
ma non si muove nulla. sembrerebbe che si blocchi nel loop, sembrerebbe a me che sono profano.
una domanda ma quale il valore di

Visual Basic:
Columns.Count
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
Probabilmente ho interpretato male la selezione iniziale.
[EDIT]: evidentemente non trova il valore cercato


[...]
una domanda ma quale il valore di
Visual Basic:
Columns.Count
avvia nella Finestra immediata (CTRL+G) del VBE (ALT+F11):
Codice:
MsgBox Columns.Count
e premi ENTER
 
Ultima modifica:
  • Like
Reactions: cristian69

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
Solo che e statica NELLA COLONNA MB, vorrei che prendesse la data inserita nella scheda Operativi A3
Se ho capito:
non puoi farlo perché nella colonna MB manca la data:

*LQLRLSLTLULVLWLXLYLZMAMB
12nulldom 22 settembre 19lun 23 settembre 19mar 24 settembre 19mer 25 settembre 19gio 26 settembre 19ven 27 settembre 19sab 28 settembre 19nullnullnullnull
13nullnullnullnullnullnullnullnullnullnullnull33
14nullnullnullnullnullnullnullnullnullnullnull9
15nullnullnullnullnullnullnullnullnullnullnullnull
16nullnullnullnullnullnullnullnullnullnullnullT
17nullnullnullnullnullnullnullnullnullnullnullS
18nullnullnullnullnullnullnullnullnullnullnullS
19nullnullnullnullnullnullnullnullnullnullnullS
20nullnullnullnullnullnullnullnullnullnullnullM
21nullnullnullnullnullnullnullnullnullnullnullN
22nullnullnullnullnullnullnullnullnullnullnullS
23nullnullnullnullnullnullnullnullnullnullnullS
24nullnullnullnullnullnullnullnullnullnullnullS
25nullnullnullnullnullnullnullnullnullnullnullL1
26nullnullnullnullnullnullnullnullnullnullnullS
27nullnullnullnullnullnullnullnullnullnullnullR
28nullnullnullnullnullnullnullnullnullnullnullS
29nullnullnullnullnullnullnullnullnullnullnullT
Giorni ferie
Quindi ci dovrebbe essere la DATA anche nella riga 12 della colonna MB (come hai nelle altre colonne recedenti)
Altrimenti come fa a trovare la colonna corrispondente alla data (che è in A3)?

Oltre a questo, dopo aver applicato il filtro, per la copia 'io selezionerei' solo le celle visibili quindi sostituirei questo:
Range("MB16:MB311").Select
con questo:
Range("MB16:MB311").SpecialCells(xlCellTypeVisible).Select

Intanto prova come suggerito (potrei aver capito male), poi pensiamo alla questione della data.
 
Ultima modifica:
  • Like
Reactions: cristian69

cristian69

Utente junior
7 Ottobre 2018
62
8
excel 2007
0
Ciao, ho applicato nel codice il tuo suggerimento e ho rifatto il file esempio perche nel ridurre il file per fare uno di esempio avevo pasticciato un poco. Ora la date corrisponde alla colonna R. Pero continua a non funzionare nulla... forse ho sbagliato la posizione della macro

Visual Basic:
Sub Macro2()
    Dim miaData As Date
    Dim iField As Integer
  
    miaData = Sheets("operativi").Range("A3") 'variabile data da ricercare
  
    Do 'ciclo che ricerca la data e restituisce il campo
        iField = iField + 1
        If iField > Columns.Count Then Exit Sub
    Loop Until Cells(12, iField) = miaData

    Application.ScreenUpdating = False 'nasconde

    'qui puliamo vecchi dati
    Range("A7:C302").ClearContents
  
    'qui inseriamo il filtro 'logicamente in questo esempio applica alla colonna della deta scelta R
    Sheets("Giorni ferie").Range("$A$15:$QG$311").AutoFilter _
        Field:=iField, _
        Criteria1:=Array("JOLLI", "L1", "L2", "S"), _
        Operator:=xlFilterValues
      
   'qui copia i nomi puliti solo quelli visibili dopo il filtro
    Sheets("Giorni ferie").Range(Cells(16, iField), Cells(311, iField)).SpecialCells(xlCellTypeVisible).Copy
  
    'incolla i nuovi dati
    Sheets("Operativi").Range("A7").PasteSpecial Paste:=xlPasteValues
  
    'QUI "R" e la colonna data per la precisione la data e nella riga 12 con formato "[$-it-IT]ggg gg mmmm aa" dati puliti
    Sheets("Giorni ferie").Range(Cells(16, iField), Cells(311, iField)).SpecialCells(xlCellTypeVisible).Copy
  
   'incolliamo i dati
    Sheets("Operativi").Range("C7").PasteSpecial Paste:=xlPasteValues
      
    'qui rimettiamo apposto i filti 
    Sheets("Giorni ferie").Range("$A$15:$QG$311").AutoFilter Field:=iField

    Sheets("Operativi").Select 'e torniamo alla scheda iniziale
 
    Application.ScreenUpdating = True 'riattiva
End Sub
 

Allegati

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
Ancora il ciclo Do...Loop non trova la data nel foglio Giorni ferie. :scoppola:
La data che cerchi (foglio Operativi, range A3) deve essere presente nel foglio Giorni ferie altrimenti esce dalla routine.

[EDIT]: noto adesso che la routine deve partire con il foglio Giorni ferie selezionato, altrimenti bisogna assegnare una variabile per il foglio da filtrare.
 
Ultima modifica:
  • Like
Reactions: cristian69

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
cristian69 @cristian69
Concordo con Rubik72 @Rubik72 (che saluto cappello_saluta)

La tua nuova macro inizia con:
Visual Basic:
Do 'ciclo che ricerca la data e restituisce il campo
        iField = iField + 1
        If iField > Columns.Count Then Exit Sub
Loop Until Cells(12, iField) = miaData
Ma TU ha verificato, facendo il DEBUG, cosa fanno quelle istruzioni?
1. Non essendo riferite ad un foglio specifico, agiranno su ActiveSheet TestateSulMuro
che non è il foglio corretto

2. In qualsiasi caso (anche se referenzi il foglio giusto), nell'sitruzione
If iField > Columns.Count Then Exit Sub
Columns.Count è sempre uguale a 16384 che è sbagliatoTestateSulMuro

E qui mi fermo.
 
  • Like
Reactions: cristian69

cristian69

Utente junior
7 Ottobre 2018
62
8
excel 2007
0
Grazie per la pazienza e per avermi indicato la via giusta.
Forse non sara il più bello dei codici, ma di sicuro funziona bene grazie .

Sub MacroGeneraElenco()

Application.ScreenUpdating = False 'nasconde

Dim miaData As Date
Dim iField As Integer

miaData = Sheets("operativi").Range("M3") 'variabile data da ricercare

'qui puliamo vecchi dati
Range("B6:C320").ClearContents
Range("E6:F320").ClearContents

'ciclo che ricerca la data e restituisce il campo
Sheets("Giorni ferie").Select
Do
iField = iField + 1
If iField > Columns.Count Then Exit Sub
Loop Until Cells(12, iField) = miaData

'qui inseriamo il filtro
Sheets("Giorni ferie").Range("$A$16:$QG$311").AutoFilter _
Field:=iField, _
Criteria1:=Array("L1", "L2", "S"), _
Operator:=xlFilterValues

'qui copia i nomi puliti solo quelli visibili dopo il filtro
Sheets("Giorni ferie").Range("D17:E311").SpecialCells(xlCellTypeVisible).Copy

'incolla i nuovi dati
Sheets("Operativi").Range("B7").PasteSpecial Paste:=xlPasteValues

'qui rimettiamo apposto i filti
Sheets("Giorni ferie").Range("$A$16:$QG$311").AutoFilter Field:=iField

Sheets("Giorni ferie").Range("$A$16:$QG$311").AutoFilter _
Field:=iField, _
Criteria1:=Array("JOLLI"), _
Operator:=xlFilterValues

Sheets("Giorni ferie").Range("D17:E311").SpecialCells(xlCellTypeVisible).Copy

Sheets("Operativi").Range("E7").PasteSpecial Paste:=xlPasteValues

Sheets("Giorni ferie").Range("$A$16:$QG$311").AutoFilter Field:=iField


Sheets("Operativi").Select 'e torniamo alla scheda iniziale

Application.ScreenUpdating = True 'riattiva
End Sub
 

Sostieni ForumExcel

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