macro verifica valori



  • macro verifica valori
    di Ema74 data: 09/02/2016 09:40:44

    Buongiorno,
    avrei bisogno di un aiuto per quanto segue:

    Ho un file di Word (lo chiamiamo report_file), nel quale ho 2 tabelle.
    la prima tabella (tabella 1) è una tabella Excel linkata al report_file.
    Questa tabella 1 consente, mediante menù a tendina, di selezionare uno specifico materiale (cella B5).
    La lista con tutti i materiali ed i relativi valori è contenuta sul foglio2 da G4 a CO180.
    Alla selezione del materiale, appariranno i relativi valori fissi (celle da F a Q; F5, F6, F7, ecc..), che ovviamente cambieranno in funzione del materiale scelto.

    la tabella 2 (attualmente in word ma all' occorrenza può essere in Excel) , invece verrà compilata manualmente, con valori che cambiano di giorno in giorno, a seconda dei valori ottenuti da una rilevazione reale.

    quindi, in breve:
    - la tabella 1 contiene dei valori fissi (da F a Q) che sono strettamente legati al materiale selezionato (B5);
    - la tabella 2, è una tabella di lavoro che verrà compilata di volta in volta con valori reali.

    di cosa ho bisogno:
    una macro che controlli che i valori inseriti nella tabella 2 non eccedano il range (min. / max.) dato dalla tabella 1.
    in caso il valore inserito in tabella 2 ecceda, un msgbox di avviso o qualcosa di simile.

    grazie a tutti per il supporto/consigli.





  • di alfrimpa data: 09/02/2016 14:39:21

    Ciao Ema74

    Ti consiglierei di usare Excel piuttosto che Word (che personalmente utilizzo solo come macchina da scrivere) in quanto molto più adatto.

    Allega quindi un file di Excel in cui illustri il tuo quesito.

    Alfredo

    P.S. Mi sbaglierò ma, a naso, non puoi usare una Convalida Dati?





  • di Ema74 data: 09/02/2016 15:54:29

    ciao Alfredo,
    grazie per la risposta. effettivamente ho provato la funzione convalida dati, ma dato che sono poco esperto, non sono riuscito nell' intento.
    Probabilmente perché questa funzione preclude che i dati siano contenuti nello stesso file, mi sbaglio?

    comunque allego file esempio per miglior valutazione.

    Grazie ancora



  • di alfrimpa data: 09/02/2016 18:41:53

    Ciao Ema

    Prova a guardare il file allegato dove ho usato la semplice convalida dati.

    Mi sono limitato ai soli elementi Calcio e Manganese

    In A5 ho messo una tendina (convalida dati) dove si può scegliere il prodotto ed in base alla scelta la tabella si popolerà dei relativi valori.

    Non so se era questo che volevi; io ho cercato di interpretare.

    Fammi sapere.

    Alfredo

    P.S. Ovviamente il file andrà completato.





  • di Ema74 data: 10/02/2016 08:03:58

    Grazie Alfredo,
    era esattamente questo che volevo, unico problema è che il report_file deve rimanere in word, in quanto tutti i formati report che utilizziamo a lavoro hanno una struttura/interfaccia simile tra loro e non posso snaturarla.
    Quindi ti chiedo: la convalida dati può avvenire tra due file Excel diversi? o forse si possono gestire le due tabelle su unico file Excel, tabella 1 su foglio 1 e tabella 2 su foglio 2, per poi linkarli al file in word?



  • di Ema74 data: 10/02/2016 08:35:10

    Alfredo,
    sto provando a gestire il file come ho scritto prima.
    c'è però un problema: ci sono diversi casi in cui il valore massimo non è definito, ovvero la cella è vuota. significa che per quel elemento l' unica restrizione è il valore minimo. Temo che con la funzione convalida dati il valore nullo non sia riconosciuto. qualche idea?

    grazie mille



  • di alfrimpa data: 10/02/2016 11:28:04

    Ciao Ema

    Cerco di rispondere.

    1) Per quanto riguarda Word, come ho detto, non sono in grado di aiutarti quindi devi fare tutto su Excel
    2) Non credo che la convalida dati funzioni su due file diversi per cui ti conviene fare il tutto su un unico file di Excel
    3) Per quanto riguarda la mancanza del limite massimo ho già risolto il problema mettendo in R1 un valore altissimo (1.000.000) ed ho messo in convalida come limite massimo la cella R1 (vedi quanto ho fatto per il carbonio.

    Piuttosto il problema è che quando nel valore Max c'è una o più lettere, es. nel Nichel (0,40 (A), il valore da prendere è sempre quello numerico (0,40)? Cosa stanno a significare le lettere? si possono eliminare?

    Non so se sono riuscito a spiegarmi.

    Alfredo





  • di Ema74 data: 10/02/2016 13:43:28

    Ciao Alfredo,
    allora, per quanto riguarda i valori con una lettera a fianco (a) (b) (c), per questi valori bisogna tenere conto delle note che vengono incluse nella cella C9. effettivamente non avevo considerato che potrebbe essere un problema in quanto alfanumerico.
    per quanto riguarda invece il problema delle celle vuote, diventa un po' complicato gestire quanto hai fatto tu per tutte le celle relative ai valori massimi che sono vuote (dovrei andare sul foglio "elenco materiali" e per ogni cella vuota mettere "=R1" o qualcosa del genere... che ne pensi?

    grazie davvero per il supporto!



  • di alfrimpa data: 10/02/2016 16:16:44

    Ciao Ema(nuele)

    Ti ho allegato un nuovo file (Ema74_1.xlsm) dove ho cambiato completamente approccio rispetto al precedente abbandonando la Convalida Dati ed utilizzando il VBA con la macro che vedi sotto.

    Il file funziona così: nel momento in cui vai ad inserire un valore nella Table 2 se questo non è compreso nel range min/max della relativa colonna in Table 1 apparirà il messaggio "Valore non ammesso".

    Il problema, come noterai, è che se sul foglio2 nelle celle che indicano min e max ci sono delle lettere nella Table 1 si visualizzerà ovviamente "#VALORE" non essendo, in tal caso, un valore numerico.

    Al momento prova il file così com'è inserendo in Table 2 dei valori nelle colonne in cui in Table 1 non ci sia "#VALORE".

    Fai molti test perché i problemi sono sempre dietro l'angolo.

    Poi vedremo insieme come aggirare l'ostacolo delle lettere; un'idea potrebbe essere quella di inserire sul foglio2 a destra di ogni colonna min. e max. un'altra colonna dove inserire le lettere togliendole da min e max; in tal modo avremmo valori "puliti" da poter utilizzare nelle formule e non avremmo più errori.

    Non so se per te questa è un'ipotesi praticabile.

    Fai sapere.

    Alfredo  
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim min As Double
    Dim max As Double
    On Error Resume Next
    If Not Intersect(Target, Range("F17:Q28")) Is Nothing Then
        If Target.Value = "" Then Exit Sub
            Select Case Target.Row
                Case Is = 17
                    min = Target.Offset(-12, 0).Value
                    max = Target.Offset(-11, 0).Value
                Case Is = 18
                    min = Target.Offset(-13, 0).Value
                    max = Target.Offset(-12, 0).Value
                Case Is = 19
                    min = Target.Offset(-14, 0).Value
                    max = Target.Offset(-13, 0).Value
                Case Is = 20
                    min = Target.Offset(-15, 0).Value
                    max = Target.Offset(-14, 0).Value
                Case Is = 21
                    min = Target.Offset(-16, 0).Value
                    max = Target.Offset(-15, 0).Value
                Case Is = 22
                    min = Target.Offset(-17, 0).Value
                    max = Target.Offset(-16, 0).Value
                Case Is = 23
                    min = Target.Offset(-18, 0).Value
                    max = Target.Offset(-17, 0).Value
                Case Is = 24
                    min = Target.Offset(-19, 0).Value
                    max = Target.Offset(-18, 0).Value
                Case Is = 25
                    min = Target.Offset(-20, 0).Value
                    max = Target.Offset(-19, 0).Value
                Case Is = 26
                    min = Target.Offset(-21, 0).Value
                    max = Target.Offset(-20, 0).Value
                Case Is = 27
                    min = Target.Offset(-22, 0).Value
                    max = Target.Offset(-21, 0).Value
                Case Is = 28
                    min = Target.Offset(-23, 0).Value
                    max = Target.Offset(-22, 0).Value
            End Select
            If max = 0 Then
                max = 1000000
            End If
        If Target.Value < min Or Target.Value > max Then
            MsgBox "Valore non ammesso"
            Target.Value = ""
        End If
    End If
    End Sub
    
    






  • di Ema74 data: 11/02/2016 10:01:01

    Grazie Alfredo!
    siamo molto vicini alla soluzione
    concordo pienamente sulla tua analisi, difatti appena ho un attimo creerò delle nuove colonne per gestire le lettere.
    ti faccio sapere il prima possibile, al momento comunque mi pare un ottimo lavoro.

    a presto, ciao.



  • di Ema74 data: 19/02/2016 10:07:10

    Eccomi di nuovo!
    scusate il ritardo nel rispondere, sono stato un po' impegnato sul lavoro.
    ho allegato il nuovo file compilato seguendo gli utilissimi consigli di Alfredo (che ringrazio tantissimo per l' aiuto).
    Il file al momento sembra funzionare bene, chiedo semplicemente una contro-verifica per poter chiudere il post.