Classifica 2



  • Classifica 2
    di Mauro (utente non iscritto) data: 24/08/2013 10:05:40

    Buon giorno a tutti, ho bisogno di una correzione, il codice sotto riportato crea una collezione di nomi univoci di clienti lungo la colonna B del foglio Giornaliera,
    - filtra la tabella passando uno a uno i nomi memorizzati nella collection
    - per ogni filtro calcolo il valore Max della colonna Z e lo riporta nel foglio Top10
    - ordina il foglio Top10 in base ai valori decrescenti

    In pratica non mi riporta tutti i clienti. allego il file di esempio,
    Grazie Mauro.

     
    Sub ricerca_miglior_cliente()
      Dim i As Byte, ur As Integer, M As Double
      Dim col As Collection
      Dim clienti As Range, cl As Range, c As Variant
    
      Application.ScreenUpdating = False
    
      Sheets("Giornaliera").Activate
      'calcolo l'ultima cella occupata della colonna A
      ur = Cells(Rows.Count, 1).End(xlUp).Row
      
      'creo una collezione con i nomi univoci della colonna B
      Set clienti = Range("b3:b" & ur)
      Set col = New Collection
      On Error Resume Next
      For Each cl In clienti
      col.Add cl.Value, CStr(cl.Value)
      Next
    
      With Sheets("Top10")
        'per ogni cliente della collection..
        For Each c In col
          'eseguo il filtro
          clienti.AutoFilter Field:=1, Criteria1:=c
          'calcolo il valore Max della colonna Z filtrata
          M = WorksheetFunction.Subtotal(9, Range("z3:z" & ur))
    
          i = i + 1
          'nel foglio Top10 riporto il nome del cliente
          .Cells(i + 1, 2) = c
          'e l'importo Max calcolato
          .Cells(i + 1, 3) = M
        Next
        
        'resetto il filtro
        ActiveSheet.ShowAllData
    
        'ordino la tabella con gli importi maggiori di ogni cliente
        .Range("B1:C" & i + 1).Sort Key1:=.[C1], Order1:=xlDescending, Header:=xlGuess
    
        'seleziono il Foglio Top10 (deve essere prima visibile!)
        .Select
      End With
    
      Application.ScreenUpdating = True
        
    End Sub



  • di HarryBosch data: 24/08/2013 12:02:15

    Ciao Mauro
    in realtà ne mancano molti di clienti :)
    Il problema sta nella dichiarazione della variabile "i" che è di tipo Byte e invece, vista l'abbondanza di dati, deve essere almeno di tipo Integer:

    Dim i As Byte --> devi modificare in --> Dim i As Integer


  • Classifica 2
    di Mauro (utente non iscritto) data: 24/08/2013 13:21:36

    Grazie HarryBosch ho corretto la variabile è perfetto
    Mauro