Condividi:        

[Excel2010]Macro per ordinamento elenco

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 12/10/15 15:33

Buongiorno, sono Stefano Recalcati,
Vi contatto in cerca di aiuto con grande urgenza. Ho provato a cercare in altri topic, ma non sembra esserci quello di cui ho bisogno.
Per lavoro utilizzo un file Access, ormai divenuto obsoleto e poco funzionale. Devo rimpiazzarlo con un file excel.
Esso contiene decine di elenchi, alcuni molto lunghi. Siccome ho bisogno di stampare questi elenchi, è essenziale ottimizzare gli spazi.
Ho bisogno che l'elenco sia ordinato in modo decrescente (sulla colonna numerica), ma allo stesso tempo che si distribuisca nella porzione adiacente all'elenco, la quale rimane inutilizzata.

Ad esempio inserisco due immagini:

elenco non ordinato
https://imageshack.com/i/hjOOc3yVp

elenco ordinato
https://imageshack.com/i/pb5TkZ29p

Chiaramente, nel caso in cui l'elenco sia più lungo, esso dovrebbe riprendere nella pagina successiva nello stesso modo...

Vi chiedo cortesemente aiuto, perché non so come fare e il lavoro è estremamente urgente.

Grazie in anticipo per qualsiasi risposta,

cordialmente,

S.Recalcati.
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Sponsor
 

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 12/10/15 16:33

Implemento la richiesta di aiuto dicendo che la macro verrebbe assegnata ad un pulsante e che essa dovrebbe inoltre salvare il file (formato .xls) e farne una copia in pdf tramite PDFCreator (del singolo foglio).

Riconosco che la richiesta non sia di poco conto e ringrazio molto chiunque mi dia una mano.

sr
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi wallace&gromit » 12/10/15 19:55

Ciao Stefano,
per la prima parte delle tue richieste prova a vedere se riesci ad adattare quanto aveva fatto Anthony per una mia domanda simile:
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=98306&hilit=+stampa+colonne
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 13/10/15 14:01

Ciao,
purtroppo non ho ampia conoscenza di visual basic, probabilmente andando a modificare la macro perderebbe funzionalità.
ti ringrazio comunque per l'interessamento.

s.r
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 14/10/15 00:22

Ciao recalcatiiti, benvenuto nel forum.
Ti confermo il link gia' indicato da w&g: viewtopic.php?f=26&t=98306#p565075
Prova quindi con quella macro, che va modificata come da successivo mio messaggio nella stessa discussione.

Non mi e' chiaro pero' se il tuo obiettivo e' ottenere le stampe oppure ottenere il foglio con quel layout; comunque il risultato dovrebbe essere nel foglio di servizio "ZcPrint". Come pure non mi e' chiaro se per quanto riguarda la stampa con pdfCreator sei gia' a posto oppure No; se "No" prova a guardare questa discussione (attenzione, il codice funziona con pdfCreator 1.7 e non con 2 e successive): viewtopic.php?t=104562#p610229

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 15/10/15 11:49

Ciao Anthony47, grazie per il benvenuto.
Rispondo velocemente alle tue domande:
1- il mio obbiettivo è quello di stampare in pdf l'elenco con il layout da me esposto nel primo messaggio (ovvero che l'elenco sia ordinato in modo decrescente e che sia distribuito su due colonne come in immagine d'esempio ). Di conseguenza mi è indifferente che il foglio sia uguale o meno al layout di stampa, l'obbiettivo è il pdf.
2- No, non ho risolto con la stampa.

Ciao, e molte grazie.

SR
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 15/10/15 14:21

Ma noi piu' che indicarti cosa devi fare, sia per lo sdoppiamento che per la stampa su pdf, non possiamo fare granche'. Devi quindi provare, e se non vai avanti chiedere aiuto indicando cosa hai provato a fare, quali sono i risultati, quali risultati invece ti aspettavi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 19/10/15 16:34

Vi ringrazio,
sono riuscito utilizzando un altro foglio da cui estrapolo i dati da immettere nel layout di stampa, tutto bene.
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 22/10/15 23:14

Se ti diciamo "Ma noi piu' che indicarti cosa devi fare, sia per lo sdoppiamento che per la stampa su pdf, non possiamo fare granchè" e' perche' non abbiamo strumenti per fare di piu', in primis i tuoi dati e le informazioni sul tuo ambiente Excel.
Ora leggendo l'altro quesito (vedi viewtopic.php?f=26&t=105653) ed esaminando il fileche lì hai allegato possiamo riprendere questo, perche' e' la soluzione che hai adottato per risolvere questo problema che genera quel secondo problema.
Avendo tu XL2007 o superiore la macro per W&G (sviluppata per XL2003) non si comporta benissimo, e l'ho rivista in questo modo:
Codice: Seleziona tutto
Sub SideBySide()
Dim TabSh As String, Tab1Adr As String, Tab2Adr As String, LastCol As Long
Dim TabC As Range, I As Long, pRow As Long, NextR As Long
'
Application.DisplayAlerts = False
On Error Resume Next
    Sheets("ZcWork").Delete
    Sheets("ZcPrint").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'
TabSh = "Elenco"   '<<<-- Il foglio con la tabella di origine
'NB: il prossimo parametro deve cominciare da A1;
'es: corretto A1:F1
'    sbagliati B1:F1, A2:G2
Tab1Adr = "A1:D1"   '<<<-- La larghezza della prima tabella
'
Tab2Adr = Range(Tab1Adr).Offset(0, Range(Tab1Adr).Count + 1).Address
LastCol = Range(Tab2Adr).Offset(0, Range(Tab1Adr).Count - 1).Column
'
'Crea copia del foglio Elenco
Sheets(TabSh).Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "ZcWork"
Range(Tab1Adr).Resize(20, Range(Tab1Adr).Count).Copy Destination:=Range(Tab2Adr)
'Imposta larghezza colonne come originale
For Each TabC In Range(Tab1Adr)
    Range(Tab2Adr).Offset(0, I).ColumnWidth = TabC.ColumnWidth
    I = I + 1
Next TabC
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView
If ActiveSheet.VPageBreaks.Count > 0 Then   'Ridimensiona per 1 pagina
    With ActiveSheet.PageSetup
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .Zoom = False
        .FitToPagesTall = False
        .FitToPagesWide = 1
    End With
End If
'Crea foglio di stampa
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "ZcPrint"
Range(Tab2Adr).Resize(25).ClearContents
'
Sheets("ZcWork").Select
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView
'
'Copia Work in Print
If ActiveSheet.HPageBreaks.Count > 0 Then
pRow = ActiveSheet.HPageBreaks(1).Location.Row - 3
    Sheets("ZcPrint").Cells.Clear
    Range(Tab1Adr).Copy Sheets("ZcPrint").Range("A1")               'Copia header
    Range(Tab1Adr).Copy Sheets("ZcPrint").Range(Tab2Adr)
    For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step pRow * 2   'Copia dati
        NextR = Sheets("ZcPrint").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & I).Resize(pRow, Range(Tab1Adr).Count).Copy Destination:= _
            Sheets("ZcPrint").Cells(NextR, "A")
           
        Range("A1").Offset(I + pRow - 1, 0).Resize(pRow, Range(Tab1Adr).Count).Copy Destination:= _
            Sheets("ZcPrint").Cells(NextR, Range(Tab2Adr).Column)
    '   set page break
        Sheets("ZcPrint").HPageBreaks.Add before:=Sheets("ZcPrint").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next I
End If
Sheets("ZcPrint").Select
MsgBox ("Completato...")
End Sub
Mettila in un "Modulo standard" del progetto vba che contiene il foglio "Elenco"; le righe marcate <<< sono da personalizzare. Poi, quando il contenuto del foglio Elenco e' pronto, manda in esecuzione la macro SideBySide: verra' creato un foglio di servizio ZcWork e un altro foglio chiamato ZcPrint che e' quello pronto con le colonne affiancate, e che puo' essere stampato su carta oppure salvato in formato pdf usando il comando File /Salva con nome; formato "PDF", nome a piacere.

Questa macro, se ti funziona, rendera' superato anche il secondo problema posto (vedi viewtopic.php?f=26&t=105653)

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 26/10/15 08:53

Ciao Anthony , grazie davvero per l'aiuto.
La macro funziona molto bene, l'elenco è ordinato e giustamente impaginato, ma purtroppo il layout di stampa deve contenere altri dati che devono essere attinti da un altro foglio, chiamato "revisioni", un'immagine e un titolo. ti allego file d'esempio.

http://www.filedropper.com/cartel1

Grazie e ciao
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 26/10/15 13:13

Allora io direi:
Registrati una macro mente, partendo dal foglio ZcWork:
--selezioni il foglio ZcPrint
--inserisci le righe che ti servono
--inserisci nella posizione giusta l'immagine giusta
--inserisci le altre informazioni scrivendole o facendo copia e incolla se provenienti da altri fogli
--interrompi qui la registrazione
Poi prova a inserire in coda alla mia macro, subito prima di MsgBox ("Completato..."), una "Call NuovaMacro" (senza virgolette, ovviamente usando il nome della macro registrata).

Se cosi' pero' non funziona allora pubblica il codice della macro registrata e vedremo come fare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 26/10/15 14:30

Ciao,
c'è un problema, in quanto le revisioni provengono da uno storico contenuto in un foglio che io aggiorno continuamente in base alle modifiche apportate, poi, nel layout di stampa mi compare solo l'ultima con un riferimento alle caselle del foglio "revisioni". Per questo non posso fare copia e incolla. Nonostante tutto, sono sicuro che tu abbia qualche altro asso nella manica! :).
Grazie per l'aiuto.
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 26/10/15 15:57

L'asso nella manica potrei averlo come non averlo, ma per partire mi serve il codice della macro registrata.
Poi devi spiegare dove si trovano i dati che vanno prelevati e dove vanno messi, perche' nei file pubblicati di questo non ho trovato traccia...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 28/10/15 16:29

Ciao,
volevo solo sottolineare la tua palese bravura in questo ambito, complimentandomi, con una frase allegorica. Spero non ti sia offeso.
So bene che questo non sia il tuo lavoro e che fai soltanto un favore a noi, aiutandoci. Per questo ti ringrazio molto per quello che fai.
Ti allego il file d'esempio aggiornato e dettagliato, spero sia abbastanza esaustivo.
http://www.filedropper.com/esempio

Grazie e ciao
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 29/10/15 00:52

Non mi sono offeso, tranquillo...
Ma il tuo caso scivola inesorabilmente a domani.

A presto.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 03/11/15 13:23

okay, ti ringrazio a presto e ciao
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 03/11/15 15:43

Anthony ha scritto:il tuo caso scivola inesorabilmente a domani
Come diceva Catullo, o Neruda, o forse solo Rossella (non ricordo piu' bene :D ), "domani e' un altro giorno, si vedrà"...
Insomma "domani" feci altre cose, l'indomani altre ancora, e del tuo problema mi accorgo che non ho mai scaricato nemmeno il file di esempio :oops: che ora non e' piu' disponibile...

Lo puoi riallegare? prometto che saro' piu' lesto...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 03/11/15 15:58

http://www.filedropper.com/esempio Eccolo

non preoccuparti ;) e comunque credo fosse Rossella :D
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Re: [Excel2010]Macro per ordinamento elenco

Postdi Anthony47 » 04/11/15 02:57

Si, ho controllato sulla Treccani ed era proprio Rossella...

Dal file vedo solo dove prelevare le info sulla revisione, che essendo in posizione fissa si poteva risolvere col copia /incolla e la macro autoregistrata.
L'immagine invece non so da dove la prenderai, e idem il titolo.
Ho comunque modificato la Sub SideBySide, che va sostituita integralmente con:
Codice: Seleziona tutto
Sub SideBySide2()
Dim TabSh As String, Tab1Adr As String, Tab2Adr As String, LastCol As Long
Dim TabC As Range, I As Long, pRow As Long, NextR As Long, Pag1 As Long       '**
'
Application.DisplayAlerts = False
On Error Resume Next
    Sheets("ZcWork").Delete
    Sheets("ZcPrint").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'
TabSh = "Elenco"   '<<<-- Il foglio con la tabella di origine
'NB: il prossimo parametro deve cominciare da A1;
'es: corretto A1:F1
'    sbagliati B1:F1, A2:G2
Tab1Adr = "A1:D1"   '<<<-- La larghezza della prima tabella
'
Tab2Adr = Range(Tab1Adr).Offset(0, Range(Tab1Adr).Count + 1).Address
LastCol = Range(Tab2Adr).Offset(0, Range(Tab1Adr).Count - 1).Column
'
'Crea copia del foglio Elenco
Sheets(TabSh).Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "ZcWork"
Range(Tab1Adr).Resize(20, Range(Tab1Adr).Count).Copy Destination:=Range(Tab2Adr)
'Imposta larghezza colonne come originale
For Each TabC In Range(Tab1Adr)
    Range(Tab2Adr).Offset(0, I).ColumnWidth = TabC.ColumnWidth
    I = I + 1
Next TabC
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView
If ActiveSheet.VPageBreaks.Count > 0 Then   'Ridimensiona per 1 pagina
    With ActiveSheet.PageSetup
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .Zoom = False
        .FitToPagesTall = False
        .FitToPagesWide = 1
    End With
End If
'Crea foglio di stampa
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "ZcPrint"
Range(Tab2Adr).Resize(25).ClearContents
'
Sheets("ZcWork").Select
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView
'
'Copia Work in Print
If ActiveSheet.HPageBreaks.Count > 0 Then
    pRow = ActiveSheet.HPageBreaks(1).Location.Row - 3
    Sheets("ZcPrint").Cells.Clear
    Range(Tab1Adr).Copy Sheets("ZcPrint").Range("A1").Offset(28, 0)         '**     'Copia header
    Range(Tab1Adr).Copy Sheets("ZcPrint").Range(Tab2Adr).Offset(28, 0)      '**
    Pag1 = 28           '**
    For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step pRow * 2   'Copia dati
        NextR = Sheets("ZcPrint").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & I).Resize(pRow - Pag1, Range(Tab1Adr).Count).Copy Destination:= _
            Sheets("ZcPrint").Cells(NextR, "A")                 '**
        Range("A1").Offset(I + pRow - 1 - Pag1, 0).Resize(pRow - Pag1, Range(Tab1Adr).Count).Copy Destination:= _
            Sheets("ZcPrint").Cells(NextR, Range(Tab2Adr).Column)           '**
    '   set page break
        Sheets("ZcPrint").HPageBreaks.Add before:=Sheets("ZcPrint").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        If I = 2 Then I = I - Pag1 * 2: Pag1 = 0  '**
    Next I
End If
Sheets("ZcPrint").Select
Range("A26").Value = "Descrizione:"
Range("A25").Value = "Revisione: " & Sheets("Revisioni").Range("A2") & "  - del " _
    & Format(Sheets("Revisioni").Range("B2"), "dd-mm-yyyy") & " - Realizzata da: " _
    & Sheets("Revisioni").Range("C2")
Range("A1").Value = "TITOLO"
MsgBox ("Completato...")
End Sub
Le righe modificate sono quelle marcate **
Le info sulla revisione sono inserite in posizione, Titolo e Immagine sono solo predisposti.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2010]Macro per ordinamento elenco

Postdi recalcatiiti » 04/11/15 10:57

Ciao Anthony47,
grazie per la macro, vedo che hai tirato le due e mi dispiace..

La macro chiaramente è migliorata, ci sono però ancora problemi.. Adesso sono nella seguente situazione:
- le revisioni vengono correttamente attinte dal foglio revisioni, manca però la descrizione, la quale, ho visto dalla macro, non è riferita al foglio revisioni.

Codice: Seleziona tutto
Range("A26").Value = "Descrizione:"


- l'elenco viene correttamente disposto, ma non viene ordinato in ordine decrescente..

Considerando le due questioni precedenti "risolvibili", come posso ora mettere l'immagine?

Grazie per il tuo tempo,

una caro saluto,

sr
Excel 2021
recalcatiiti
Utente Junior
 
Post: 95
Iscritto il: 12/10/15 15:03

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel2010]Macro per ordinamento elenco":


Chi c’è in linea

Visitano il forum: Nessuno e 87 ospiti