Ricavare dati da tabelle



  • Ricavare dati da tabelle
    di maxim (utente non iscritto) data: 27/05/2013 23:15:34

    Ciao ragazzi,
    chiedo ancora il vostro aiuto perchè vorrei ottenere alcuni dati da più tabelle, inoltre vorrei
    1) inserire i dati delle tabelle in un codice VBA
    2) conoscendo il DN e lo spessore mi piacerebbe ottenere il prezzo e il codice corrispondente.
    Allego il file cosi da spiegare il tutto.

    p.s. spero di non aver inserito due volte la richiesta.
    notte

    non riesco ad inserire il link mi appare errore, spam non si possono



  • di totygno71 (utente non iscritto) data: 29/05/2013 08:54:07

    E' una discussione doppione quindi da chiudere_



  • di maxim (utente non iscritto) data: 29/05/2013 09:31:12

    e come si chiude???



  • di Vecchio Frac data: 29/05/2013 11:41:37

    Se ne siete sicuri la chiudo io.
    Se non è da chiudere fatemelo sapere che la riapro.





  • di totygno71 (utente non iscritto) data: 29/05/2013 11:45:40

    E' compito del Mod, che ultimamente mi latita! ^_^


  • Ricavare dati da tabelle
    di maxim (utente non iscritto) data: 27/05/2013 23:17:38

    Ciao ragazzi,
    chiedo ancora il vostro aiuto perchè vorrei ottenere alcuni dati da più tabelle, inoltre vorrei
    1) inserire i dati delle tabelle in un codice VBA
    2) conoscendo il DN e lo spessore mi piacerebbe ottenere il prezzo e il codice corrispondente.
    Allego il file cosi da spiegare il tutto.

    p.s. spero di non aver inserito due volte la richiesta.
    notte

    non riesco ad inserire il link mi appare errore, spam non è permesso inserire link nelle discussioni



  • di totygno71 data: 28/05/2013 08:48:49

    Ciao Max

    pochissimi giorni fa si è affrontato questo problema (in realtà anche altre volte) prova a fare un giro nello storico e vedrai che qualcosa trovi.

    Altrimenti siamo qui...

    PS piccolo suggerimento "indiretto" ^_^



  • di Textomb data: 28/05/2013 09:28:33

    ho dato un'occhiata al file allegato.
    Se le tabelle, riportate nel foglio 2, da cui prelevare prezzo e codice hanno sempre la stessa struttura (cioè cambiano solo i valori numerici all'interno) si potrebbe costruire una routine che, quando inserisci i campi Tipologia, DN e spessore nel foglio 1 completa le informazioni mancanti di prezzo e codice.
    Ma non capisco quando hai scritto "LE TABELLE LE VORREI INSERIRE IN UN CODICE VBA E NON IN UN FOGLIO".
    che vorresti dire?




  • di Textomb data: 28/05/2013 09:35:52

    guardando sempre il tuo file allegato.
    Per es, una tubazione con spessore 4,5 da quale colonna dovrebbe prelevare il corrispondente prezzo?
    3 - 4 oppure 5 - 6




  • di maxim (utente non iscritto) data: 28/05/2013 11:35:27

    Ho cercato nello storico, ma forse non troppo bene, ci riprovo comunque!!! grazie totygno71

    Textomb:
    - i dati delle tabelle le vorrei inserire in una array? spero di non aver detto una cavolata!

    - per gli spessori vale quello subito superiore es. 4,5 colonna 5-6; 6,1 colonna 7-8

    - le tabelle possono avere dimensioni diverse per dimensione

    - con la "TIPOLOGIA" vorrei scegliere la tabella da usare es.
    "MTG" ------> TABELLA P90.14AAA_ _
    "PFA" ------> TABELLA P90.34AAA_ _
    .....e cosi via

    grazie per l'attenzione



  • di Textomb data: 28/05/2013 15:15:07

    cit..: i dati delle tabelle le vorrei inserire in una array? spero di non aver detto una cavolata!
    un array è una matrice vettore. Mi pare alquanto inadeguato per ospitare una tabella come quella riportata nel foglio 2 del tuo file.
    Ma perchè dovresti trovare un'alternativa rispetto agli strumenti proposti da excel. Hai un foglio delegato ad ospitare le tue tabelle che tra l'altro è comodo e facilmente consultabile quando vuoi. Semmai puoi nasconderlo e quindi renderlo invisibile ad altri utilizzatori.
    Il resto che descrivi mi pare abbastanza fattibile con il contributo di un pò di codice VBA sottostante.



  • di maxim (utente non iscritto) data: 28/05/2013 15:39:01

    ho detto una cavolata!!!

    accetto ogni tipo di consiglio.
    Le tabelle le ho in forma cartacea e ho pensato erroneamente che potessero essere gestite meglio inserendo i dati in qualche routine, vuol dire che le copierò pian pianino nel foglio delegato.




  • di Textomb data: 28/05/2013 16:47:58

    la questione è certamente risolvibile.
    purtroppo per il momento non posso.
    vedrò di dedicarmici tra un pò...



  • di maxim (utente non iscritto) data: 29/05/2013 07:16:39

    quando puoi ;)



  • di Textomb data: 29/05/2013 18:48:48

    Praticamente guardando il tuo file in allegato e mantenendone le caratteristiche ho elaborato questo codice.
    Lo inserisco con un minimo di commenti.
    Ti allego anche il file così sviluppato.
    Prova e mi saprai dire.
    Sono certo che si poteva fare con meno fatica ma, alla fine mi è venuto questo tipo di lavoro che risponde a quanto inizialmente avevi richiesto.
    Non sarebbe male un riesame migliorativo da parte di altri del Forum...


     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' L'Obiettivo è trovare prezzo e codice una volta noti Tipologia, Spessore e DN
    ' I valori cercati si trovano nelle rispettive tabelle poste nel foglio2
    ' Il prezzo si trova incrociando i dati del DN e dello spessore nella tabella riferita alla tipologia scelta
    ' Il codice invece sarà dato dalla tipologia aggiungendo due lettere una in corriposndenza dello spessore e l'altra del DN
    ' Quindi riepilogando si avrà:
    ' L'importo sarà dato da foglio2.cells(MyRow, MyColumn)
    ' il codice sarà dato da codTable & x & y
    ' in cui
    ' x = foglio2.cells(MyRowSP, MyColumn)
    ' y = foglio2.cells(MyRow, MyColumnDN)
    ' Si tratta di valorizzare tutte le variabili richiamate
    
    ' Prima dichiaro le varibili
    Dim thisRow As Integer, MyRow As Integer, MyColumn As Integer, Tipologia As String, DN As Integer, Spessore As Integer, _
    Importo As Currency, MyTable As Range, MyRange As Range, cell As Range, _
    codTable As Range, x As String, y As String, MyColumnDN As Integer, MyRowSP As Integer
    
    thisRow = Target.Row
    
    If Target.Column = 6 And Cells(thisRow, 2) <> "" And Cells(thisRow, 3) <> "" And Cells(thisRow, 4) <> "" Then
    Tipologia = Cells(thisRow, 2)
    DN = Cells(thisRow, 3)
    Spessore = WorksheetFunction.Ceiling(Cells(thisRow, 4), 1)
    
    On Error Resume Next
    Set MyTable = Foglio2.Cells.Find(what:=Tipologia, lookat:=xlWhole).CurrentRegion
    Set codTable = MyTable.Find(what:="TABELLA", lookat:=xlPart)
        If MyTable Is Nothing Or codTable Is Nothing Then
        MsgBox "Non ci sono valori validi", vbCritical
        Exit Sub
        End If
    On Error GoTo 0
    
    With MyTable.Find(what:=DN, lookat:=xlWhole)
    MyRow = .Row 'variabile trovata
    MyColumnDN = .Column + 1 'variabile trovata
    End With
    ' Visto il modo in cui sono stati scritti i valori degli spessori nelle celle del foglio2 mi conviene procedere come segue:
    ' costruisco una matrice con tutti i valori e poi verifico in quale intervallo si trova quello che ho scelto
    Dim MatriceSp(), n As Byte, m As Byte, sp As Byte, UnderS As Byte
    Set MyRange = MyTable.Find(what:="spessore", lookat:=xlPart).Offset(1)
    n = MyRange.End(xlToRight).Column - MyRange.Column + 1 ' n. righe della matrice contenente gli spessori
    ReDim MatriceSp(1 To n, 2)
    For Each cell In Foglio2.Range(MyRange.Address, MyRange.End(xlToRight).Address)
    m = m + 1
    MatriceSp(m, 0) = CInt(Split(cell, "-")(0))
    MatriceSp(m, 1) = CInt(Split(cell, "-")(1))
    MatriceSp(m, 2) = cell.Column
    Next
    ' Ho appena costruito la matrice MatriceSp con tutti gli spessori e cerco in quale intervallo è compreso quello che ho scelto
        For sp = 1 To n
        If Spessore >= MatriceSp(sp, 0) And Spessore <= MatriceSp(sp, 1) Then
        MyColumn = MatriceSp(sp, 2) 'variabile trovata
        MyRowSP = MyTable.Find(what:=MatriceSp(sp, 0) & " - " & MatriceSp(sp, 1), lookat:=xlWhole).Row 'varibile trovata
        x = Left(Foglio2.Cells(MyRowSP + 2, MyColumn), 1) 'variabile trovata
        y = Foglio2.Cells(MyRow, MyColumnDN)  'variabile trovata
        Exit For
        End If
        Next
        ' Se lo spessore è fuori Range esce dalla routine con MsgBox di avviso
        If MyColumn = 0 Or MyRowSP = 0 Then
        MsgBox "Valori non inclusi nell'intervallo degli spessori", vbCritical
        Exit Sub
        End If
    
    ' compongo tutte le varibili trovate e li riporto nel foglio1 con il doppio clic sulla colonna F
    Foglio1.Cells(thisRow, 5).Value = Foglio2.Cells(MyRow, MyColumn) 'Questo è l'importo
    UnderS = InStr(1, codTable, "_")
    Foglio1.Cells(thisRow, 6).Value = Mid(codTable, 9, UnderS - 9) & x & y 'Questo è il Codice depurato dagli underscore_
    End If
    
    End Sub
    



  • di maxim (utente non iscritto) data: 29/05/2013 21:52:02

    Textomb, sei un grande hai fatto un sacco di lavoro.
    Appena posso lo provo e cerco di capire cosa hai realizzato anche se da quel poco che ho visto non penso di esserne in grado.
    Ma come si fa ad avere una cosi buona padronanza di questa "lingua"?????

    Per adesso grazie!!