› Sviluppare funzionalita su Microsoft Office con VBA › ELENCO PREZZI da PDF a EXcel
-
AutoreArticoli
-
Ciao a tutti,
Questa volta ho bisogno spudoratamente di voi,
In questi giorni sono stati emessi i nuovi elenchi prezzi dei lavori degl'enti pubblici.Come consuetudine li emettono in formato PDF,
E anche su richiesta non rilasciano le versioni editabili,
Quindi vengo al punto.
vi spiego cosa faccio e cosa mi serve,
apro il pdf copio tutti i testi e li incollo a partire dalla cella A1, premetto li incollo con formattazione testo.
Il risultato che ottengo e quello sul foglio1 del file allegato,
In pratica me li dispone in colonna per ogni riga copiata dal pdf.
E fin qui penso di aver Ben reso l'idea,
Poi cosa faccio aggiungo altre colonne dove con il 'SE' evidenzio con i colori in modo univoco articolo, descrizione, unita' misura, prezzo unitario e % manodopera,
Questo e l'unico modo che mi è venuto in mente.
Spero a voi venga in mente un metodo migliore.
Poi cosa faccio filtro per colore e faccio copia e incolla sul foglio Elenco,
Ma ho il problema con la descrizione e Cioè celle evidenziate in blu, avvolte sono anche 10 o 15 righe, quindi il numero di righe non sono mai costanti, essendo su più righe non riesco a unire sul foglio elenco, mi servirebbe il vostro aiuto per un codice che mi faccia tutto il lavoro di copiare per colori e incollarli su un altro foglio denominato "Elenco", disponendo come da risultato da me proposto sul foglio elenco, vi ho fatto 2 articoli per rendere l'idea, nel campo descrizione per ottenere il risultato voluto ho usato la formula concatena ma facendolo manualmente e un delirio, faccio presente che non sempre hanno lo stesso numero di righe, per quello mi e' venuto in mente i colori. Quindi su questo punto mi tornerebbe utile un codice che riconosce i colori delle celle. Disponendomi in modo corretto il tutto.
A me e venuto in mente qsto modo di strutturare il tutto, anche perché non sono tutti uguali i listini e non rispettano la medesima disposizione, mi aiuto con i colori, rendendo una codifica per colore, ora avrei bisogno della vostra sapiente collaborazione per un codice, o soluzione alternativa che mi aiuta a trasformare il tutto nel modo in cui mi serve.
Qualcuno di voi mi potrà dire di provare con i convertitore di pdf in excel, li ho già provati tutti, ma non mi tabula in modo corretto il tutto, e rischio di fare arrosti con i prezzi,Spero vivamente che voi sapete darmi una soluzione che mi aiuta, considerate che mi ritrovo più di 2000 pagine su più tomi di elenchi prezzi.
il vostro aiuto mi toglierebbe parcchie castagne dal fuoco, altrimenti se continuo a fare copia e incolla, mi servirebbe un anno, e poi ci sarebbero i nuovi listini e dovrei ricominciare da capo, quindi perderei tempo solo a trascrivere e convertire pdf in excel.
Oltre al fatto che per ogni gara d'appalto ci sono i listini dedicati e descrittivi del lavoro in appalto.
Quindi starei li solo a perderei tempo,
spero che un giorno le associazioni costruttori obbligano le stazioni appaltanti a rilasciare elenchi prezzi e computi editabili per dar modo ai professionisti di usare il tempo a studiare in dettaglio il lavoro e non a perdere tempo a convertire e copiare i PDF in excel.Aiutoooooooooooo
Ve ne sarei gratoooooooAllegati:
You must be logged in to view attached files.Qualcuno di voi mi potrà dire di provare con i convertitore di pdf in excel, li ho già provati tutti,
Hai provato anche quelli a pagamento ? puoi allegare un pdf ?
sono stati emessi i nuovi elenchi prezzi dei lavori degl'enti pubblici
Parli del prezziario per gli oneri della sicurezza da inserire nei DUVRI? Io ce l'ho già in formato Excel se ti serve.
spero che un giorno le associazioni costruttori obbligano le stazioni appaltanti a rilasciare elenchi prezzi e computi editabili
Su questo concordo, anche noi (e siamo un ente pubblico) diventiamo matti quando si tratta di mettere mano a elenchi di questo tipo. E' incomprensibile perché non vengano rilasciati formati da cristiani (però ho visto dei csv).
Per tornare al punto. Tu dici:
un codice che mi faccia tutto il lavoro di copiare per colori e incollarli su un altro foglio
ma secondo me tu questo sai già farlo. Ti basta scorrere con pazienza ogni riga e controllare la sua proprietà Interior.Color no?
ciao patel,
ho provato in tutti i modi, anche perchè credetemi e tanta roba da convertire,
quindi in azienda non era un problema avere un convertitore a pagamento, ma come detto non riesco ad ottenere il risultato in modo corretto con il rischio di fare disastri,
ti allego uno dei file PDF da convertire come da te chiesto,
e ti allego anche screen per farti capire quanti elenchi prezzi mi servono,
sono elenchi emessi da RFI oltre al fatto che a stretto giro escono anche tariffe regionali e per provincia, quindi non potete capire che disastro.
fino a un paio di anni si usavano abitualmente sempre i soliti prezziari, invece da quest'anno tutti gli enti sono obbligati ad emettere tariffari aggiornati.
quindi mi serve trovare n modo univoco che posso utilizzare per tutti gli aggiornamenti.
mentre per vecchio frac
non è un elenco prezzi standard sicurezza ma come detto sono prezziari ferroviari, con loro codifica, articoli, descrizioni e prezzi.
l'unico modo che mi è venuto in mente era la soluzione e metodo nel mio file.
devo fare per un oretta un lavoro di pulizia, di evidenziare con colori,
e a questo punto che poi impostato il foglio come da me fatto, servirebbe un codice che mi mette in bella tutto su un altro foglio.
sul mio file excel postato ho inserito solo alcune righe per velocizzare la mia richiesta di aiuto.
Puoi gentilmente propormi e postarmi la soluzione?
come detto ho il problema del concatena.
te ne sarei grato-
ma considera che come detto nella voce descrizione possono esserci più di 2 righe.
Allegati:
You must be logged in to view attached files.Comunque la richiesta è meno banale del previsto... ci sto lavorando quindi dammi fiducia 🙂
Puoi gentilmente propormi e postarmi la soluzione?
Ho scritto prima di aver letto il tuo post. Immagino comunque che il lavoro di pulizia sia una bella sfacchinata.
Sono più che fiducioso che trovi la soluzione e mi dai una mano, altrimenti faccio prima a spararmi.🤣🤣🤣🤣🤣
cmq ricordati la cosa più importante che la descrizione può essere su più righe, rispetto a quanto da me postato sul file excel. La pulizia e un lavoro che cmq richiede circa un oretta, poi evidenzio, controllo e qui dovrebbe entrare in gioco il tuo aiuto o chi ha una soluzione più snella,
Ho tentato con Pdf Element, la conversione in docx riesce bene a parte qualche casella di testo vuota e sovrapposta ai dati, ma comunque facilmente eliminabile. La conversione in excel è un disastro.
Mi dispiace ma non ti posso aiutare.
Io propongo questa soluzione che tiene conto delle righe multiple (bel casino) e delle righe mancanti (altro bel casino 🙂 )
In questa prima stesura (tutta da testare) non ho badato alla bellezza del codice ma all'efficienza... fa schifo, scusate ma lo devo dire.
Un'ottimizzazione sarebbe necessaria ma non ho molto tempo perché fra poco devo andare e volevo essere produttivo 😉Option Explicit Sub scan_by_color() Dim cell As Range Dim j As Long Dim i As Long Dim y As Long Dim s As String Dim coll1 As Object Dim coll2 As Object Dim coll3 As Object Dim coll4 As Object Dim coll5 As Object Dim v As Variant Dim c As Variant Worksheets("Foglio1").Select y = 0 Set coll1 = CreateObject("Scripting.Dictionary") Set coll2 = CreateObject("Scripting.Dictionary") Set coll3 = CreateObject("Scripting.Dictionary") Set coll4 = CreateObject("Scripting.Dictionary") Set coll5 = CreateObject("Scripting.Dictionary") For i = 2 To Range("A1").CurrentRegion.Rows.Count Set cell = Cells(i, 1) j = i Select Case cell.Interior.Color Case 65535 'yellow s = "" Do While cell.Interior.Color = 65535 s = s & cell & " " j = j + 1 Set cell = Cells(j, 1) Loop y = y + 1 coll1.Add "I" & y, s i = j - 1 Case 12874308 'blu s = "": j = i Do While cell.Interior.Color = 12874308 s = s & cell & " " j = j + 1 Set cell = Cells(j, 1) Loop coll2.Add "I" & y, s i = j - 1 Case 5287936 'green s = "": j = i Do While cell.Interior.Color = 5287936 s = s & cell & " " j = j + 1 Set cell = Cells(j, 1) Loop coll3.Add "I" & y, s i = j - 1 Case 16247773 'light cyan s = "": j = i Do While cell.Interior.Color = 16247773 s = s & cell & " " j = j + 1 Set cell = Cells(j, 1) Loop coll4.Add "I" & y, s i = j - 1 Case 15132391 'gray s = "": j = i Do While cell.Interior.Color = 15132391 s = s & cell & " " j = j + 1 Set cell = Cells(j, 1) Loop coll5.Add "I" & y, s i = j - 1 End Select Next Worksheets("Listino").Select Worksheets("Listino").Range("A2:E1000").ClearContents For Each c In Array(coll1, coll2, coll3, coll4, coll5) i = 0 j = Switch(c Is coll1, 1, c Is coll2, 2, c Is coll3, 3, c Is coll4, 4, c Is coll5, 5) For Each v In c i = Mid(v, 2) If v = "I" & i Then Worksheets("Listino").Cells(i + 1, j) = c(v) End If Next Next MsgBox "Done" End SubGrazie Patel,
In effetti è un disastro, e l'unico modo che mi era venuto in mente era quello di usare i colori e mettere in evidenza le cose che mi servono,
Per poi creare un foglio pulito incolonnato in modo corretto,
Ma anche li come detto devo fare Il lavoro di pulizia,
Insomma un disastro. Comunque grazie mille.
Bhe devo dire che solo vedendo il codice posso asserire con estrema certezza che non sarei mai stato capace nemmeno lontanamente impostarlo,
ora son fuori con mia figlia ma come rientro a casa lo provo, e ti aggiorno, intanto grazie
ti aggiorno
In realtà è meno complicato di quello che sembra, perché in pratica ho pensato di spazzolare le righe della tabellona e in corrispondenza di ogni colore riempire un dizionario con i valori appartenenti a quel colore (i colori sono cinque come le colonne e anche i dizionari sono cinque). Poi scorro dizionario per dizionario e inserisco i valori nella cella giusta del foglio Listini.
La difficoltà incontrata è che possono esserci più righe per un colore (quindi appartengono allo stesso colore e il contenuto deve essere trattato unitariamente) e possono esserci colori mancanti (quindi nella resa nel foglio Listini bisogna saltare la relativa colonna).
Il lavoro più grosso e brutto lo hai tu in fase di pre-parazione del tabellone, con i colori adeguati (e sempre quelli: il codice è strettamente color-sensitive). Non ho guardato il pdf per vedere cosa si può fare ma se patel non ha ottenuto un risultato, è difficile che ci riesca io.
Ho convertito il pdf in docx con pdfelement e il docx in excel con https://convertio.co/it/docx-xlsx/
il risultato allegato mi sembra buono
Allegati:
You must be logged in to view attached files.Patel grazie per il tentativo,
Il risultato proposto dal tuo file riesco ad ottenerlo facendo un semplice copia incolla,
Mi spiego meglio, apro il PDF seleziono tutto, faccio copia e poi lo incollo in excel, come testo nella cella A1, ottengo presso a poco il tuo risultato, a me per utilizzarlo mi serve incolonnato come nel mio file allegato a inizio conversazione, il risultato finale deve essere quello del foglio elenco.
Cmq grazie ma se ti viene in mente una soluzione con partenza dal tuo file e restituire il risultato da me richiesto ben venga, quando torno a casa provo la soluzione di vecchio frac, che ringrazio ancora.
Per comodità allego il mio file con la macro già confezionata. Su questo funziona, poi bisogna vedere in pratica con la tabella reale.
Allegati:
You must be logged in to view attached files.Ma è terribile trattare un testo come questo semimanualmente. Ci credo che impazzisci.
Come hai ricavato le informazioni della terza e quarta riga? (U.M., importo e manodopera) perchè ho visto che l'U.M. nel file di test non è proprio precisa precisa.

eccomi, ho avuto modo di testare il tuo codice,
funziona perfettamente, ma se trova una riga in bianco o vuota si ferma a quella riga, c'è un modo per fargli capire di proseguire?
ho provato ad inserire una riga vuota e alla riga in bianco si è fermato di copiare e trascrivere nel foglio Listino.
puoi prendere in considerazione il fatto che deve continuare? magari per interrompere in codice a fine elenco posso inserire una riga rossa, giusto per fargli capire di fermarsi e non continuare.
è fattibile?
le informazioni della terza e quarta riga le ho ottenute facendo una tabulazione,
poi con altre colonne faccio la funzione "SE" esempio =SE(A1=1;1;0)
e così via, poi filtro per numero e metto solo in primo piano quello che mi serve e lo coloro, insomma un macello, ma devo uscirne vivo, altrimenti davvero e da suicidio con tutti i prezziari.
è l'unica soluzione che mi è saltata in testa,
per sopravvivere e non gettare la spugna subito. spero grazie a voi di venirne a capo.
Se la riga è bianca non la calcola perchè non ha uno dei cinque colori previsti.
Se la riga è vuota è per intero vuota si ferma perchè la scansione avviene a partire dalla cella A1 ed è definita dalla sua CurrentRegion:For i = 2 To Range("A1").CurrentRegion.Rows.CountSi può ovviamente forzare la lettura di una tabella più grande, per esempio con
For i = 2 To 3000e allora non si ferma prima della riga 3000... questo però era alla tua portata 🙂
le informazioni della terza e quarta riga le ho ottenute facendo una tabulazione,
Se i prezziari hanno la stessa struttura, con qualche riga di codice (!) puoi leggere eriga per riga e spezzarla alle parole chiave che puoi trovarci dentro:
-UNITA' DI MISURA
- IMPORTO EURO
- % MANODOPERAChiaramente, se tali parole ci sono sempre e se sono sempre scritte così, altrimenti diventa una ricerca infruttuosa e ti trovi con righe comunque accorpate.
Si può ovviamente forzare la lettura di una tabella più grande, per esempio con
Puoi anche utilizzare il vecchio ma sicuro metodo della nonna 🙂
For i = 2 To cells(Rows.Count,1).End(xlUp).Rowche restituisce l'ultima riga compilata in colonna A.
si la soluzione della nonna mi piace di più,
mentre per quanto riguarda spezzare alla parola chiave mi farebbe comodo,
non faccio 3 passaggi e cioè cercarlo prima con il SE poi copiarlo su un altra colonna affianco e fare la tabulazione per poi tornare indietro e inserire righe con le scritte incolonnare in modo giusto, per poi evidenziare con i colori
sempre se puoi a questo punto fammi una macro che mi spezza alla parola chiave e mi mette il tutto nell'ordine come dal mio file.
Magari si può provare con le Power Query
-
AutoreArticoli
