tabella pivot con filtri



  • tabella pivot con filtri
    di cdm data: 15/11/2017 23:52:01

    Buongiorno,

    Sono un nuovo utente che ha preso spunto dal vostro blog per creare alcune macro,
    ora sono però ad un punto di stallo, e ho deciso di chiedere aiuto.

    A lavoro utilizzo un file che, attraverso una query, mi permette di vedere tutti i documenti inviati ai vari clienti, con le relative informazioni.
    Ho deciso di associare ad esso una tabella pivot che mi rende ordinati i dati che vedo, e mi permetta di filtrarli in modo semplice mettendo tra i filtri della tabella pivot i 4 dati più importanti.

    Ho dunque creato una finestra di dialogo in cui ho immesso 4 campi: data ddt, numero ddt, lotto e cliente. Ho poi creato la macro che verifica l'esistenza dei dati che voglio cercare, e poi li immette nei filtri tabella pivot ( scrive il dato che voglio cercare nel campo corretto, oppure scrive "(tutto)", senò la tabella va in errore per mancanza dato)

    Qui viene il bello: la data è un grosso problema, la tratto sempre come testo o come data, ma quando la immetto nella tabella pivot mi dice che l'elemento "43040" (11/01/2017) non è un elemento di questo campo. Il che è corretto, perché nella tabella pivot la data è nel formato consueto, ma non capisco dove la trasformi in un numero.

    Vi lascio il codice a cui sono arrivato io, se qualcuno mi può aiutare gliene sono grato.

    Grazie.
     
    Sub COMPILAPIVOT2()
    
        Sheets("PIVOT").Select
        Sheets("PIVOT2").Visible = True
        Sheets("PIVOT2").Select
        
      'variabili
      lotto = Val(DialogSheets("dialogo1").EditBoxes("Edit Box 11").Text)
      ddt = Val(DialogSheets("dialogo1").EditBoxes("Edit Box 12").Text)
      Data = DialogSheets("dialogo1").EditBoxes("Edit Box 13").Text
      cliente = Val(DialogSheets("dialogo1").EditBoxes("Edit Box 17").Text)
      tutto = "(Tutto)"
        
      'copia da dialogo a pivot
      Dim column As Range
      Dim cell As Range
      Dim strtest As String
      
      'verifica presenza data nella colonna relativa
      Set column = Sheets("DATI").Range("V:V")
      Set cell = column.Find(DateValue(Data))
      If cell Is Nothing Then
        Sheets("pivot2").Range("B2") = tutto
      Else
        'If Data <> "" Then
        strtest = Format(Data, "dd/mm/yyyy")
        Sheets("pivot2").Range("B2") = Data
      End If
      
      'verifica presenza ddt nella colonna relativa
      Set column = Sheets("DATI").Range("F:F")
      Set cell = column.Find(ddt)
      If cell Is Nothing Then
        Sheets("pivot2").Range("B3") = tutto
      Else
      '  If ddt <> "0" Then
        Sheets("pivot2").Range("B3") = ddt
      End If
      
      'verifica presenza lotto nella colonna relativa
      Set column = Sheets("DATI").Range("AE:AE")
      Set cell = column.Find(lotto)
      If cell Is Nothing Then
        Sheets("pivot2").Range("B4") = tutto
      Else
        'If lotto <> "0" Then
        Sheets("pivot2").Range("B4") = lotto
      End If
      
      'verifica presenza lotto nella colonna relativa
      Set column = Sheets("DATI").Range("I:I")
      Set cell = column.Find(cliente)
      If cell Is Nothing Then
        Sheets("pivot2").Range("B5") = tutto
      Else
        'If cliente <> "0" Then
        Sheets("pivot2").Range("B5") = cliente
      End If
      
    End Sub
    
    



  • di Luca73 data: 16/11/2017 11:07:46

    Gentilmente allega il tuo file con dati fittizi e non sensibile per permettere di fare dei test.
    Ciao
    Luca





  • di cdm data: 17/11/2017 12:43:54

    inserito allegato.

    Grazie.



  • di Luca73 data: 17/11/2017 13:37:34

    a me funzione abbastanza bene e non mi dà errore.

    Io aggiungerei un se all'inizio di ogni blocco che analizzi se nella form di ricerca c'è un valore altrimenti mette tutto
    Vedi esempio.
    Usando una data che esiste e il tuo file non mi dà errori.

     
        If Data = "" Then
            Sheets("pivot2").Range("B2") = tutto
        Else
            Set column = Sheets("DATI").Range("V:V")
            Set cell = column.Find(DateValue(Data))
            If cell Is Nothing Then
                Sheets("pivot2").Range("B2") = tutto
            Else
                'If Data <> "" Then
                strtest = Format(Data, "dd/mm/yyyy")
                Sheets("pivot2").Range("B2") = Data
            End If
        End If
    






  • di cdm data: 17/11/2017 14:23:28

    A me da: errore di run-time '1004: '43030' non è un elemento di questo campo.



  • di Luca73 data: 17/11/2017 14:46:39

    In effetti con i dati che hai passato mi sembra che il giorno 43030 ovvero il 22/10/2017 non esista nel DB a me infatti quella data mi da nothing con la ricerca....

    Il file che stai usando è uguale a quello che hai passato?

    su qullo che hai passato dà errore?






  • di cdm data: 17/11/2017 14:55:05

    Il file che ho passato è lo stesso in cui sto sviluppando la macro, poi passo tutto in quello ufficiale.
    Come data di prova io inserisco 11/01/2017, che è la prima data presente nel foglio dati.

    A questo punto non capisco perché la trasformi in 22/10/2017.



  • di cdm data: 23/11/2017 10:08:02

    Qualcuno riesce ad aiutarmi?

    Grazie.



  • di Luca73 data: 24/11/2017 09:19:27

    Ciao
    Io ho risolto scrivendo.
    Ho fatto un paio di prove e funziona.
    Fammi sapere.
    Ciao
    Luca
     
    Sheets("pivot2").Range("B2") = Format(Data, "dd/mm/yyyy")