Lista dinamica

di il
42 risposte

42 Risposte - Pagina 2

  • Re: Lista dinamica

    patel ha scritto:


    Dimenticavo, se vuoi cambiare il numero di criteri e vuoi visualizzare nel risultato tutti gli MP devi anche modificare la colonna J nella riga
    sh2.Range("A" & r & ":J" & r).Copy Range("I" & dr)
    Ciao, ritorno a scrivere su questo post dopo aver lavorato parecchio su un file con la tua macro! Non riesco a capire come viene calcolato lo scarto, saresti così gentile da spiegarmi? Ti ringrazio in anticipo.

    Nello specifico, ho inserito 207 criteri di ricerca e sono tutti = 0 tranne il primo che è 20.

    - SE ci sono due prodotti in lista potenzialmente compatibili, uno con il primo valore di 10 e l'altro di 20 con scarto 50% mi restituisce solo il secondo. Perché? Quale calcolo viene fatto? Credevo calcolasse così: il 50% di 20 è 10 quindi un risultato compatibile è qualcosa che va da 20+10 a 20-10, invece accetta solo valori da 13 a 40, avresti una formula che mi spiega il ragionamento?

    Grazie!
  • Re: Lista dinamica

    Il controllo è fatto dalle righe
       dif = Abs(sh2.Cells(r, c + 1) - sh1.Cells(c + 2, "B"))
       If dif <= sh2.Cells(r, c + 1) * scarto Then
    calcola la differenza dei due valori e controlla se questa è minore del 50% del valore del foglio2.
  • Re: Lista dinamica

    patel ha scritto:


    Il controllo è fatto dalle righe
       dif = Abs(sh2.Cells(r, c + 1) - sh1.Cells(c + 2, "B"))
       If dif <= sh2.Cells(r, c + 1) * scarto Then
    calcola la differenza dei due valori e controlla se questa è minore del 50% del valore del foglio2.
    Ah! Ho capito fantastico grazie mille. Sto continuando a sviluppare il mio piccolo progetto e sto valutando anche un altro approccio al problema. Mi permetto di continuare questa conversazione invece che aprire un nuovo topic perchè forse riusciamo a farlo riciclando il tuo codice. Per VBA brancolo nel buio quindi è solo un'ipotesi, perdonami se dovessi sbagliarmi (e soprattutto, vista la tua esperienza, dimmi pure se è qualcosa di impossibile, in tal caso cercherò altre soluzioni...).

    In breve, questo tool sviluppato grazie a te serve per non aggiungere prodotti al catalogo se c'è qualcosa di simile ed è il top. Ho l'esigenza però, di verificare se in catalogo ci sono prodotti simili tra di loro. Logica uguale a quella già applicata ma bisognerebbe far confrontare ogni singola riga con tutte le altre e magari indicare a fianco tutti i nomi prodotti simili (tutta la logica è identica al codice che hai già fatto, ecco perchè pensavo si potesse riciclare qualcosa!)

    Grazie davvero in anticipo qualora dovessimo riuscire in questa ultima e definitiva impresa!

    Questo ragionamento lo vorrei applicare sulla tabella "lista prodotti" del file https://drive.google.com/open?id=1WcB2K6Kp4iO_AzVcqNcLZFdm0iN6tYMD (è esattamente il file su cui hai lavorato solo che ci ho integrato il tuo codice)
  • Re: Lista dinamica

    Non ho capito, dovresti allegare anche il risultato desiderato con commenti
  • Re: Lista dinamica

    patel ha scritto:


    Non ho capito, dovresti allegare anche il risultato desiderato con commenti
    Hai ragione .. non sono stato troppo chiaro. File in allegato!
    https://drive.google.com/open?id=1W29f0LkIs_cEO4A0TEWs4t9L-KQBz_Q4
  • Re: Lista dinamica

    Spiega meglio, non capisco
  • Re: Lista dinamica

    patel ha scritto:


    Spiega meglio, non capisco
    Ci riprovo in modo schematico:

    - Scopo: Individuare prodotti simili (entro uno scarto in %) in una lista
    - Il tuo codice VBA già creato permette di individuare prodotti simili in una lista a partire da una serie di criteri di ricerca inseribili manualmente
    - Quello che servirebbe ora è una ricerca nella lista dei prodotti in base alle materie prime della lista stessa per trovare corrispondenze tra loro. Quindi senza inserire i criteri manualmente
    - La mia supposizione è che il codice si potrebbe utilizzare modificando qualcosa (spero). Ecco un esempio, spero il più chiaro possibile:

    https://drive.google.com/open?id=1N0lnvNrIa8aHkmKhLXYOSPkEbCzXHUMB
  • Re: Lista dinamica

    Credo d'aver capito, ma con quale scarto hai calcolato il risultato desiderato dell'esempio ?
    Comunque prova questa
    Sub cerca()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    dr = 4
    ncol = 9 ' numero criteri
    tol = Range("M3")
    For r = 4 To LR
      prod = Cells(r, "A")
      For rr = 4 To LR
        n = 0
        For c = 1 To ncol
          dif = Abs(Cells(r, c + 1) - Cells(rr, c + 1))
          If dif <= Cells(r, c + 1) * tol Then n = n + 1
        Next
        If n = ncol Then
          prodotto = Cells(rr, "A")
          If prodotto = prod Then prodotto = ""
          compatib = compatib & prodotto & ","
        End If
      Next
      Cells(r, "L") = compatib
      compatib = ""
    
    Next
    End Sub
  • Re: Lista dinamica

    patel ha scritto:


    Credo d'aver capito, ma con quale scarto hai calcolato il risultato desiderato dell'esempio ?
    Comunque prova questa
    Sub cerca()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    dr = 4
    ncol = 9 ' numero criteri
    tol = Range("M3")
    For r = 4 To LR
      prod = Cells(r, "A")
      For rr = 4 To LR
        n = 0
        For c = 1 To ncol
          dif = Abs(Cells(r, c + 1) - Cells(rr, c + 1))
          If dif <= Cells(r, c + 1) * tol Then n = n + 1
        Next
        If n = ncol Then
          prodotto = Cells(rr, "A")
          If prodotto = prod Then prodotto = ""
          compatib = compatib & prodotto & ","
        End If
      Next
      Cells(r, "L") = compatib
      compatib = ""
    
    Next
    End Sub
    Nell'esempio ho giusto cercato di spiegare ciò a cui stavo pensando. Infatti a destra ho scritto Scarto x% proprio perchè non avevo fatto i calcoli ! Grazie sei molto gentile e spero che questo non abbia causato troppo lavoro, adesso ci gioco un po' e ti faccio sapere!
  • Re: Lista dinamica

    patel ha scritto:


    Credo d'aver capito, ma con quale scarto hai calcolato il risultato desiderato dell'esempio ?
    Comunque prova questa
    Sub cerca()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    dr = 4
    ncol = 9 ' numero criteri
    tol = Range("M3")
    For r = 4 To LR
      prod = Cells(r, "A")
      For rr = 4 To LR
        n = 0
        For c = 1 To ncol
          dif = Abs(Cells(r, c + 1) - Cells(rr, c + 1))
          If dif <= Cells(r, c + 1) * tol Then n = n + 1
        Next
        If n = ncol Then
          prodotto = Cells(rr, "A")
          If prodotto = prod Then prodotto = ""
          compatib = compatib & prodotto & ","
        End If
      Next
      Cells(r, "L") = compatib
      compatib = ""
    
    Next
    End Sub
    Funziona esattamente come dovrebbe! Ha solo un difetto (che credo dipenda "dalla matematica", si può forse risolvere col valore assoluto?). Il prodotto 1 non risulta compatibile con il 3 ma il prodotto 3 vede come compatibile il prodotto 1. Se aumento lo scarto invece sia prodotto 1 che 3 "si vedono". Credo sia quindi un problema di calcolo. Ti allego il file con la tua macro incorporata (ho leggermente modificato il tuo codice vba per adattarlo alla tabella).

    https://drive.google.com/open?id=1Ryoxf_BtkVnFOVrKwxf4sDouK7cEKsfg
  • Re: Lista dinamica

    Le condizioni per confrontare i dati devi stabilirle tu, il mio è solo un esempio.
    Se devo confrontare 20 con 40 e considero come scarto accettabile il 50% di 20 ottengo 10, se considero come scarto accettabile il 50% di 40 ottengo 20, nel primo caso i 2 valori non sono comparabili, nel secondo lo sono.
  • Re: Lista dinamica

    patel ha scritto:


    Le condizioni per confrontare i dati devi stabilirle tu, il mio è solo un esempio.
    Se devo confrontare 20 con 40 e considero come scarto accettabile il 50% di 20 ottengo 10, se considero come scarto accettabile il 50% di 40 ottengo 20, nel primo caso i 2 valori non sono comparabili, nel secondo lo sono.
    Hai ragione. Perfetto allora, grazie di tutto!!
  • Re: Lista dinamica

    patel ha scritto:


    Le condizioni per confrontare i dati devi stabilirle tu, il mio è solo un esempio.
    Se devo confrontare 20 con 40 e considero come scarto accettabile il 50% di 20 ottengo 10, se considero come scarto accettabile il 50% di 40 ottengo 20, nel primo caso i 2 valori non sono comparabili, nel secondo lo sono.
    Sto ancora lavorando sullo stesso codice, sullo stesso file...! Sono mortificato nel chiederti di nuovo/ancora aiuto. Ci tengo davvero tanto a questo file quindi io ti chiedo se questa ennesima modifica sia possibile, qualcuno mi ha detto che basterebbe una stringa..non saprei!

    Al momento il tuo codice confronta tutte le righe con tutte le colonne ma io vorrei che SE una riga è vuota allora non deve confrontare. Questo perchè ci sono MP che possono non essere confrontate e un valore vale l'altro! Esempio in allegato. Speriamo che riusciamo a fare anche questa

    ESEMPIO: Se cerco MP1 e MP2 con 999 non trova niente. Se cerco MP1, MP2 e MP3 con 999 mi trova il prodotto TEST. Io vorrei trovare TEST a prescindere perchè se lascio MP3 vuoto non deve fare il confronto! (Ho messo scarto 0 per semplificarci le cose).... Grazie mille in anticipo. Se invece avessi messo MP3 0 allora sarebbe corretto escludere TEST.

    PS. Quindi al momento per il codice se la cella è vuota lo legge come 0 . Invece se è vuota dovrebbe saltare il confronto

    https://drive.google.com/file/d/1-T1_0jMfmrir3qxxWm8vs3V2XO4xTHCv/view?usp=sharing
  • Re: Lista dinamica

    Non posso scaricarlo, devi autorizzare l'accesso a chiunque abbia il link
  • Re: Lista dinamica

    patel ha scritto:


    Non posso scaricarlo, devi autorizzare l'accesso a chiunque abbia il link
    Fatto grazie mille per la gentilezza. Comunque approfitto per dirti che ti inviai un messaggio privato (non so se l'hai letto)

    https://drive.google.com/file/d/1-T1_0jMfmrir3qxxWm8vs3V2XO4xTHCv/view?usp=drivesdk
Devi accedere o registrarti per scrivere nel forum
42 risposte