Sviluppare funzionalita su Microsoft Office con VBA creare riepilogo non con pivot ma con vba

LoginRegistrati
Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #7677 Risposta

    mb
    Partecipante

      Buongiorno

      avrei bisogno del vostro prezioso aiuto per un elenco, che allego ma in versione ridotta.

      Mi piacerebbe capire se è possibile ottenere lo stesso risultato di una tabella pivot ma utilizzando vba

      in pratica in un foglio ho i dati incolonnati per deposito,articolo,quantità

      io avrei piacere di generare un nuovo foglio con :

      in colonna A gli articoli e nelle colonne a fianco i depositi con le relative giacenze

      sperando di essere stato chiaro ringrazio chi mi potrà insegnare come fare

       

       

       

      Allegati:
      You must be logged in to view attached files.
      #7682 Risposta
      Marius44
      Marius44
      Moderatore
        22 pts

        Ciao

        Con i dati che appaiono nel file allegato, inserisci un Modulo standard e copia la macro sottostante che assegnerai ad un pulsante da posizionare nel Foglio "vba"

        Option Explicit
        Option Compare Text
        
        Sub Elenco_VBA()
        Dim CodArt
        Dim ur2 As Long, ur3 As Long, i As Long, j As Long, cn As Long
        Dim cella As String
        ur3 = Sheets("vba").Cells(Rows.Count, 1).End(xlUp).Row
        ur2 = Sheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
        
        cella = "A1"
        ReDim CodArt(1 To ur2)
        With Sheets("Foglio1")
          CodArt = .Range(.Range(cella), .Range(cella).End(xlUp)).Resize(ur2, 3).Value
        End With
        
        For i = 2 To ur3
          For j = 2 To UBound(CodArt)
            If Sheets("vba").Cells(i, 1) = CodArt(j, 2) Then
              cn = Application.WorksheetFunction.Match(CodArt(j, 1), Sheets("vba").Range("A1:K1"), 0)
              Sheets("vba").Cells(i, cn) = CodArt(j, 3)
            End If
          Next j
          Sheets("vba").Cells(i, 11).FormulaR1C1 = "=SUM(RC[-9]:RC[-1])"
        Next i
        
        End Sub
        

        Fai sapere. Ciao,

        Mario

        #7683 Risposta

        mb
        Partecipante

          che dire Mario 

          sei veramente un genio   

          adesso provo ad andare oltre

          se non riesco da solo ti disturberò ancora

           

           

          #7684 Risposta

          mb
          Partecipante

            Ciao ci ho provato ma la classe non è acqua

             

            prima ho modificato l'esecuzione inserendo il valore 4 al valore 3

            poi ho  inserito l'estrazione della descrizione ma non essendo esperto adesso mi inserisce la descizione al posto del valore mi puoi spiegare dove sbaglio

             

            grazie

             

            Allegati:
            You must be logged in to view attached files.
            #7686 Risposta

            mb
            Partecipante

              ciao mario

               

              ci ho provato va un pò meglio

               

              mi puoi solo dire se come l'ho modificata va bene o si può migliorare??

               

              grazie

               

              Allegati:
              You must be logged in to view attached files.
              #7688 Risposta
              Marius44
              Marius44
              Moderatore
                22 pts

                Ciao

                Scusa se non ho risposto prima ma sono stato fuori (e fra un po' vado a prendere i nipotini a scuola).

                Allora tu hai un foglio (Foglio1) con 7 colonne e ne vuoi portare solo 4 nell'altro Foglio.

                Dopo aver stabilito per il Foglio1 una cella di partenza (cella = "A1") e conosciuta l'ultima riga piena, questa riga

                 CodArt = .Range(.Range(cella), .Range(cella).End(xlUp)).Resize(ur2, 7).Value

                assegna alla variabile (che poi è una matrice) CodArt tutti i valori compresi nell'intervallo A1:G e l'ultima riga del Foglio1. Quindi, giochiamoo con il secondo parametro della matrice (quello che ho messo in rosso). Pertanto se vuoi incollare prima l'articolo devi mettere = CodArt(riga,2) perchè 2 corrisponde alla colonna B; poi per mettere la descrizione diventa =CodArt(riga,3); per reparto è =CodArt(riga,5) e per famiglia è =CodArt(riga,6)

                 

                Non sono necessarie tutte quelle variabili/matrici che hai messo tu.

                Dai, riprova.

                Ciao,

                Mario

                #7693 Risposta

                mb
                Partecipante

                  ho modificato così

                  Option Explicit
                  Option Compare Text
                  
                  Sub Elenco_VBA()
                  Dim CodArt
                  
                  Dim ur2 As Long, ur3 As Long, i As Long, j As Long, cn As Long
                  Dim cella As String
                  ur3 = Sheets("vba").Cells(Rows.Count, 1).End(xlUp).Row
                  ur2 = Sheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
                  
                  cella = "A1"
                  ReDim CodArt(1 To ur2)
                  With Sheets("Foglio1")
                    CodArt = .Range(.Range(cella), .Range(cella).End(xlUp)).Resize(ur2, 7).Value ' indica il numero di colonne di cui è composto il foglio
                    
                  End With
                  
                  For i = 2 To ur3
                    For j = 2 To UBound(CodArt)
                      If Sheets("vba").Cells(i, 1) = CodArt(j, 2) Then
                        cn = Application.WorksheetFunction.Match(CodArt(j, 1), Sheets("vba").Range("A1:n1"), 0) ' indica le colonne che compongo il foglio che riceve
                        Sheets("vba").Cells(i, 2) = CodArt(j, 3) 'inserito per descrizione
                        Sheets("vba").Cells(i, cn) = CodArt(j, 4) 'indica la quantità
                        Sheets("vba").Cells(i, 3) = CodArt(j, 5)  ' indica il reparto
                        Sheets("vba").Cells(i, 4) = CodArt(j, 6)   ' indica la famiglia
                        Sheets("vba").Cells(i, 5) = CodArt(j, 7)   ' indica l'ean
                  
                           
                      End If
                    Next j
                    Sheets("vba").Cells(i, 15).FormulaR1C1 = "=SUM(RC[-9]:RC[-1])"   ' serve per fare il calcolo totale per riga dei venduti x articolo
                  Next i
                  
                  End Sub
                  
                LoginRegistrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: creare riepilogo non con pivot ma con vba
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni:



                vecchio frac - 2750 risposte

                albatros54
                albatros54 - 1009 risposte

                patel
                patel - 937 risposte

                Marius44
                Marius44 - 797 risposte

                Luca73
                Luca73 - 685 risposte