scelta di colonne da stampare



  • scelta di colonne da stampare
    di nichicanta data: 15/09/2013 19:48:07

    Carissimi amici, è da tempo che eseguo ricerche su internet e su questo forum ma non sono riuscito a trovare niente che si avvicini alla mia esigenza.
    In un foglio di lavoro (vi allego un fac-simile di quello che utilizzo e sul quale bisogna intervenire) ho la necessità di stampare alcune colonne e non tutte, al fine di evitare di fare un copia incolla, in un altro foglio dei dati da stampare.
    Esempio: ho una colonna che riporta l'indicazione dei nominativi dei condomini, poi altre colonne con funzioni di calcolo e le ultime che riportano il totale delle somme che spetta a ciascun condomino, ecco io vorrei poter stampare la prima colonna con le ultime e ( come se le nascondessi)non le colonne intermedie con funzioni di calcolo.
    Saluti.



  • di Gaetanopr (utente non iscritto) data: 15/09/2013 20:11:59

    Ciao, senza scaricare il tuo file, potresti fare in questo modo, è solo un'idea

    Columns("F:F").EntireColumn.Hidden = True
    macro che stampa il foglio
    Columns("F:F").EntireColumn.Hidden = False

    dove al posto della F indichi le colonne da nascondere e poi mostrare nuovamente



  • di nichicanta data: 15/09/2013 20:28:49

    Innanzitutto Ciao Gaetanopr, l' avevo pensata pure io questa soluzione, però ho la necessità di poter selezionare ( magari da inputbox le colonne che non desidero stampare e che non sono mai contigue e cioè potrei selezionare la colonna E, poi la H poi la M ecc.) le colonne che mi interessano e poi lanciare la macro di stampa.
    Appena ora, dopo un' ennesima ricerca su internet ho trovato (del grandissimo Mauro Gamberini) qualcosa che ha a che fare con la stampa (anche se diverso da quello che chiedo, ma solo per poter far lavorare meno gli amici del forum esperti e non). Allego il codice che può essere di aiuto o magari può essere adattato alla mia esigenza dagli amici del forum.
    Ti saluto e ti ringrazio nuovamente Gaetanopr, penso che la tua soluzione sia un buono spunto di partenza per la definizione finale della mia richiesta.

     
    Option Explicit
    
    Public Sub m()
    
        Dim lng As Long
        Dim v As Variant
        Dim v2 As Variant
        Dim v3 As Variant
        Dim lPagina As Variant
        Dim lPagine As Long
        Dim sh As Worksheet
        
        
        v = Application.InputBox("Inserire le pagine singole da stampare separate da una virgola," & _
            vbNewLine & "i gruppi di pagine separati dai due punti." _
            & vbNewLine & vbNewLine & "(Esempio: 1,5:7,9)", "Stampa pagine.")
        If v = False Or v = "" Then Exit Sub
        
        v2 = Split(v, ",")
        
        Set sh = ThisWorkbook.Worksheets("Foglio1")
        
        With sh
        
            lng = .HPageBreaks.Count
            .PageSetup.PrintArea = ""
            
            If lng = 0 Then
                    .PageSetup.PrintArea = CStr("A1:D60")
                    .PrintOut
            Else
                For Each lPagina In v2
                    If InStr(lPagina, ":") Then
                        v3 = Split(lPagina, ":")
                        For lPagine = v3(LBound(v3)) To v3(UBound(v3))
                            If lPagine <= lng Then
                                .PageSetup.PrintArea = CStr("A" & lPagine * 60 + 1 - 60 & ":" _
                                    & "D" & lPagine * 60)
                                .PrintOut
                            End If
                        Next
                    Else
                        If lPagina <= lng Then
                            .PageSetup.PrintArea = CStr("A" & lPagina * 60 + 1 - 60 & ":" _
                                & "D" & lPagina * 60)
                            .PrintOut
                        Else
                            MsgBox "Attenzione è stato introdotto un valore errato!"
                        End If
                    End If
                Next
            End If
            .PageSetup.PrintArea = ""
        End With
        
        Set lPagina = Nothing
        Set sh = Nothing
        
    End Sub
    



  • di nichicanta (utente non iscritto) data: 17/09/2013 11:52:44

    Buongiorno amici c'è la possibilità di trovare una soluzione alla mia richiesta in questa discussione.
    Vi ringrazio anticipatamente..



  • di mb data: 17/09/2013 15:01:54

    richiesta info
    ipotiziamo di aver salvato il file con la sub
    come devo modificarla per poterla utilizzare con altri file
    ipotizzando che un file si chiami pippo oppure paperino per quel poco che capisco di vba la riga sotto riportata si può solo utilizzare sul file aperto e non su altri.
    c'è qualche trucco per poterlo fare
    Grazie

     
    Set sh = ThisWorkbook.Worksheets("Foglio1")



  • di Vecchio Frac data: 17/09/2013 15:15:41

    Cioè così intendi?
     
    Set sh = Workbooks("pippo").Worksheets("Foglio1")
    






  • di Vecchio Frac data: 17/09/2013 15:17:07

    Io sto studiando una soluzione che permetta a nichi di marcare le colonne da stampare, quindi le copi in un foglio temporaneo, le stampi e quindi chiuda senza salvarlo il foglio temporaneo.
    Mi sembra più veloce e semplice.
    Per marcare le colonne da stampare basta un X in una cella libera corrispondente alla colonna da stampare.





  • di mb data: 17/09/2013 15:36:05

    Buongiorno vecchio frac
    pensandoci bene forse sono stato troppo invasivo nella richiesta, fammi sapere se è meglio aprire un nuovo argomento
    grazie
    p.s forse la soluzione proposta è vincolante al fatto che il file si chiami pippo, una volta mi avevano aiutato ad utilizzare una macro d'appoggio anche se i file erano diversi
    fammi sapere se aprire una nuova chiacchierata
    rigrazie



  • di Vecchio Frac data: 17/09/2013 15:41:54

    @mb
    Guarda, adesso sto rispondendo al quesito iniziale di nichicanta.
    Allego un file con la mia proposta.
    Meglio se apri una discussione nuova così non mescoliamo gli interlocutori ^_^

    @nichi
    E' una proposta un po' rozza ma potrebbe funzionare.
    Alla fine della macro avrai un foglio in più da aggiustare e mandare in stampa, poi lo puoi eliminare tranquillamente (i dati originali non vengono toccati).






  • di Vecchio Frac data: 17/09/2013 15:45:18

    Accludo il testo della macro così rimane.
    Suppone che in riga 5 si mettano delle X in corrispondenza delle colonne da riportare nel foglio temporaneo (la macro è abbastanza intelligente da recuperare i dati delle colonne interessate, dall'intestazione di colonna in giù).
    Ripropongo già che ci sono una funzione Union migliorata rispetto a quella predefinita di Excel.
     
    Option Explicit
    
    Sub selective_print()
    Dim c As Range, r As Range
    Dim sh As Worksheet, tmp As Worksheet
    
        Set sh = ActiveSheet
        
        For Each c In sh.[A5:M5]
            If c Like "[Xx]" Then
                Set r = Union(r, sh.Range(Cells(9, c.Column), Cells(Cells([A:A].Rows.Count, 1).End(xlUp).Row, c.Column)))
            End If
        Next
        
        r.Copy
        
        Set tmp = Worksheets.Add
        
        Application.Goto tmp.[a1]
        
        ActiveCell.PasteSpecial
        
        Application.CutCopyMode = False
        
    End Sub
    
    
    Private Function Union(Rng1 As Range, Rng2 As Range) As Range
    'thx to Tushar Mehta
    'dailydoseofexcel.com/archives/2007/08/17/two-new-range-functions-union-and-subtract/
        If Rng1 Is Nothing Then
            Set Union = Rng2
        ElseIf Rng2 Is Nothing Then
            Set Union = Rng1
        Else
            Set Union = Application.Union(Rng1, Rng2)
        End If
    End Function






  • di nichicanta (utente non iscritto) data: 17/09/2013 15:58:38

    V.Frac, innnazitutto ti ringrazio per il puntuale e prezioso interessamento,per la mia esigenza potrebbe andare bene, ti chedo solo (per favore e cortesia) di aggiungere il codice che mi deselezioni le x dal foglio originale e mi lelimini il foglio di appoggio dopo la stampa dei dati di mio interesse, poichè dovrò creare un pulsante di comando con vari msgbox che mi dica quante copie stampare, cosa stampare ( come area di stampa) e altro.
    Vi saluto con stima e ammirazione per quello che fate.



  • di Vecchio Frac data: 17/09/2013 16:26:57

    Ma nichiiiiii ^_^ pappa pronta? :)

    cit. "aggiungere il codice che mi deselezioni le x"
    ---> Cancellare un range è facile:
    Range("A5:A25").ClearContents

    cit. "mi elimini il foglio di appoggio dopo la stampa dei dati di mio interesse"
    ---> Prima lo devi mandare in stampa (con la serie di pulsanti che hai nominato) e poi lo elimini, per esempio e rozzamente:
    tmp.PrintOut
    Application.DisplayAlerts = False
    tmp.Delete
    Application.DisplayAlerts = True







  • di nichicanta (utente non iscritto) data: 17/09/2013 16:35:46

    Grazie V.Frac. hai ragione non ho parole per scusarmi.
    Ti ringrazio e ti saluto.