risultati inattesi con collection



  • risultati inattesi con collection
    di efarre data: 16/04/2015 12:58:51

    Buongiorno a tutti.
    sto studiando un po' VBA per Excel, e mi sono imbattuto in questo problema:
    ho 4 collection che si attivano in cascata e che si generano dal foglio1 dove è presente un database.
    la prima "ElencoMagazzino" è composta da enne magazzini.
    in ogni magazzino ci sono enne articoli che compongono la collection "ElencoArticoli" ed ogni articolo presente in quel magazzino ha enne modelli che compongono la collection "ElencoModello".
    la sub che ho scritto dovrebbe scorrere il database e per ogni magazzino dovrebbe elencarmi quali articoli sono presenti e quali modelli ha ciascun articolo.
    in parte funziona, ma ci sono dei modelli che non sono presenti per quell'articolo in quel magazzino che invece escono fuori.
    Dove è l'errore?
    allego esempio.
    Grazie a chi potrà darmi un aiuto
    Enzo



  • di Luca73 data: 16/04/2015 13:08:18

    Io ho aperto il file e correttamente il programma nelle celle evidenziate il giallo mi dà 0 cioè nessuno...
    quindi nessun errore





  • di efarre data: 16/04/2015 15:08:57

    la colonna con i numeri è per verificare l'esistenza dei modelli di ogni articolo in ciascun magazzino.
    se il risultato della formula è 0 significa che quel dato modello non esiste per quell'articolo in quel magazzino e pertanto mi aspetto che la sub sintesi non la scriva.

    il range F1:H24 è popolato dalla sub Sintesi e, se avesse funzionato correttamente, il mod2 dell'art3 nel mag1 non dovrebbe essere visualizzato (infatti il risultato è 0 = non esiste quell'oggetto nel mag1).
    Lo stesso dicasi per il mod2 dell'art2 nel mag3.
    Credo che il problema sia nel settaggio dell'intervallo che utilizzo.
    Ho provato diverse combinazioni, e questa è quella che si avvicina di più ma è ovviamente non corretta.
    Enzo



  • di Luca73 data: 16/04/2015 15:23:42

    Dovè la sub sintesi?
    io ho trovato solo la CALCOLAOCCORRENZE() tutta commentata.






  • di efarre data: 16/04/2015 15:49:32

    nel codice della userform
    Enzo



  • di Luca73 data: 17/04/2015 08:59:25

    Ho trovato l'errore e anche la soluzione (mi sembra) fai le prove e verifica se tutto OK.
    Il problema è quando carichi i modelli.
    fai una verifica solo sull'articolo e non sul magazzino della riga pertanto se in un magazzino diverso esiste un modello diverso dello stesso articolo allora lui lo rileva.
    Vedi sotto la riga con errore e la soluzione che ti propongo.
    Fai le verifiche e fammi sapere.

     
    If intArticolo(x, 2) = vArticolo Then
                ElencoModello.Add intArticolo(x, 3).Value, CStr(intArticolo(x, 3).Value)
    End If
    
    DIVENTA
    
    If ((intArticolo(x, 2) = vArticolo) and  (intArticolo(x, 1) = vMagazzino)Then
                ElencoModello.Add intArticolo(x, 3).Value, CStr(intArticolo(x, 3).Value)
    End If






  • di efarre data: 17/04/2015 12:32:50

    verificato con successo

    adesso tutto quadra

    Grazie mille

    Enzo





  • di Marius44 data: 21/04/2015 16:36:51

    Per efarre (scusa per il ritardo)
    Ho notato che nel file che allegavi accanto ad ogni risposta della tua macro inserivi la formula CONTA.PIU.SE.
    Vedi se può aiutarti la macro che ti allego la quale, dopo che hai avuto i risultati con la tua macro (che possono essere diversi se cambi l'ordinamento), ti posta il risultato nella giusta posizione.
    Fammi sapere se va bene.
    Ciao
     
    Sub prova()
    Dim riga1, riga2, i, j, k As Integer
    Dim magaz, artic, model, dato1, dato2, dato3 As String
        Range("J:J").ClearContents
        'dati FISSI........................e....dati VARIABILI
        'A6:A+ultima riga piena in col.A        dato in col.F
        'B6:B+ultima riga piena in col.B        dato in col.G
        'C6:C+ultima riga piena in col.C        dato in col.H
        riga1 = Range("A65000").End(xlUp).Row   'ultima riga dell'elenco occupata
        magaz = "A6:A" & riga1: artic = "B6:B" & riga1: model = "C6:C" & riga1
    'cicli per individuare i dati variabili
        riga2 = Range("H65000").End(xlUp).Row   'ultima riga dell'estrazione occupata
        For i = 6 To riga2
            dato1 = Cells(i, 6)
            For j = i To riga2
                If Cells(j, 7) = "" Then
                    i = j: GoTo 2
                Else
                    dato2 = Cells(j, 7)
                End If
                For k = j To riga2
                    If Cells(k, 8) = "" Then
                        j = k: GoTo 1
                    Else
                        dato3 = Cells(k, 8)
                        Cells(k, 10).Formula = "=COUNTIFS(" & magaz & "," & Chr(34) & dato1 & Chr(34) & "," & artic & "," & Chr(34) & dato2 & Chr(34) & "," & model & "," & Chr(34) & dato3 & Chr(34) & ")"
                    End If
                Next k
    1       Next j
    2   Next i
    End Sub
    



  • di efarre data: 22/04/2015 12:48:07

    Buongiorno Marius,
    ti ringrazio per la macro.
    ho imparato un'altra cosa..



    Enzo