Estrazione dati da tabella Excel



  • Estrazione dati da tabella Excel
    di gbadalotti data: 12/09/2013 12:22:15

    Salve a tutti,
    mi scuso anticipatamente per eventuali gaff ma è la prima volta che partecipo ad un forum.
    Partendo dal presupposto che purtroppo ho scarse conoscenze di vba (a dire la verità più nulle che scarse), sono circa quattro giorno che ci lavoro e con CERCA.VERT sono riuscito ad ottenere un risultato che però non è ciò che mi serve in quanto mi rende sono un singolo dato della tabella, ora però mi trovo alle strette.
    In pratica devo predisporre un documento Excel composto da più fogli in cui nel primo foglio (chiamato "Home") un utente inserisce una data manualmente nella cella D8 impostata con formato GG/MM/AAAA e in automatico Excel deve interrogare i fogli successivi chiamati F01;F02.. fino a F100.

    I fogli F0x hanno le seguenti colonne:
    Range di Ricerca: Da A4 ad A150
    Colonna A (Colonna da Interrogare): DATA SCADENZA FATTURA (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)
    Colonna B: NOME DEL FORNITORE (in formato GENERALE, alcune celle della colonna possono restare vuote)
    Colonna C: NUMERO DOCUMENTO (in formato GENERALE, alcune celle della colonna possono restare vuote)
    Colonna D: DATA FATTURA (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)
    Colonna E: IMPORTO (in formato NUMERO, alcune celle della colonna possono restare vuote)
    Colonna F: DATA PAGAMENTO (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)

    In pratica l'interrogazione della Colonna A deve determinare in caso di corrispondenza con la data inserita dall'utente la copia di tutte le prime 5 celle orizzontali senza fermarsi al primo risultato ma verificando ed estraendo i risultato da tutti i fogli. I risultati dovranno essere riportati nel foglio principale chiamato "Home" a partire dalla cella F10.
    Es: se nel foglio F01 in A4 viene rilevata la data corrispondente verranno copiate le celle A4,B4,C4,D4,E4,F4 la ricerca passsa automaticamente alla riga successiva ...

    Forse mi sono dilungato un pò troppo..

    Ringrazio tutti coloro che mi risponderanno
    Gabriele



  • di Grograman data: 12/09/2013 12:29:37

    Cit: "I fogli F0x hanno le seguenti colonne:"

    Ho perso interesse a questa frase non avendo visto un file di esempio allegato



  • di totygno71 (utente non iscritto) data: 12/09/2013 14:10:48

    @ gabriele

    Se hai un file di esempio allegalo cosi rendi piu "probabile" che qualcuno ti risponda vista la complessità dello scenario proposto e ricostruirlo per poterti rispondere porta via tempo prezioso.
    Ciauz



  • di gbadalotti data: 12/09/2013 14:42:39

    Scusatemi, ho visto solo ora come caricare i file.
    Ho caricato il doc.

    Grazie
    Gabriele



  • di Grograman data: 12/09/2013 15:05:51

    Ti ho allegato un esempio di cui riporto il codice, non ho previsto controlli su esistenz anome fornitore e in mancanza di un esempio pratico copia tutte le celle dove trova la data riportata!
     
    Sub Scopiazzo()
      Dim wb As Workbook
      Dim ws As Worksheet, ws2 As Worksheet
      
      Dim x As Long, i As Long, k As Long
      Dim dtChk As Date
      
      Set wb = ThisWorkbook
      Set ws = wb.Sheets("Home")
      
        With ws
          x = IIf(.Range("F" & .Rows.Count).End(xlUp).Row < 10, 10, .Range("F" & .Rows.Count).End(xlUp).Row) + 1
          dtChk = .Range("D8")
          For Each ws2 In wb.Worksheets
            With ws2
            If .Name <> ws.Name Then
              i = .Range("F" & .Rows.Count).End(xlUp).Row
              For k = 2 To i
                If .Cells(k, 1) = dtChk Then
                  .Range(.Cells(k, 1), .Cells(k, 6)).Copy ws.Cells(x, 6)
                  x = x + 1
                End If
              Next k
            End If
            End With
          Next ws2
        End With
      
      Set ws = Nothing
      Set wb = Nothing
    End Sub



  • di gbadalotti data: 12/09/2013 16:13:56

    Grazie !!!
    il codice fa proprio quello che mi server !!!!
    Manca solo un dettaglio, dalla seconda interrogazione tutti i risultati li accoda ai precedenti invece di cancellarmi i risultati precedenti e presentarmi quelli nuovi.

    Grazie ancora
    Gabriele



  • di Grograman (utente non iscritto) data: 12/09/2013 16:18:26

    cit: "dalla seconda interrogazione tutti i risultati li accoda ai precedenti "

    Lo so ^_^



  • di gbadalotti data: 17/09/2013 16:47:44

    Scusate,
    negli ultimi giorni sono stato preso dal lavoro e non ho potuto dedicare il tempo che avrei voluto a quanto in sospeso.
    Alla fine comunque ho ottenuto il risultato voluto evitando l'accodamento dei risultati, cosa che invece accadeva precedentemente.
    Allego il codice conscio che sicuramente è suscettibile di notevoli migliorie.

    Ringrazio tutti per l'aiuto, la disponibilità e la simpatia dimostrata
    Gabriele


     
    Sub LeggiDati()
      Dim wb As Workbook
      Dim ws As Worksheet, ws2 As Worksheet
      
      Dim x As Long, i As Long, k As Long
      Dim dtChk As Date
      
      Set wb = ThisWorkbook
      Set ws = wb.Sheets("Home")
      
      Sheets("Home").Select
      Range("F:K").ClearContents
      
      Range("F10").Select
        
        With ws
          x = IIf(.Range("F" & .Rows.Count).End(xlUp).Row < 10, 10, .Range("F" & .Rows.Count).End(xlUp).Row)
          dtChk = .Range("D8")
          For Each ws2 In wb.Worksheets
            With ws2
            If .Name <> ws.Name Then
              i = .Range("F" & .Rows.Count).End(xlUp).Row
              For k = 2 To i
                If .Cells(k, 1) = dtChk Then
                  Range(.Cells(k, 1), .Cells(k, 6)).Copy ws.Cells(x, 6)
                  x = x + 1
                End If
              Next k
            End If
            End With
          Next ws2
        End With
      
      Set ws = Nothing
      Set ws2 = Nothing
      Set wb = Nothing
    End Sub