Sviluppare funzionalita su Microsoft Office con VBA Copiare dati e ordinarli con macro (funziona in parte)

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #2028 Score: 0 | Risposta

    PABLO
    Partecipante
      Buonasera a tutti, sono nuovo ed è la prima volta che scrivo.
      Avrei bisogno se possibile di aiuto per risolvere un problema con una macro.
      Premetto che sono un principiante e non conosco bene le macro ma navigando su internet ne ho trovata una che ho sistemato alla meglio per soddisfare le mie esigenze.
      Quello che mi serve è una macro che copia dal "foglio1" i dati li riporti sul "foglio2"  e raggruppa gli articoli e somma i relativi valori.
      Quindi colonna A = Articolo
      Colonna B = valore
      Sotto le rispettive colonne deve raggruppare gli stessi articoli e in corrispondenza dell'articolo fare la somma di quelli uguali
      Il problema che non riesco a risolvere e che pur riuscendo a raggruppare gli articoli le somme dei loro valori  si sballano.
      Allego il file di esempio che sicuramente è molto piu chiaro della mia spiegazione  🙂
      Grazie mille a tutti in anticipo per l'aiuto.
      Allegati:
      You must be logged in to view attached files.
      #2041 Score: 0 | Risposta

      Marius44
      Moderatore
        52 pts
        Ciao Pablo
        in questo Forum si è un po' più tolleranti di altri circa il crossposting.
        Ma non è corretto postare la stessa domanda a distanza di 10 minuti in altro/i Forum. Un po' di rispetto verso chi spende il "SUO" tempo per un "TUO" problema non guasterebbe.
        Ciao,
        Mario
        #2087 Score: 0 | Risposta

        Pablo
          Buongiorno a tutti
          innanzitutto chiedo scusa se ho commesso un atto di "crossposting" , ne ho appena scoperto il significato.
          Non ho mai usato un forum per chiedere aiuto quindi non sono molto pratico di certe cose.
          Cercavo solo di risolvere un problema.
          #2151 Score: 0 | Risposta

          Pablo
            Buonasera
            ragazzi cortesemente qualcuno me la da una mano a risolvere il problema ?
            Grazie mille
            #2152 Score: 0 | Risposta

            patel
            Moderatore
              53 pts
              posta il link della discussione che hai aperto su altro forum
              #2167 Score: 0 | Risposta

              Luca73
              Partecipante
                56 pts
                Ma perchè usare una macro e non un tabella pivot che lo fa in automatico?
                #2168 Score: 0 | Risposta

                PABLO
                Partecipante
                  Ciao Luca73
                  non vorrei utilizzare una tabella Pivot in quanto il primo foglio viene aggiornato continuamente , in questo modo dovrei rifare la tabella ogni volta, con la macro invece mi copia i dati nel secondo foglio , me li ordina e mi fa le somme.
                   
                  Patel , questo è il link dell'altro forum []
                   
                  Grazie ragazzi
                  #2169 Score: 0 | Risposta

                  albatros54
                  Moderatore
                    83 pts
                    Ciao Pablo

                    sto vedendo che nella tua macro "Crea_elenco2" ci sono molte incongruenze che non capisco, vedi lineee codice evidenziate

                    Sub crea_Elenco2()
                    
                    Dim c As Range
                    Dim W As Worksheet
                    Dim Area As Range
                    Dim dato As String
                    Dim i As Integer
                    Dim Trovato As Boolean
                    Set W = Sheets("Foglio2")
                    W.Select
                    UR1 = W.Range("F" & Rows.Count).End(xlUp).Row
                    W.Range("F30:H30" & UR1).Clear
                    Set Area = W.Range("F5:F" & UR1)
                    
                    For Each c In Area
                        dato = c.Value
                        i = 40
                        Trovato = False
                        While W.Cells(i, 6).Value <> "" And Not Trovato
                            If W.Cells(i, 6).Value = dato Then
                                Trovato = True
                            End If
                            i = i + 1
                        Wend
                        If Not Trovato Then
                            W.Cells(i, 6).Value = dato
                        End If
                    Next
                    W.Select
                        W.Range("F30:H30" & UR1).Select
                        Selection.Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlGuess, _
                            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                            DataOption1:=xlSortTextAsNumbers
                            W.Range("F5").Select
                    
                    For RRF = 1 To W.Range("F" & Rows.Count).End(xlUp).Row
                    NT = W.Range("F" & RRF).Value
                        For RR1 = 1 To UR1
                        If NT = W.Range("F" & RR1).Value Then W.Range("H" & RRF).Value = W.Range("H" & RRF).Value + W.Range("H" & RR1).Value
                        Next RR1
                    Next RRF
                    
                    With Worksheets("foglio2").Range("F30:H35")
                     .Font.Size = 12
                     .Font.Bold = True
                     Range("F30:H35").NumberFormat = "#,##0.00"
                     .Cells(intRow, intCol).Borders.LineStyle = X1Double
                    
                    With Range("F30:H35").Borders
                        .LineStyle = xlContinuous
                        .Weight = 2
                    
                    End With
                    End With
                    End Sub

                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente?( Alan Turing)

                    #2170 Score: 0 | Risposta

                    Luca73
                    Partecipante
                      56 pts
                      Cio che dici non è vero.
                      Se la tua tabella la definisci con le righe fino a fine foglio poi bastano tra righe di codice per farla aggiornare.
                      Ti allegao un foglio di esempio.
                      Cambia i numeri o aggiungi righe in Dati e poi vai a vedere la tabella e vedrai che sia aggiorna in automatico.
                      Il codice nel folgio della tabbella è
                      Private Sub Worksheet_Activate()
                      
                      Dim PVLT As PivotItem
                      ActiveSheet.PivotTables("TP_Luca").PivotCache.Refresh
                      ActiveSheet.PivotTables("TP_Luca").Update
                      With ActiveSheet.PivotTables("TP_Luca").PivotFields("nome ")
                      On Error Resume Next
                          For Each PVLT In .PivotItems
                              PVLT.Visible = True
                          Next
                      End With
                      On Error GoTo 0
                          With ActiveSheet.PivotTables("TP_Luca").PivotFields("nome ")
                              .PivotItems("(blank)").Visible = False
                          End With
                      End Sub
                      Allegati:
                      You must be logged in to view attached files.
                      #2181 Score: 0 | Risposta

                      PABLO
                      Partecipante
                        Ciao Albatros54
                        quello che la macro dovrebbe fare è il raggruppare i codici uguali (ripetuti diverse volte) e sommare i loro valori.
                        I codici che hai evidenziato fanno riferimento al numero di riga in cui devono essere riportati i dati raggruppati ( in realtà mi piacerebbe che la macro scrivesse trovando da sola la prima riga vuota e non che stabilisca io in partenza il numero della riga dove andare a scrivere, nel codice  io ho impostato il raggruppamento dalla riga 30 in poi)
                        Come detto è una macro che ho trovato e che ho cercato di adattare alle mie esigenze
                        Il problema che mi basterebbe risolvere per il momento è che non deve modificare le somme ogni qual volta viene premuto il bottone raggruppa come invece adesso fa, ma lo faccia solo la prima volta e basta.
                        Spero di essermi spiegato e scusate se magari sono poco chiaro  🙂
                        Grazie anche a LUCa73 per il consiglio, ma con la macro la cosa è piu veloce e carina  🙂
                        #2189 Score: 0 | Risposta

                        albatros54
                        Moderatore
                          83 pts

                          dato che la soluzione di LUCA73(che saluto)non ti garba, prova la macro che ti posto

                          Option Explicit
                          Sub crea_Elenco2()
                          
                              Dim c As Range
                              Dim W As Worksheet
                              Dim Area As Range
                              Dim dato As String
                              Dim i As Integer, ur1 As Integer, lng As Integer
                              Dim valore As Integer, valore1 As Integer, intRow As Integer
                              Dim col As Collection
                              Dim v As Variant
                              Dim X1Double As Integer, intCol As Integer
                              On Error Resume Next
                              Set W = Sheets("Foglio2")
                              W.Select
                              ur1 = W.Range("F" & Rows.Count).End(xlUp).Row
                              W.Range("F30:H" & ur1).Clear
                              Set Area = W.Range("F5:F" & ur1)
                              Set col = New Collection
                              For lng = 5 To ur1
                                  col.Add CStr(W.Range("f" & lng).Value), _
                                          CStr(W.Range("f" & lng).Value)
                              Next
                              i = 30
                              For Each v In col
                                  valore1 = 0
                                  valore = 0
                                  For Each c In Area
                          
                                      If v = c Then
                                          valore = c.Offset(0, 2)
                                          valore1 = valore + valore1
                                      End If
                          
                                  Next
                          
                                  W.Cells(i, 6) = v
                                  W.Cells(i, 7) = valore1
                                  i = i + 1
                              Next
                          
                              With Worksheets("foglio2").Range("F30:H35")
                                  .Font.Size = 12
                                  .Font.Bold = True
                                  Range("F30:H35").NumberFormat = "#,##0.00"
                                  .Cells(intRow, intCol).Borders.LineStyle = X1Double
                          
                                  With Range("F30:H35").Borders
                                      .LineStyle = xlContinuous
                                      .Weight = 2
                          
                                  End With
                              End With
                          End Sub

                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente?( Alan Turing)

                          #2200 Score: 0 | Risposta

                          PABLO
                          Partecipante
                            Grazie mille Albatros è perfetta  🙂
                            Finalmente funziona.
                            Quello che vorrei capire come dicevo, è se possibile che i dati vengano scritti a partire ad esempio dalla 2° o 3° riga libera al di sotto dei dati copiati dal foglio 1.
                            Questo perché in realtà  le righe che riporta dal primo foglio potrebbero variare di volta in volta.
                            Grazie mille di nuovo  🙂
                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: Copiare dati e ordinarli con macro (funziona in parte)
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: