Condividi:        

macro per sommare automaticamente righe di codici di articol

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 22/08/14 08:12

Ho sostituito l'intera macro con le ultime scritte da flash, ma continua a darmi alcuni codici duplicati e non sommati. Ho postato il file di esempio, aspetto vostre notizie e vi ringrazio per il grosso aiuto!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Sponsor
 

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 22/08/14 11:19

Il fatto e' che alcuno dei tuoi codici (quelli che dici non vengono sommati) hanno uno "spazio" in fondo...

Prova questa macro, che elimina dal riepilogo gli spazi finali:
Codice: Seleziona tutto
Sub riepzc()
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=102426&p=594787#p594787
Dim I As Long, J As Long, LastI As Long, RIEP As Worksheet
Dim myMatch, myTim As Single

Set RIEP = Worksheets("RiepilogoZC")    '<<< Il Nome del foglio di Riepilogo
'
RIEP.Rows("2:10000").ClearContents      '*** Vedi testo
'
myTim = Timer
For I = 1 To Worksheets.Count
    If Worksheets(I).Name <> RIEP.Name Then
        With Worksheets(I)
            LastI = .Cells(Rows.Count, "I").End(xlUp).Row
            For J = 2 To LastI
                myMatch = Application.Match(Trim(.Cells(J, 9).Value), RIEP.Range("A:A"), 0)
                If IsError(myMatch) Then
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Trim(.Cells(J, 9).Value)
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = .Cells(J, 2).Value
                Else
                    RIEP.Cells(myMatch, 2) = RIEP.Cells(myMatch, 2) + .Cells(J, 2).Value
                End If
            Next J
        End With
    End If
    Next I
MsgBox ("Completato (" & Format(Timer - myTim, "0.00") & "sec)")
End Sub

Personalizza la riga marcata <<< col nome del foglio in cui sara' creato il riepilogo; il foglio deve gia' esistere.
Tale foglio verra' AZZERATO SENZA PREAVVISO all' avvio della macro, per creare il nuovo elenco da zero; se questo non e' compatibile col tuo processo allora elimina la riga marcata "***"
Saranno elaborati tutti i fogli eccetto quello in cui sara' creato il riepilogo; se serve si puo' inserire una regola diversa (es tutti i fogli il cio nome comincia per XYZ; oppure i primi N fogli; oppure tutti i fogli eccetto quelli di una lista)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 24/08/14 17:33

Buonasera a tutti! Anthony la macro funziona e ti ringrazio davvero tanto! Ho un altro problema. Se volessi mettere in evidenza delle differenze tra diverse revisioni del riepilogo appena creato, come potrei fare con una macro? Per esempio, ho appena creato questo elenco, se dovessi cancellare un codice, o dovessi cambiare un codice o una quantità, vorrei evidenziare queste righe che hanno subito i cambiamenti rispetto al file precedente, come posso fare?Grazie mille
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 24/08/14 23:58

Allora la cosa deve essere pensata diversamente... Non bisogna creare un unico riepilogo, azzerandolo automaticamente prima di costruirlo daccapo, ma creare ogni volta un nuovo riepilogo e su questi riepiloghi fare un confronto per evidenziare le differenze, che possono essere:
-un nuovo codice
-un codice scomparso
-una quantita' diversa su un codice

Pertanto:
1)ho modificato la Sub riepzc() che ora diventa Sub riepzc2()
--il riepilogo viene creato in un foglio chiamato ZcRiep_aa-mm-gg_hh-mm (es ZcRiep_14-08-25_00-54);
--viene creato un foglio nuovo ogni volta che si riesegue la macro, salvo che la macro venga rieseguita entro lo stesso minuto del precedente nel qual caso si ricalcola sul foglio appena creato
2)ho aggiunto una Sub CompaRieps(...), che ha il compito di confrontare l' ultimo riepilogo col riepilogo precedente:
-se il codice e la quantita' sono uguali su ambedue i riepiloghi, in colonna C dell' ultimo riepilogo viene scritto 0
-se le quantita' differiscono, in col C viene scritta la quantita' presente nel riepilogo precedente e in colonna D viene riportato il codice prelevato dal riepilogo precedente
-se un codice mancava nel riepilogo precedente, la colonna C restera' vuota
-se un codice manca nel riepilogo ultimo creato, in colonna A viene accodato l' informazione ZcMiss e vengono compilate colonna C e D con qt e codice dal riepilogo precedente.

Il confronto viene eseguito tra il riepilogo appena creato e "quello precedente"; per "precedente" si intende il riepilogo alla sinistra dell' ultimo creato; tocca a te eliminare i riepiloghi che non servono piu', oppure prima dell' esecuzione della RIEPZC2 spostare in ultima posizione a destra un riepilogo esistente (creato con la nuova macro) affinche il confronto venga eseguito su di esso (rispetto al riepilogo che si andra' a creare).
La macro da lanciare e' la RIEPZC2.
Il codice complessivo, che sostituisce il precedente che ti avevo dato:
Codice: Seleziona tutto
Sub riepzc2()
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=102426
Dim I As Long, J As Long, LastI As Long, RIEP As Worksheet
Dim myMatch, myTim As Single, myNSh As String
'
myNSh = "ZcRiep_" & Format(Now(), "yy-mm-dd_hh-mm")
'
If Not ShExists(myNSh) Then
    Worksheets.Add after:=Sheets(ThisWorkbook.Sheets.Count)
    ActiveSheet.Name = myNSh
End If
'
Set RIEP = Sheets(myNSh)
'
RIEP.Rows("2:10000").ClearContents      '*** Vedi testo
RIEP.Columns("A:A").NumberFormat = "@"
'
myTim = Timer
For I = 1 To Worksheets.Count
    If Left(Worksheets(I).Name, 7) <> "ZcRiep_" Then
        With Worksheets(I)
            LastI = .Cells(Rows.Count, "I").End(xlUp).Row
            For J = 2 To LastI
                myMatch = Application.Match(Trim(.Cells(J, 9).Value), RIEP.Range("A:A"), 0)
                If IsError(myMatch) Then
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Trim(.Cells(J, 9).Value)
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = .Cells(J, 2).Value
                Else
                    RIEP.Cells(myMatch, 2) = RIEP.Cells(myMatch, 2) + .Cells(J, 2).Value
                End If
            Next J
        End With
    End If
    Next I
Call CompaRieps(RIEP.Index, RIEP)
RIEP.Columns("B:C").NumberFormat = "_-* #,##0_-;-* #,##0_-;_-* ""-""??_-;_-@_-"    '???
RIEP.Columns("A:A").EntireColumn.AutoFit
MsgBox ("Completato (" & Format(Timer - myTim, "0.00") & "sec)")
End Sub

Function ShExists(ByVal mySh As String) As Boolean
'
On Error Resume Next
ShExists = Len(Sheets(mySh).Name) > 0
'
End Function

Sub CompaRieps(ByVal shIndex As Long, rRiep As Worksheet)
Dim myVarr, LastM1 As Long, L As Long, myMatch
'
If shIndex < 3 Then Exit Sub
If Left(Worksheets(shIndex - 1).Name, 7) <> "ZcRiep_" Then Exit Sub
'
LastM1 = Sheets(shIndex - 1).Cells(Rows.Count, 1).End(xlUp).Row
myVarr = Sheets(shIndex - 1).Range("A1:B" & LastM1).Value
For L = (LBound(myVarr, 1) + 1) To UBound(myVarr, 1)
    myMatch = Application.Match(Trim(myVarr(L, 1)), Sheets(shIndex).Range("A:A"), 0)
        If myVarr(L, 1) <> "ZcMiss" Then
                If IsError(myMatch) Then
                    rRiep.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = "ZcMiss"
                    rRiep.Cells(Rows.Count, 1).End(xlUp).Offset(0, 3).Value = myVarr(L, 1)
                    rRiep.Cells(Rows.Count, 1).End(xlUp).Offset(0, 2).Value = myVarr(L, 2)
                Else
                    If (rRiep.Cells(myMatch, 2).Value <> myVarr(L, 2)) Then
                        rRiep.Cells(myMatch, 3) = myVarr(L, 2)
                        rRiep.Cells(myMatch, 4) = myVarr(L, 1)
                    Else
                        rRiep.Cells(myMatch, 3) = 0
                    End If
                End If
        End If
   
Next L
End Sub

Quanto sopra e' scritto senza conoscere quale e' il tuo processo... Non escludo che il realta' il "riepilogo precedente" tu ce l' abbia su "un file precedente"; in questo caso devi aprire il file precedente e, tramite il comando "Sposta o copia foglio" devi creare una copia del riepilogo sul nuovo file (tasto dx sul tab col nome foglio; scegli "Sposta o copia", etc), accodandolo a tutti i fogli esistenti in modo che diventi il "riepilogo precedente" che sara' usato nella fase di confronto.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 27/08/14 15:58

Grazie mille per l'aiuto!!!!La macro funziona!Grazie!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 06/09/14 07:52

Buongiorno, avrei bisogno di un ulteriore aiuto! Ho riutilizzato la macro riepzc2 per un altro file e non mi restituisce nelle colonne C e D ciò che dovrebbe dare, tipo 0 o codice o quantità. Ho notato che rieseguendola mi dà errore di formattazione delle cella per alcuni codici che sono numerici, potreste aiutarmi?
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Flash30005 » 06/09/14 18:40

Ogni macro si basa sullo schema dati per il quale è stata fatta
cambiando lo schema o il formato dati può andare in errore come nel tuo caso
dovresti pubblicare il nuovo file con la macro e forse potremmo capire qualcosa in più
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 07/09/14 17:50

Buonasera a tutti! Ho bisogno di sapere come modificare il codice della macro che fa i riepiloghi e quello relativo al confronto tra i riepiloghi, perchè ho notato che se ho un codice numerico nel riepilogo totale, la quantità relativa a quel codice non viene sommata, e quindi mi riporta nel riepilogo due codici numerici uguali con quantità non sommate. Penso che questo mi crei problemi nell'altra macro che fa il confronto tra i due riepiloghi. Per favore, potrei mandare il file a qualcuno di voi?Grazie!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 09/09/14 00:42

Evidentemente chi ti passa il file dei codici non sa che cosa e' un codice, e a volte te lo passa come testo a volte come numero; vada a fare un altro lavoro...
Da parte tua, quando "importi" quei file (cosa che non mi pare hai spiegato come fai) ti dovrai preoccupare di impostare il campo ricevente sempre come "Testo".
Questo dovrebbe bastare per garantire di processare sempre le stesse cose, accoppiando i codici correttamente.
Se con questo suggerimento non risolvi allora prova a riallegare un file di prova in cui succede il fattaccio; e comunque descrivi anche come i vari fogli di dati vengono compilati.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 10/09/14 20:17

Ho risolto con la formattazione delle celle come testo, come hai detto, grazie!

Avrei pero' ancora bisogno urgentemente del vostro prezioso aiuto!Caricherò a breve due file. Innanzitutto, avrei bisogno di una macro che mi aggiornasse sempre sullo stesso foglio (Template_macro) i dati, o che aggiungesse colonne in automatico non appena si inserisce come input un fogliox. Spero di essere stata chiara. Poi come output(Template_macro) vorrei avere in colonna A gli item, in colB... quello che c'è scritto nel file "template_macro". Ci sono colonne denominate foglio, che rappresentano i fogli in cui è presente il codice azienda, riportandomi nelle sub colonne la quantità, la differenza di quantità e le note riportate nel foglio in cui è presente l'articolo. Quindi le macro scritte da Anthony vanno bene, ma bisogna implementare queste altre funzioni. Nel file di esempio ho i fogli dicalcolo da cui estrapolare il riepilogo, che mi dà tutti i codici, con q.tà sommate solo per i codici uguali e nel template riportare la differenza di q.tà che deriva da riepiloghi diversi, come l'ultima macro scritta. Quindi l'output è il Template_macro, dove le colonne Lt e acquistati sono input che si inseriscono nella cartella e devono essere visualizzati su questo foglio finale. Nel template c'è la colonna Q.tà che rappresenta la colonna del riepilogo precedente, mentre la diff. q,tà è la differenza tra q.tà precedente e q.tà ultimo riepilogo. Chiedo un vostro aiuto, grazie mille!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41


Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 10/09/14 21:41

Non ho capito quale e' la richiesta; comunque tieni presente che il forum non puo' dare (sempre) soluzioni chiavi in mano. Quindi, oltre a spiegare meglio l' esigenza dovrai anche spiegare come hai pensato di affrontare il problema e su che cosa ti sei arenata.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 11/09/14 08:12

Mi rendo conto di non poter avere la soluzione bella e pronta e mi scuso, ma mi sono arenata su due problemi: Il primo è come far vedere le altre colonne nei files riepilogo, cioè nel riepilogo viene messo in evidenza la colonna dei codici e la colonna delle quantità. A me servirebbe oltre che far vedere queste due colonne anche le colonne relative all'item, descrizione, part number. Il secondo problema è come inserire nel foglio riepilogo finale la colonna foglio, suddivisa in tre sotto-colonne, che mi indica dove quel codice è inserito, e riporta al tempo stesso quelle informazioni contenute nel foglio dove è presente. Questo foglio dovrebbe essere un foglio che deve servire per aggiornare i dati e tenerlo come unico riferimento per non avere tanti fogli uguali. Grazie tanto per l'aiuto che mi darete
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 12/09/14 07:08

Buongiorno a tutti scusatemi, ma sto provando a modificare il codice della macro che mi avete scritto. Come posso modificare il codice riepzc2 per fare vedere in ogni riepilogo anche le informazioni relative a ogni codice? In ogni foglio ho il codice in una colonna, le q.tà in un'altra, descrizione in un'altra, item in un'altra... Come posso riportare queste info anche nel riepilogo finale?
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 12/09/14 14:43

Personalmente ho pochissimo tempo in questi giorni, quindi mi limito a rispondere ai casi piu' semplici; spero nei prossimi giorni (e negli altri assidui volontari...)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 12/09/14 16:16

Scusatemi, ma dai fogli di lavoro che ho mandato, come faccio a estrapolare nel foglio riepilogo i dati relativi alle colonne D, E G? Cioè la macro che crea il riepilogo e somma le quantità relative ai codici uguali, come posso modificarla, inserendo in corrispondenza dei codici i contenuti relativi alle altre colonne? Devo fare un if che mi dice se il codice nella colonna I è quello, riportami i contenuti delle celle sulla stessa riga ma in colonna D, E e G. Come lo traduco in vba?Grazie a tutti!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 13/09/14 01:50

Dici che vorresti riportare nel foglio di Riepilogo "anche le colonne relative all'item, descrizione, part number"; per Descrizione e Part number (rispettivamente colonne D ed E nei fogli sorgente) bisogna aggiungere le due righe marcate +++ nel codice seguente:
Codice: Seleziona tutto
                If IsError(myMatch) Then
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Trim(.Cells(J, 9).Value)
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = .Cells(J, 2).Value
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 3).Value = .Cells(J, 4).Value     '+++
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 4).Value = .Cells(J, 5).Value     '+++
                Else
Per quanto riguarda Item, si tratta di un numero che varia di foglio in foglio, dovresti spiegare quindi quale numero vorresti.

In altro messaggio chiedi "come faccio a estrapolare nel foglio riepilogo i dati relativi alle colonne D, E G"; per D ed E la risposta e' quella appena data; mentre per la colonna G aggiungerai, subito sotto le due istruzioni di prima, anche
Codice: Seleziona tutto
                    RIEP.Cells(Rows.Count, 1).End(xlUp).Offset(0, 5).Value = .Cells(J, 7).Value     '+++


Per quanto riguarda il file TEMPLATE_macro l' idea che mi sono fatto e' che basta rifare tutto e siamo a posto; ci pensero' appeno trovo un giorno in cui mi annoio a non fare niente...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 14/09/14 15:31

Grazie davvero tanto per la tua grande disponibilità Anthony, non so come avrei fatto senza il tuo aiuto e quello di flash. Aspetto una tua risposta per quanto riguarda il template e ti ringrazio ancora per l'aiuto, non è da tutti!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi vale2882 » 14/09/14 16:13

Anthony, scusami ancora, ho incollato queste righe di codice nella macro riepzc, ma mi escono in una sola riga tutti i dati delle colonne D, E, G. Devo aggiungere qualche riga di codice alla macro CreaElenco2? Io eseguo prima CreaElenco2 e poi riepzc. Grazie mille!
vale2882
Utente Junior
 
Post: 98
Iscritto il: 29/07/14 18:41

Re: macro per sommare automaticamente righe di codici di art

Postdi Anthony47 » 15/09/14 01:57

Non so cosa intendi con "mi escono in una sola riga tutti i dati delle colonne D, E, G"; a me il risultato e' questo:
Immagine
upload immagini gratis

Comunque noi stiamo lavorando su una macro "riepzc2" e non riepzc (il codice completo, che comprende altre Sub richiamate da riepzc2, e' qui: viewtopic.php?f=26&t=102426&start=20#p594931); la creaelenco o crealenco2 per me posso essere cancellate.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "macro per sommare automaticamente righe di codici di articol":


Chi c’è in linea

Visitano il forum: raimea e 62 ospiti