Risolto Creazione multipla di pdf da elenco excel con sostituzione filtro in tabella pivot

Cristian76

Utente junior
15 Dicembre 2018
23
1
3
2016
0
Ciao ges,
ti ringrazio moltissimo delle indicazioni e della pazienza... penso però che sopravvaluti le mie capacità vba, che sono decisamente sotto allo zero...
la tua spiegazione è stata chiarissima, capisco il senso di quello che dici ma mi mancano gli strumenti per metterlo in pratica.
Ho provato a sostituire "ActiveSheet" con "Select" ... non funziona, ho provato a sostituire "Select" con "ActiveSheet", non funziona...
Quindi non saprei... come si corregge il codice?
Porta pazienza 🙏
Grazie!
Cristian
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
17.669
703
113
Como
2011MAC 2016WIN
294
Copia questa macro nel tuo file, poi salva il file e poi avvia la macro.

Visual Basic:
Sub creaPDF()
    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    If Not FileSystemObj.folderExists("Prova") Then
        FileSystemObj.CreateFolder "Prova"
    End If
    percorso = ThisWorkbook.Path & "\Prova\"
    With Foglio3
        uR = .Cells(Rows.Count, 1).End(xlUp).Row
        For j = 4 To uR
            Foglio5.Cells(3, 2) = .Cells(j, 1)
            Foglio5.Cells(4, 2) = .Cells(j, 2)
            nomefile = "Esempio " & .Cells(j, 1)
            Sheets(Array("Conteggi", "Estrazione")).Select
            Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & nomefile
        Next j
    End With
    MsgBox "Fatto!", vbInformation, "NOTIFICA"
End Sub
 

Cristian76

Utente junior
15 Dicembre 2018
23
1
3
2016
0
Ciao ges,
stò impazzendo :dubbioso:
Ho provato la tua macro ma purtroppo mi apre il debug evidenziando la riga:
Visual Basic:
            Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & nomefile
In ogni caso, il codice mi sembra preveda qualcosa di diverso da quello che ho scritto: lavora andando ad impostare i valori direttamente nel foglio5 (Estrazione) valori che invece si adattano in automatico. Quello che devo fare è impostare di volta in volta il C.F. (pescato dal foglio3 Aziende) nel filtro della Tabella pivot nel foglio4 (Conteggi).
Ti ringrazio molto per l'aiuto e l'enorme pazienza!
Cristian
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.537
273
83
Italy
2013 2019
114
Ti ho 'combinato' la macro di ges @ges con il mio filtro della pivot (non l'ho testato, ma in teoria dovrebbe funzionare):

Visual Basic:
Sub SalvaPDF()
    Dim FileSystemObj As Object
    Dim nomefile As String
    Dim percorso As String
    Dim ur As Long
    Dim j As Long
    Dim pf As PivotField
       
    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    If Not FileSystemObj.folderExists("Prova") Then
        FileSystemObj.CreateFolder "Prova"
    End If
    percorso = ThisWorkbook.Path & "\Prova\"
   
    With Worksheets("Aziende")
        ur = .Cells(.Rows.Count, 2).End(xlUp).Row
        For j = 4 To ur
            nomefile = .Cells(j, 2)
           
            ' applica il filtro alla tabella pivot2
            Set pf = Worksheets("Conteggi").PivotTables("Tabella pivot2").PivotFields(2)
            pf.ClearAllFilters
            pf.CurrentPage = nomefile
            Worksheets("Conteggi").Range("A2") = pf.CurrentPage
            Sheets(Array("Conteggi", "Estrazione")).Select
            Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & nomefile
        Next j
    End With
End Sub
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
17.669
703
113
Como
2011MAC 2016WIN
294
mi sembra preveda qualcosa di diverso da quello che ho scritto: lavora andando ad impostare i valori direttamente nel foglio5 (Estrazione) valori che invece si adattano in automatico.
Questo non lo so, sinceramente non ho più capito che fogli e che dati vanno compresi, io mi sono limitato a modificare la macro in base a quello che già c'era.

Prova con la macro di giulianovac @giulianovac cappello_saluta
 

Cristian76

Utente junior
15 Dicembre 2018
23
1
3
2016
0
Ti ho 'combinato' la macro di ges @ges con il mio filtro della pivot (non l'ho testato, ma in teoria dovrebbe funzionare):

Visual Basic:
Sub SalvaPDF()
    Dim FileSystemObj As Object
    Dim nomefile As String
    Dim percorso As String
    Dim ur As Long
    Dim j As Long
    Dim pf As PivotField
    
    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    If Not FileSystemObj.folderExists("Prova") Then
        FileSystemObj.CreateFolder "Prova"
    End If
    percorso = ThisWorkbook.Path & "\Prova\"

    With Worksheets("Aziende")
        ur = .Cells(.Rows.Count, 2).End(xlUp).Row
        For j = 4 To ur
            nomefile = .Cells(j, 2)
        
            ' applica il filtro alla tabella pivot2
            Set pf = Worksheets("Conteggi").PivotTables("Tabella pivot2").PivotFields(2)
            pf.ClearAllFilters
            pf.CurrentPage = nomefile
            Worksheets("Conteggi").Range("A2") = pf.CurrentPage
            Sheets(Array("Conteggi", "Estrazione")).Select
            Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & nomefile
        Next j
    End With
End Sub
Ciao Giuliano,
ho provato la tua macro, direi che ci siamo quasi, ho solo modificato un dettaglio (1 al posto di 2) nella riga:
nomefile=.Cells(j,1)

Rilevo due problemi:
1) la macro gira al primo C.F. e crea un pdf correttamente nominato ma che però contiene in ognuna delle due pagine le sole celle selezionate (se non avevo selezionato a mano nulla prima di lanciarla ottengo due pagine bianche);
2) al secondo C.F. la macro si pianta al:
Visual Basic:
pf.ClearAllFilters
(dirò una stupidaggine...forse perchè continuo ad avere due fogli selezionati contemporaneamente dall'esecuzione del primo C.F.??)
Come si potrebbe risolvere?
Giuliano ringrazio immensamente te e ges per il grande aiuto che mi state dando!
Un caro saluto
Cristian
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.537
273
83
Italy
2013 2019
114
Rilevo due problemi:
Anch'io! Il tuo file non ha tutti i dati corretti, sembra esservi degli errori nella pivot.

Ti allego il file con la macro 'perfezionata' che a me funziona, se vi sono i nomi corretti.
Nella finestra Immediata di VBA ti elencherà i nomi non trovati.

Visual Basic:
Sub SalvaPDF()
    Dim FileSystemObj As Object
    Dim nomefile As String
    Dim percorso As String
    Dim ur As Long
    Dim j As Long
    Dim pf As PivotField
        
    On Error GoTo SalvaPDF_Error

    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    If Not FileSystemObj.folderExists("Prova") Then
        FileSystemObj.CreateFolder "Prova"
    End If
    percorso = ThisWorkbook.Path & "\Prova\"
    
    With Worksheets("Aziende")
        ur = .Cells(.Rows.Count, 2).End(xlUp).Row
        For j = 4 To ur
            nomefile = .Cells(j, 2)
            Set pf = Worksheets("Conteggi").PivotTables("Tabella pivot2").PivotFields(2)
            On Error Resume Next
            pf.ClearAllFilters
            On Error GoTo SalvaPDF_Error            
            pf.CurrentPage = nomefile            
            Worksheets("Conteggi").Range("A2") = pf.CurrentPage

            ' seleziono le celle da stampare nei rispettivi fogli
            Worksheets("Conteggi").Activate
            Worksheets("Conteggi").Range("A1:B5").Select
            Worksheets("Estrazione").Activate
            Worksheets("Estrazione").Range("A1:B5").Select
            ' seleziono i due fogli
            Sheets(Array("Conteggi", "Estrazione")).Select
            ' genero il PDF
            Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=percorso & nomefile
PROSSIMO:
        Next j
    End With

    On Error GoTo 0
    Exit Sub

SalvaPDF_Error:
    Debug.Print "nomefile=" & nomefile
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure SalvaPDF of Modulo Modulo1" & vbCrLf & "nomefile=" & nomefile
    Resume PROSSIMO
End Sub
 

Allegati

Cristian76

Utente junior
15 Dicembre 2018
23
1
3
2016
0
Giuliano la macro funziona egregiamente!
Ti ringrazio per i commenti nel codice della macro che, per uno come me che non conosce il vba, sono oro colato...
Hai ragione, il file di esempio aveva errori nella tabella pivot 2.
Un grandissimo ringraziamento e te e ges per il grande aiuto che mi avete dato!
Un caro saluto
Critsian
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.537
273
83
Italy
2013 2019
114
Felice che tu abbia risolto.
Ricorda di impostare la discussione come RISOLTA (vedi mia firma se non sai come fare).
 

Sostieni ForumExcel

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