Estrapolazione Dati



  • Estrapolazione Dati
    di Ciccio1984 (utente non iscritto) data: 30/10/2015 12:09:37

    Ciao ragazzi
    sono nuovo del forum, e sto solo all'inizio con vba.
    Ecco il problema, ho un foglio chiamato Archivio dove ci sono dei dati inseriti, la struttura è composta in questo modo:

    A B C D E F G
    N° Data Operatore Linea Stazione Ente Note

    ora tramite una userform che ho creato dove inserisco le date "dal" .... "al" vorrei che tramite un pulsante sull'userform attivi una macro che mi copiasse tutte le celle che sono comprese in quell'intervallo, che ho dato tramite userform in un'altro foglio






  • di alfrimpa data: 30/10/2015 14:56:55

    Ciao Ciccio

    Una domanda: nel campo Data le date sono ordinate o no?

    Alfredo





  • di alfrimpa data: 30/10/2015 15:39:37

    Ciao Ciccio

    Ti ho allegato file (Ciccio.xlsm) con la sottostante macro che credo faccia quello che hai chiesto.

    Sul foglio1 ci sono i dati
    Sul foglio2 verranno copiati i dati che rispettano i criteri delle date
    Sul foglio2 c'è un pulsante che apre la maschera: nella prima casella di testo inserisci la data iniziale e nella seconda quella finale e clicca sul pulsante.

    Ovvio che il tutto andrà migliorato; questo è solo un primo approccio.

    Fai sapere.

    Alfredo
     
    Private Sub CommandButton1_Click()
    Dim ur As Long
    Dim datainizio As Date
    Dim datafine As Date
    Dim rng As Range
    Dim cel As Range
    datainizio = CDate(UserForm1.TextBox1.Value)
    datafine = CDate(UserForm1.TextBox2.Value)
    Set rng = Worksheets("Foglio1").Range("B2:b10")
    Application.ScreenUpdating = False
    For Each cel In rng
    ur = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
        If cel.Value >= datainizio And cel.Value <= datafine Then
            Worksheets("Foglio1").Range("a" & cel.Row & ":" & "f" & cel.Row).Copy Destination:=Worksheets("Foglio2").Range("a" & ur + 1)
        End If
    Next cel
    UserForm1.Hide
      Worksheets("Foglio2").Range("A1:F100").Select
        ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Add Key:=Range("B2:B3") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Foglio2").Sort
            .SetRange Range("A1:F3")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Application.ScreenUpdating = True
        Range("a1").Select
    End Sub
    






  • di ciccio1984 (utente non iscritto) data: 30/10/2015 16:00:11

    Ciao Alfredo
    grazie della celere risposta, è quasi perfetta, infatti ho provato la macro dal tuo file però ho visto che ogni volta che faccio una ricerca i risultati li mette sotto io invece vorrei che i vecchi risultati cambiassero, poi ho notato che prende tutti i dati invece a me servono quelli che inserisco nella txtbox
    esempio dal 01/01/15 al 31/01/2015 mi deve dare solo le righe riguardanti le date comprese tra 01/01/15 e 31/01/2015 ovviamente il campo data è formattata (gg/mm/aaaa) e non è in ordine


    Grazie cordiali saluti



  • di alfrimpa data: 30/10/2015 16:14:31

    Cioè tu vorresti che ad ogni inserimento delle date deve cancellare quelle preesistenti?

    Non capisco la tua seconda obiezione: se inserisci le date 1/1/15 e 31/1/15 la macro ti restituisce solo i record compresi tra queste due date (a meno che non mi stia perdendo qualcosa).

    Alfredo





  • di Ciccio1984 (utente non iscritto) data: 30/10/2015 17:00:10

    Allora se io faccio la ricerca per data mi inserisce i risultati in un'altro foglio e fin qui tutto bene, perfetto, quando io va a rifare la ricerca i risultati li metto sempre nel nuovo foglio ma i vecchi risultati non devono più comparire voglio solo i risultati della nuova ricerca.
    Spero di essere stato chiaro ancora grazie 1000
    Cordiali saluti



  • di alfrimpa data: 30/10/2015 17:24:00

    Prova con il nuovo file allegato (Ciccio1.xlsm)

    Se va bene sarai in grado poi a trasferire il tutto sul tuo file reale?

    Alfredo





  • di ciccio1984 (utente non iscritto) data: 30/10/2015 18:08:07

    Ok dopo provo e vediamo cosa succede
    grazie 1000



  • di Cucù data: 30/10/2015 18:27:09

    Ciao Alfredo,
    una domanda...
    esiste un motivo particolare per il quale hai utilizzato
    ur = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
    per indicizzare l'incremento delle righe anzichè i classici metodi (dimensionare una variabile "X" e incrementarla di 1 ad ogni verificarsi dell'evenienza voluta)?
    Cucù



  • di alfrimpa data: 30/10/2015 18:46:10

    Ciao Cucù

    Con l'istruzione

    Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row

    Determino qual è l'ultima riga piena della colonna (in questo caso) A.

    La uso sempre quando devo accodare record uno sotto l'altro e non ricordo mai di avere avuto problemi.

    Che poi in Excel ci siano molti modi per fare le stesse cose è risaputo

    Alfredo





  • di Cucù data: 30/10/2015 19:22:32

    Ok grazie ...
    Pensavo che dietro ci fosse qualche arcano motivo...
    Ciao



  • di alfrimpa data: 30/10/2015 19:26:56

    Ciao Cucù

    E quale arcano motivo?

    E' uno dei tanti metodi per determinare l'ultima riga piena così si evita di impostare contatori e menate varie.

    Almeno io mi trovo meglio così.

    Alfredo





  • di Cucù data: 30/10/2015 19:39:27

    "E quale arcano motivo?"
    Non saprei... per questo te l'ho chiesto...


  • Grazie [RISOLTO]
    di Ciccio1984 (utente non iscritto) data: 04/11/2015 10:17:24

    Grazie Alfredo sono riuscito nel mio intento solo grazie al tuo aiuto

    GRAZIE GRAZIE GRAZIE