elenco indirizzi



  • elenco indirizzi
    di willy (utente non iscritto) data: 17/02/2015 12:32:35

    Buona giornata a tutti. Sono nuovo del forum e spero di aver postato correttamente. Sono entrato in questo forum con la speranza di avere delle valide indicazioni per finire il mio lavoro. Alle prime armi con Excel 2013 mi sono costruito una agenda da tavolo settimanale per il 2015. Sette celle orizzontali per ogni giorno (LU -Dom) e 10 celle in verticale per gli appuntamenti e promemoria.Ho ricopiato il primo foglio settimanale per 53 volte quante sono le settimane del2015suddivise in linguette a colori diversi a seconda dei mesi. Con altri fogli, suddivisi sempre in linguette ho aggiunto le maree e le fasi lunari. Sin qui tutto OK!
    Ora ho inserito anche un elenco telefonico sempre usando il sistema dei fogli settimanali e con il medesimo formato sopradescritto. Ho iniziato a digitare i vari dati foglio per foglio (linguetta per linguetta) poi al termine dopo aver completato una decina di linguette ho marcato le linguette e ad Excel ho chiesto la funzione "ORDINA E FILTRA" . A questo punto sono rimasto con un palmo di naso in quanto la funzione si è inattivata. Mi ordina e filtra solo i nominativi ed i dati foglio per foglio. Ora chiedo, come posso fare per ordinare i nominativi inseriti in varie linguette? Se nel primo foglioe/o linguetta ho inserito Antonio e nel decimo Angelo come posso fare per ordinare ad Excel di filtrarli in ordine alfabetico ? Marcando tutte le linguette non ottengo nessun risultato. Un anticipato ringraziamento a chi vorrà darmi dei validi suggerimenti.



  • di Lucas87 data: 17/02/2015 14:23:34

    Ciao
    Non ho capito...vuoi ordinare i dati in ciascun foglio?
    Serve una macro
    I fogli hanno tutti la stessa struttura?
    Allega un file di prova. Basta che ci sia un solo foglio


  • elenco indirizzi
    di willy (utente non iscritto) data: 17/02/2015 15:32:28

    Grazie per la tua risposta. Ora cercherò di esprimermi meglio. Non desidero ordinare i dati in ciascun foglio, ma in tutti i fogli che ho scritto. L'elelenco telefonico è composto da 12 nominativi. I fogli e/o le linguette per il momento sono 4 , ma potrei avere la necessità di aumentarle. In totale prendiamo in esame i 48 nominativi da filtrare/ ordinare in ordine crescente indifferentemente che li abbia inseriti nel primo, nel secondo e/o nell'ultimo foglio. I fogli hanno tutti la stessa struttura.Da questa posizione del forum non mi è possibile inserire il file. Lo farò in secondo tempo


  • elenco indirizzi
    di willy (utente non iscritto) data: 17/02/2015 22:23:12

    Come puoi notare Lucas87 ho già inoltrato il file del mio elenco telefonico. Sapresti aiutarmi a risolvere il problema?


  • elenco telefonico
    di willy (utente non iscritto) data: 19/02/2015 14:31:46

    Chi può aiutarmi a scrivere una macro VBA per la mia agenda?
    Grazie 1000!



  • di Vecchio Frac data: 19/02/2015 16:22:45

    A me piacciono le immagini delle copertina del primo foglio :o)
    Questo tuo chiarimento... non chiarisce ma confonde: "Non desidero ordinare i dati in ciascun foglio, ma in tutti i fogli che ho scritto".
    Dal che capisco questo: che se quarto foglio compare il nominativo "Antonio", questo dovrà essere collocato nel primo foglio, in ordine alfabetico, se ci sta, altrimenti nel secondo foglio se ci sta e così via (ogni elenco è composto da dieci nominativi).
    Confesso che, se è così, lo trovo abbastanza bizzarro... perchè non puoi avere un unico elencone con tutti tuoi nominativi, eventualmente da filtrare con un filtro automatico o avanzato?

    Se invece non è così, spiega meglio :)




  • elenco indirizzi
    di willy (utente non iscritto) data: 19/02/2015 22:44:14

    Vecchio Frak, cercherò di spiegarmi meglio. Intanto grazie per la copertina. Verrà stampata su carta fotografica e sarà la copertina della mia agenda da tavolo. Per quanto riguarda la mia agenda telefonica e/o rubrica come la si vuol chiamare e come hai potuto vedere dall'allegato, il mio problema è quello di disporre in ordine alfabetico tutti nominativi che ho digitato e/o che andrò ad aggiungere man mano che avrò necessità di ampliarla aggiungendo altri fogli e linguette. Ad esempio: nell'allegato, Amedeo è posto sulla linguetta indirizzi n.4 in A7. E' chiaro che automaticamente dovrebbe balzare nel foglio con linguetta n.1 . Il nome Giovanni appare nel foglio con linguetta n.1 in A3. Evidentemente dovrebbe saltare indietro , e non saprei in quale pagina, ma seguendo un ordine alfabetico fra tutti i nominativi che compongono l'elenco stesso. Cioè un elencone che per motivi di struttura è digitato su diverse pagine e linguette , ma che nella sua complessità dovrebbe seguire l'ordine alfabetico. Poi alcuni propongono la soluzione delle macro VBA, tu quelle del filtro avanzato. . . Personalmente ho poca esperienza con Excel e quello che chiedo sul forum è come riuscire a riordinare tutti i nominativi dell'allegato con una sola funzione. Grazie per il tuo interessamento.



  • di Vecchio Frac data: 20/02/2015 09:25:34

    Mi par di cogliere che tutto è finalizzato alla stampa e non alla gestione e ricerca dei dati. In questo caso ti conviene organizzare il file in due linguette principali, una con tutti i nominativi in cascata e una con uno schema che raccoglie i dati un attimo prima di stamparli. Una piccola macro spalmerà i dati in questo schema che stamperà in successione fino ad esaurimento dei dati disponibili.
    Se ho un attimo ti allego un esempio.





  • di Vecchio Frac data: 20/02/2015 11:33:18

    Allego una versione rivista del tuo file leggermente semplificato, con la macro sottostante.
    E' per farti capire l'idea, ma funziona (ho impostato la preview della stampa, non la stampa effettiva).

    Allegato: "Calendario__vfrac.xlsm"
     
    Option Explicit
    
    Sub create_calendar()
    Dim sh_dati As Worksheet, sh_cal As Worksheet
    Dim data_region As Range, i As Long, myrng As Range
    Dim tot_sheets As Integer
    
        Set sh_dati = Sheets("DATI")
        Set sh_cal = Sheets("SCHEMA_STAMPA")
        
        Set data_region = sh_dati.Range("A1").CurrentRegion
        
        With sh_dati.Sort
            .SortFields.Clear
            .SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange data_region
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    
        Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
        
        For i = 1 To data_region.Rows.Count Step 10
            Set myrng = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
            myrng.Copy
            sh_cal.Cells(3, "A").PasteSpecial xlPasteValues
            sh_cal.PrintOut preview:=True
        Next
        
        Application.CutCopyMode = False
        Range("A1").Select
        
        MsgBox "Ho terminato."
    
    End Sub





  • elenco indirizzi
    di Willy (utente non iscritto) data: 21/02/2015 15:19:41

    Vecchio Frak Buongiorno, ho scaricato il tuo allegato e ringrazio per il tempo dedicatomi.
    Purtroppo andando in stampa ho ottenuto il foglio con le celle vuote. Forse ho omesso qualche passaggio? In allegato ho registrato il desktop.



  • di Vecchio Frac data: 21/02/2015 15:35:15

    Scusa lo davo per scontato, ma non hai lanciato la macro, tutto qui :o)
    Premi Alt-F8 e esegui l'unica macro disponibile.

    Mi sono accorto però che il file che io ho allegato contiene una versione di codice precedente a quella che devi invece considerare: la versione corretta è quella che ho allegato nel mio post precedente. Apri quindi l'editor di codice (Alt-f11), e se non vedi il codice fai Ctrl-R per raggiungere la finestra dei progetti, quindi doppio click sul modulo1. Copia e incolla il codice giusto dal post di ieri.
    Quindi esci (Alt.F4), poi avvia il tutto (Alt-F8 e doppio click sulla macro per eseguire).
    Si apriranno in successione le anteprime dei fogli compilati.
    Ho detto che è un codice grezzo: si arrabbia se annulli o stoppi perchè non è gestita questa situazione. Ma era solo per farti vedere cosa intendevo dire. Libero di accettare o rifiutare la proposta.

    p.s. è la prima volta che vedo un filmato delle operazioni postato sul forum :o)






  • elenco indirizzi
    di willy (utente non iscritto) data: 25/02/2015 23:59:22

    Vecchio Frak, ho cercato di eseguire le tue indicazioni, ma mi si riordina solo un foglio. I codice appare , ed eseguo i comandi Alt+F4 poi Alt+F8. All'apertura della finestra "macro" scelgo "Macro in: calendario vfracxlsm " poi esegui. Ottengo una finestra con la dicitura "Impossibile ottenere il codice in modalità interruzione". se vado in stampa appare riordinato solo un foglio !Pazienza scriverò l'elenco a mano. .



  • di Vecchio Frac data: 26/02/2015 11:00:00

    Ok, ho cambiato strategia.
    Allego per comodità il codice rivisto e anche il file perchè ho posizionato un pulsante di avvio nella prima pagina di copertina che avvierà la macro.
    Il codice adesso preleva i dati dal database e li spalma dieci alla volta in schede successive, posizionando un'interruzione pagina tra una scheda e l'altra, quindi non ti resta che dare l'anteprima di stampa e stampare le schede a pagina piena.
     
    Option Explicit
    
    Sub create_calendar()
    Dim sh_dati As Worksheet, sh_cal As Worksheet
    Dim data_region As Range, i As Long, my_range As Range
    Dim tot_sheets As Integer
    
        If MsgBox("Preparare il calendario sulla base dei dati inseriti?", vbQuestion + vbYesNo, "Calendario") = vbNo Then Exit Sub
        
        Set sh_dati = Sheets("DATI")
        Set sh_cal = Sheets("SCHEMA_STAMPA")
        
        Set data_region = sh_dati.Range("A1").CurrentRegion
        
        'annulla tutte le interruzioni di pagina manuali nella scheda di stampa
        sh_cal.ResetAllPageBreaks
        
        Application.ScreenUpdating = False
        
        'riordina tutta la base dati
        With sh_dati.Sort
            .SortFields.Clear
            .SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange data_region
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    
        'imposta un riferimento alle righe contenenti i dati riordinati
        Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
        
        'a dieci elementi per scheda, calcola il n° di schede necessarie a contenerli tutti
        tot_sheets = (data_region.Rows.Count  10) + Abs(data_region.Rows.Count Mod 10 > 0)
        
        'imposta un riferimento al modello di scheda da replicare
        Set my_range = sh_cal.Range("A1:G17")
        
        'copia incolla le schede necessarie, in successione, nel foglio schema_stampa a step di 12 righe
        For i = 2 To tot_sheets
            my_range.Copy
            sh_cal.Cells((i - 1) * 12 + 1, "A").PasteSpecial xlPasteAll
        Next
        
        'preleva i dati da ricopiare, dieci alla volta, e li incolla nelle schede di pertinenza
        For i = 1 To data_region.Rows.Count Step 10
            Set my_range = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
            my_range.Copy
            sh_cal.Cells(((i  10) * 12) + 3, "A").PasteSpecial xlPasteValues
            'inserisce un'interruzione di pagina in corrispondenza di ogni inizio scheda dopo la prima scheda
            If i > 1 Then sh_cal.HPageBreaks.Add Before:=Cells((i  10) * 12 + 1, "A")
        Next
        
        sh_cal.Rows("1:1000").RowHeight = 33
        Application.CutCopyMode = False
        
        Range("A1").Select
        Application.ScreenUpdating = True
        MsgBox "Ho terminato", vbInformation
        
    End Sub
    





  • elenco indirizzi
    di willy (utente non iscritto) data: 04/03/2015 20:37:03

    Vecchio Frac, benissimo ! Il cambio di strategia funziona molto bene! Unico problema se ti va di ovviare rimane la pagina 4 e 5 da risistemare. Nella pagina 4 appare anche l'intestazione della pagina 5 , mentre nella pagina 5 manca il pezzo che appare nel fondo-pagina della 4. Comunque GRAZIE 1000!



  • di Vecchio Frac data: 05/03/2015 10:44:55

    E' solo un problema di altezza delle righe e/o impostazione della stampante.
    Agisci aumentando poco alla volta il valore 33 in:
    sh_cal.Rows("1:1000").RowHeight = 33
    in modo che le pagine cadano esattamente all'interruzione di pagina (io non ho più il file per fare prove).





  • di Nicola (utente non iscritto) data: 05/03/2015 12:07:51

    Un saluto A vecchio Frac....

    Questo codice creato per Willy è da grandi....

    Scusate per essermi intromesso ma ci tenevo a fare una Saluto a Vecchio Frac...

    Ps a presto per un new progetto



  • elenco indirizzi
    di willy (utente non iscritto) data: 09/03/2015 23:35:19

    Vecchio Frak, ho provato ad aumentare i valori nella macro al rigo : sh_cal . Rows ("1:1000").RowHeigt = 33 come mi indicavi, ma la penultima e la ultima pagina rimango sempre spezzate a metà. Ora ho addirittura impostato il valore di 45, ma nulla è cambiato. Vedi allegato.



  • di Vecchio Frac data: 10/03/2015 09:23:34

    Riesaminando l'intera procedura, ho capito che non è un problema di altezza di righe (lascia pure impostata l'altezza a 33 punti).
    Occorre inserire un'ultima interruzione di pagina manuale dopo aver eseguito il ciclo di copiatura delle schede.
    Riallego l'intera procedura per evitare confusione.
     
    Option Explicit
    
    Sub create_calendar()
    Dim sh_dati As Worksheet, sh_cal As Worksheet
    Dim data_region As Range, i As Long, my_range As Range
    Dim tot_sheets As Integer
    
        If MsgBox("Preparare il calendario sulla base dei dati inseriti?", vbQuestion + vbYesNo, "Calendario") = vbNo Then Exit Sub
        
        Set sh_dati = Sheets("DATI")
        Set sh_cal = Sheets("SCHEMA_STAMPA")
        
        Set data_region = sh_dati.Range("A1").CurrentRegion
        
        'annulla tutte le interruzioni di pagina manuali nella scheda di stampa
        sh_cal.ResetAllPageBreaks
        
        Application.ScreenUpdating = False
        
        'riordina tutta la base dati
        With sh_dati.Sort
            .SortFields.Clear
            .SortFields.Add Key:=data_region.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange data_region
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    
        'imposta un riferimento alle righe contenenti i dati riordinati
        Set data_region = data_region.Offset(1).Resize(data_region.Rows.Count - 1)
        
        'a dieci elementi per scheda, calcola il n° di schede necessarie a contenerli tutti
        tot_sheets = (data_region.Rows.Count  10) + Abs(data_region.Rows.Count Mod 10 > 0)
        
        'imposta un riferimento al modello di scheda da replicare
        Set my_range = sh_cal.Range("A1:G17")
        
        'copia incolla le schede necessarie, in successione, nel foglio schema_stampa a step di 12 righe
        For i = 2 To tot_sheets
            my_range.Copy
            sh_cal.Cells((i - 1) * 12 + 1, "A").PasteSpecial xlPasteAll
        Next
        
        'preleva i dati da ricopiare, dieci alla volta, e li incolla nelle schede di pertinenza
        For i = 1 To data_region.Rows.Count Step 10
            Set my_range = Range(data_region.Cells(i, "A"), data_region.Cells(i + 9, "G"))
            my_range.Copy
            sh_cal.Cells(((i  10) * 12) + 3, "A").PasteSpecial xlPasteValues
            'inserisce un'interruzione di pagina in corrispondenza di ogni inizio scheda dopo la prima scheda
            If i > 1 Then sh_cal.HPageBreaks.Add Before:=Cells((i  10) * 12 + 1, "A")
        Next
        
        'inserisce l'ultima interruzione manuale di pagina
        sh_cal.HPageBreaks.Add Before:=Cells((i  10) * 12 + 1, "A")        '<<<<<<<<<<<
        'imposta l'altezza delle righe a 33 punti
        sh_cal.Rows("1:1000").RowHeight = 33
        Application.CutCopyMode = False
        
        Range("A1").Select
        Application.ScreenUpdating = True
        MsgBox "Ho terminato", vbInformation
        
    End Sub





  • elenco indirizzi
    di willy (utente non iscritto) data: 10/03/2015 22:14:31

    Vecchio Frac, ho provato la modifica del tuo ultimo file. Qualcosa è migliorato nel senso che l'intestazione della pagina 5 che prima appariva in calce alla pagina 4 ora è al suo posto. Nella pagina 4 di 4 le ultime due righe rimangono vuote mentre alla pagina 5 di 5 anziché proseguire l'ordine alfabetico ricomincia dalla lettera "A". L'intestazione della pagina 5 di 5 è giusta, mentre la citata pagina risulta con meno righe. Ancora grazie!