Stampa seleziona colonne



  • Stampa, seleziona colonne
    di alessia (utente non iscritto) data: 29/01/2014 09:59:06

    Buongiorno ragazzi/e,
    avrei bisogno di un Vostro aiuto per risolvere il seguente problema.
    Quando inserisco i dati dall'userform chiamato "frmGestioneDati" vengono salvatii nel foglio "Dati" con inserimento in modo casuale e non alfabetico. Mi spiego.
    Se ad esempio inserisco Rossi Mario, Bianchi Luigi, Ancora Dario nel foglio vengono inseriri in questo modo
    Rossi Mario
    Bianchi Luigi
    Ancora Dario
    insieme al loro nome vengono inseriti gli altri dati nella riga a loro destinata.
    Il problema è questo: se devo effettuare una Stampa, ho bisogno che venga fatta in ordine alfabetico e non di tutte le colonne, solo di alcune.
    Le colonne interessate per la stampa del foglio "Dati" sono: K-S-T-U-V-W
    Io avevo pensato di trasferire il contenuto delle colonne interessate del foglio "Dati" in un altro foglio chiamato "Stampa", cercando di metterli con un codice in ordine alfabetico, per poi dare alla stampa.
    Non sapendo da dove cominciare ho realizzato qualcosa nel fogliio Stampa. Direi che non è il massimo per cui accetto consigli su come si possa risolvere questo mio grande problema.

    Vi allego il file.
    Username: ale
    password: ale
    Password DataBase: alessia
    Grazie a tutti



  • di Grograman data: 29/01/2014 10:39:23

    Ciao!

    Ti ho allegato un esempio, non ho guardato come e quando riporti i dati nel foglio "Dati" perchè personalmente le userform che non si possono chiudere non mi piacciono molto

    Ma già che c'era ho sostituito il commandbutton con un controllo activex, tanto per buttare lì un esempio ^_^

    A seguire il codice del cmd:


     
    Private Sub CommandButton1_Click()
      Dim wb As Workbook
      Dim wsDati As Worksheet, wsStamp As Worksheet
      Dim x As Long
      Dim rngC As Range
      
      Set wb = ThisWorkbook
      Set wsDati = wb.Worksheets("Dati")
      Set wsStamp = wb.Worksheets("Stampa")
      
      'puliamo foglio stampa
      With wsStamp
        x = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        .Range("A3:F" & x).ClearContents
      End With
      
      With wsDati
        x = .Range("A" & .Rows.Count).End(xlUp).Row
        Set rngC = .Range("A2:A" & x)
      End With
        
      'copiamo le colonne utili
      With rngC
        .Offset(, 10).Copy wsStamp.Cells(3, 1)
        .Offset(, 18).Resize(, 5).Copy wsStamp.Cells(3, 2)
      End With
      Set rngC = Nothing
      
      'ordiniamole in ordine alfabetico
      With wsStamp
        x = .Range("A" & .Rows.Count).End(xlUp).Row
        Set rngC = .Range("A3:F" & x)
        rngC.Sort Key1:=rngC.Cells(1, 2), order1:=xlAscending
      End With
      
      Set rngC = Nothing
      Set wsDati = Nothing
      Set wsStamp = Nothing
      Set wb = Nothing
    End Sub
    



  • di LucaS. (utente non iscritto) data: 29/01/2014 11:03:30

    Con questo non ti serve il foglio Stampa.
    In pratica ordina in base ai nomi, nasconde le colonne intermedie, imposta come area di stampa le colonne che ti interessano e propone di stampare. Alla fine si riporta alla situazione iniziale.
    Un suggerimento:
    Portando la colonna K vicino alle altre si potrebbe evitare di nascondere le colonne intermedie
     
    Sub stampa()
    k = Range("a65536").End(xlUp).Row   'conta le righe occupare
    Rows("2:" & k & "").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal       'ordina le righe in base alla colonna b
    Columns("l:r").Hidden = True        'nasconde le colonne dalla L alla R
    ActiveSheet.PageSetup.PrintArea = "k2:w" & k & ""   'imposta l'area di stampa
    
    Application.Dialogs(xlDialogPrint).Show     'mostra finestra di stampa
    
    Columns().Hidden = False    'mostra le colonne nascoste
    ActiveSheet.PageSetup.PrintArea = ""    'elimina l'area di stampa
    Rows("2:" & k & "").Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal   'ordina le righe in base alla colonna a
                                    'riportando la tabella allo stato iniziale
    End Sub
    



  • di alessia (utente non iscritto) data: 29/01/2014 11:17:25

    Grazie Grograman,
    io da sola non ci sarei mai riuscita, però c'è un problema, ti spiego quale.
    Quando sono nell'userform per effettuare una ricerca qualsiasi cosa io scriva nella textbox di ricerca, mi da sempre lo stesso risultato.Sembra bloccato. Come mai?



  • di alessia (utente non iscritto) data: 29/01/2014 11:31:19

    Grazie LucaS,
    ho provato il tuo codice della stampa.
    1- mi da la possibilità di selezionare la stampante. Infatti, non è sempre la stessa potrebbe cambiare "ottimo".
    2- Mi stampa le colonne desiderate in questo caso colonna K-S-T-U-V-W.
    Però il problema è questo che quando stampa la colonna S non viene messa in ordine alfabetico. Questo è importante mettere la colonna S in ordine alfabetico, naturalmente non modificando/cambiando il contenuto dell'intera riga. Si può risolvere? ecco perchè io avevo pensato di creare un altro foglio.
    Grazie



  • di LucaS. (utente non iscritto) data: 29/01/2014 11:42:14

    Non ho capito se c'è un problema con il codice e quindi la colonna S non viene ordinata, oppure se la colonna viene ordinata ma tu non vuoi che lo sia.



  • di LucaS. (utente non iscritto) data: 29/01/2014 11:54:39

    Forse ho capito.
    Io ho ordinato le righe in base al nome, ma forse tu volevi ordinarle secondo la ragione sociale (colonna S).
    Se è così ti basta sostituire, nella terza riga ((Rows("2:" & k & "").Sort Key1:=Range("B2")......) il B2 con S2 e andrà a ordinare secondo la colonna S



  • di alessia (utente non iscritto) data: 29/01/2014 11:55:19

    Cit. Non ho capito se c'è un problema con il codice e quindi la colonna S non viene ordinata, oppure se la colonna viene ordinata ma tu non vuoi che lo sia.

    Io voglio che la colonna S mi venga messa in ordine Alfabetico.
    Grazie



  • di alessia (utente non iscritto) data: 29/01/2014 12:14:52

    Grazie 1000 Lucas,
    ho modificato come tu mi hai detto, funziona bene.
    Solo che devo inserire un pulsante nel foglio Dati per poter stampare.
    Se fosse possibile vorrei farlo dalla Userfom. Cosa dovrei aggiungere?



  • di alessia (utente non iscritto) data: 29/01/2014 12:20:53

    P.s. Ho inserito questa riga:
    Sheets("Dati").Select

    ma mi da errore in questa riga:
    k = Range("a65536").End(xlUp).Row
    come posso superare questo problema?



  • di Grograman (utente non iscritto) data: 29/01/2014 12:24:30

    Tanto per non limitarci alle celle di un formato 2003 ^_^
     
    Dim K as long
    K = Range("A" & Rows.Count).End(xlUp).Row



  • di alessia (utente non iscritto) data: 29/01/2014 12:25:12

    Ho inserito questa istruzione
    Dim K
    sembra che funzioni. Sbaglio? E' giusto?

    Grazie



  • di mb data: 29/01/2014 12:33:06

    Ciao Alessia
    complimenit per il file allegato..
    non sono un grande esperto di vba, sto cercando con l'aiuto dei vari forum di capire qualcosa.....
    un consiglio: nella userform c'è un pulsante esci con il comando application.quit i grandi guru consigliano di non utilizzarlo perchè se il tuo fle viene aperto e c'è già un'altro file excel sullo stesso Pc c'è il rischio di chiudere anche l'altro usa thisworkbook.close .
    verifica sulla guida in linea di microsoft la sintassi corretta
    buon lavoro



  • di LucaS. (utente non iscritto) data: 29/01/2014 12:52:31

    Non saprei per l'errore.
    Io mi sono creato un file con la tua tabella e un form con un pulsante.
    Assegnando il codice al pulsante non ci sono problemi.
    Prova ad aggiungere
    with sheets("database")
    codice
    end with
    mettendo il punto davanti ai riferimenti di riga,colonna e cella (.row, .column, .range, .cells).
    Magari è solo un problema di riferimenti al foglio.



  • di Grograman (utente non iscritto) data: 29/01/2014 12:58:18

    Non avendo specificato l'errore io presumo solo che fosse l'omessa () dichiarazione delle variabili.



  • di alessia (utente non iscritto) data: 29/01/2014 13:07:44

    Ascoltate ragazzi e grazie per il Vostro aiuto sostanziale che mi state dando. Problema. Io sto provando il codice sotto riportato.
    Dim K As Long
    K = Range("A" & Rows.Count).End(xlUp).Row
    Rows("2:" & K & "").Sort Key1:=Range("S2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'ordina le righe in base alla colonna b
    Columns("l:r").Hidden = True 'nasconde le colonne dalla L alla R
    ActiveSheet.PageSetup.PrintArea = "k2:w" & K & "" 'imposta l'area di stampa

    Application.Dialogs(xlDialogPrint).Show 'mostra finestra di stampa

    Columns().Hidden = False 'mostra le colonne nascoste
    ActiveSheet.PageSetup.PrintArea = "" 'elimina l'area di stampa
    Rows("2:" & K & "").Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'ordina le righe in base alla colonna a
    'riportando la tabella allo stato iniziale

    End Sub


    Inserendo da capo i dati dall'userform e avendo aggiunto un pulsante per la stampa, al terzo inserimento mi va in errore VBA e si evidenziano le seguenti righe di colore giallo:

    Rows("2:" & K & "").Sort Key1:=Range("S2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'ordina le righe in base alla colonna b

    Come mai?



  • di alessia (utente non iscritto) data: 29/01/2014 13:17:20

    P.s. Errore di run-time 1004
    errore nel metodo sort per la classe range



  • di scossa data: 29/01/2014 13:53:40

    Vedo che metti in pratica i consigli ricevuti: ancora Application.Quit



  • di LucaS. (utente non iscritto) data: 29/01/2014 14:13:31

    Forse è un'incompatibilità tra excel 2003 e 2010.
    Quell'istruzione l'ho ottenuta con il registratore di macro.
    Su un nuovo file prova a ricrearti la tabella, avvia il registratore e fai ordinare le righe in base alla colonna S. Poi adatta il risultato



  • di LucaS. (utente non iscritto) data: 29/01/2014 14:37:26

    Beccato...
    il file è protetto....



  • di LucaS. (utente non iscritto) data: 29/01/2014 14:50:20

    3 soluzioni:
    1 - togli la protezione. Tanto può accedere al foglio solo chi ha la password e presumo sia solo tu.
    2 - all'inizio del codice per stampare togli la protezione e la rimetti prima di end sub
    3 - all'apertura del foglio (workbook_open) inserisci
    Worksheets("nome foglio").Protect , userinterfaceonly:=True
    così il foglio viene protetto ma puoi comunque fare modifiche con vba



  • di alessia (utente non iscritto) data: 29/01/2014 17:23:11

    Ho dovuto assentarmi per un pò, do un'okkiata e Vi faccio sapere..
    Grazie



  • di alessia (utente non iscritto) data: 29/01/2014 18:16:39

    Grazie Lucas,
    ho inserito così:
    Private Sub Workbook_Open()
    Sheets("Dati").Activate
    Worksheets("Dati").Protect , userinterfaceonly:=True
    UserForm1.Show

    End Sub

    Adesso sto facendo delle prove, devo dire che per il momento funziona bene.
    Rispondo con ordine a tutti.
    Per primo Voglio ringraziare tutti i ragazzi che hanno sottratto del loro tempo nel risolvere il mio problema. Sicuramente da sola non ci sarei mai riuscita.
    Grazie a tutti ragazzi siete grandi
    Un abbraccio.
    Secondo volevo rispondere prima a Mb, per il fatto che nel file Esempio è incluso in un pulsante application.quit. Mio malgrado, non ho fatto in tempo a rispondere perchè presa dal lavoro e dal cercar di risolvere e leggere le risposte su questo post.
    Detto questo rispondo a Scossa e Mb. Il file in questione è un esempio. Le modifiche sono state già apportate al file in mio possesso pieno di Dati personali che non si chiama Esempio, ma Rubrica Aziendale. Questo pubblicato qui, lo dice la parola stessa "Esempio". Infatti, avevo notato che con altri file aperti quando pigiavo sul tasto in questione, chiudeva anche altri file Excel. Problema che andava risolto. Grazie a te Scossa ho apportato le modifiche eliminando il problema. Anche perchè al momento questo file lo sto usando solo io. Una volta ultimato "qualche integrazione ancora" è testato, sarà a disposizione di altre due persone. Al contempo nel file ho anche eliminato la cella lampeggiante sotto tuo consiglio notando che, dopo poco dava Molto Fastidio.
    Io accetto i consigli perchè ho voglia di capire ed imparare sempre più.
    Grazie a tutti escluso nessuno.
    Un abbraccio
    By Alessia
    P.s. Credo che si possa mettere risolto. Grazie a tutti Voi per l'impegno dimostratomi.



  • di alessia (utente non iscritto) data: 29/01/2014 18:41:35

    Scusate ragazzi ho notato una cosa. Quando Stampo non esce nel foglio stampato la riga 1.
    Cioè quando stampa mi deve stampare anche la riga 1 riportanto i valori fissi che sono:
    Ruolo, Ragione Sociale, Indirizzo, Civico, Comune, Provincia.
    corrispondono a: K1, S1,T1,U1,V1,W1.
    Come posso risolvere?
    Grazie



  • di LucaS. (utente non iscritto) data: 29/01/2014 18:53:49

    Sostituisci
    ActiveSheet.PageSetup.PrintArea = "k2:w" & k & ""
    con
    ActiveSheet.PageSetup.PrintArea = "k1:w" & k & ""



  • di alessia (utente non iscritto) data: 29/01/2014 19:05:25

    Grazie Lucas,
    Ho fatto come tu hai detto "Funziona".
    Un Bacio......a presto



  • di scossa data: 29/01/2014 21:04:49

    cit. alessia: "..... Anche perchè al momento questo file lo sto usando solo io."

    Eh no Alessia, lo stanno usando TUTTI quelli che ti stanno aiutando qui!!



  • di alessia (utente non iscritto) data: 30/01/2014 10:45:51

    Hai ragione Scossa non ci avevo pensato. Presa dal panico nel risolvere il problema mi è sfuggito.Scusatemi tutti.
    Un abbraccio.
    By Alessia