Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

pivot - aggiornamento e origine dei dati

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

pivot - aggiornamento e origine dei dati

Postdi marcus69 » 01/06/20 15:08

ciao a tutti,

il mio foglio 1 ha una serie di righe, ordini clienti
il mio foglio 2 ha la pivot che ha come sorgente le righe del foglio 1, ed è la "guida per la produzione", cui non interessa chi sono i clienti, ma accorpare gli stessi articoli per fare delle campagne di produzione quanto più possibili unificate

il foglio 1, "riceve" i dati da un foglio sorgente, e si aggiorna 3-4 volte al giorno, le righe possono aumentare o diminuire a seconda che gli ordini siano nuovi, o risultino evasi.

nel foglio 2 , dove ho la pivot, cambio MANUALMENTE colore alle celle per identificare mio' che la produzione ha prodotto, in modo da sapere che POSSO evadere l'ordine

cella colorata = materiale disponibile = materiale IN MAGAZZINO non ancora spedito.

Succede che quando aggiorno il foglio 1, con la macro, e poi MANUALMENTE aggiorno la pivot, la pivot, "cambia" l'origine dei dati da

Foglio1!$A$1:$M$612

diventa

Foglio14!$A$1:$M$500 , o qualsiasi altro numero di riga nella parte di destra ove ho la colonna M.

All'inizio sono andato un po in panico, poi ho visto che correggendo a mano l'ordine dei dati, il colore delle celle del materiale prodotto rimane, quindi non perdo nulla.

E' però fastidioso, avete idee da cosa sia dovuto e come evitarlo?

ora vedo se riesco a pulire dai dati sensibili il foglio
marcus69
Utente Junior
 
Post: 91
Iscritto il: 19/10/17 14:39

Sponsor
 

Re: pivot - aggiornamento e origine dei dati

Postdi marcus69 » 01/06/20 16:36

eccolo

http://www.filedropper.com/ordinivenditatest1

per altro adesso dopo la settimana 53, appare una 19, che non ha senso , vedo un po, in attesa di Vostri spunti
marcus69
Utente Junior
 
Post: 91
Iscritto il: 19/10/17 14:39

Re: pivot - aggiornamento e origine dei dati

Postdi marcus69 » 01/06/20 16:52

eccolo

http://www.filedropper.com/ordinivenditatest1

per altro adesso dopo la settimana 53, appare una 19, che non ha senso , vedo un po, in attesa di Vostri spunti

Non trovo nulla da nessuna parte di pivot che "riducano" la base dati sorgente

nel foglio esempio, ogni volta che lanciate la macro per aggiornare, ( dal foglio ordini di vendita al foglio 14 )
nel foglio 16 ove c'è la pivot varia l'area sorgente dati
marcus69
Utente Junior
 
Post: 91
Iscritto il: 19/10/17 14:39

Re: pivot - aggiornamento e origine dei dati

Postdi Anthony47 » 01/06/20 23:51

Porta pazienza anche tu, ma non ho capito che cosa devo fare col file pubblicato, che cosa di strano succedera' e che cosa invece vorresti che succedesse...
Avatar utente
Anthony47
Moderatore
 
Post: 17003
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: pivot - aggiornamento e origine dei dati

Postdi marcus69 » 02/06/20 08:19

Se lanci la Macro, il foglio 14 “ prende “ i dati dal foglio “ordini vendita”
Se vai nel foglio 16, ove c è la pivot e aggiorni la tabella ( il foglio 14 pesca sempre dati aggiornati dal foglio ordini )
La pivot cambia l’intervallo sorgente dei dati

Lancia macro
Aggiorna pivot
L’area della pivot è ipotizziamo $a$1:$m$800
Lancia macro
Aggiorna pivot
800 cala a 600
Lancia macro
Aggiorna pivot
600 cala a 450
E così via.
Se in manuale rimetto l’intervallo originale rivedo tutte le occorrenze ( e anche le celle cui avevo cambiato colore )
marcus69
Utente Junior
 
Post: 91
Iscritto il: 19/10/17 14:39

Re: pivot - aggiornamento e origine dei dati

Postdi Anthony47 » 02/06/20 15:52

Quindi mi pare che il problema principale sta nel fatto che l'area di origine della Pivot cambia in modo apparentemente arbitrario durante la manipolazione di Foglio14 (l'origine dei dati).
Non so quale e' la "prestazione" che porta a questo comportamento, quindi la aggiro con la compilazione esplicita (in coda alla macro) dell'origine dati che la pivot deve prendere in cosiderazione. Il codice specifico, inserito subito prima di End Sub:
Codice: Seleziona tutto
'AGGIORNA Origine Dati per TabellaPivot:
pvtsh = "Foglio16"
datash = "Foglio14"
nwrange = datash & "!" & Sheets(datash).Range("A1:M1").Resize(ultima_riga_casa).Address(ReferenceStyle:=xlR1C1)
Sheets(pvtsh).PivotTables(1).ChangePivotCache _
    ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=nwrange)
'Aggiorna Pivot
Sheets(pvtsh).PivotTables(1).PivotCache.Refresh


Ci sono pero' alcune piccole discrepanze qua e là, che mi hanno portato a editare complessivamente la macro come segue:
Codice: Seleziona tutto
Sub solocellevisibilifiltrateDUE()
  Application.ScreenUpdating = False

''INUTILI:
''  Sheets("Foglio14").Select
''   Range("a1:k2000").Select
''    Selection.ClearContents

   Sheets("OrdiniVendita").Select
     Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$K$2000").AutoFilter Field:=5, Criteria1:="<>*fr*"
''Approccio diverso:
''    Range("A1").Select
''    Range(Selection, Selection.End(xlDown)).Select
''    Range(Selection, Selection.End(xlToRight)).Select
''    Selection.SpecialCells(xlCellTypeVisible).Select
Range("A:K").Select

    Selection.Copy
    Sheets("Foglio14").Select
''Per impostare l'origine dell'Incolla:
Range("A1").Select
    ActiveSheet.Paste
    Cells.Select
    Cells.EntireColumn.AutoFit
   
       Rows("1:1").Select
    Selection.AutoFilter
    Range("F11").Select
'' AREE PROBABILMENTE PARZIALI:
''    ActiveSheet.Range("$A$1:$M$381").AutoFilter Field:=6
''    ActiveSheet.Range("$A$1:$M$381").AutoFilter Field:=6, Criteria1:="*can*"
''    ActiveSheet.Range("$A$1:$M$381").AutoFilter Field:=6, Criteria1:="*cav*"
ActiveSheet.Range("$A$1:$M$2000").AutoFilter Field:=6
ActiveSheet.Range("$A$1:$M$2000").AutoFilter Field:=6, Criteria1:="*can*"
ActiveSheet.Range("$A$1:$M$2000").AutoFilter Field:=6, Criteria1:="*cav*"
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.EntireRow.Delete
''idem:
''    ActiveSheet.Range("$A$1:$M$259").AutoFilter Field:=6, Criteria1:="*che*"
ActiveSheet.Range("$A$1:$M$2000").AutoFilter Field:=6, Criteria1:="*che*"
''PERCHE' DA a6??
''    Range("A6").Select
''    Range(Selection, Selection.End(xlToRight)).Select
Range(Range("A2"), Range("A2").End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.EntireRow.Delete
    Rows("1:1").Select
    Selection.AutoFilter
   
    Dim I As Long, J As Long, mySplit, xPos
Range("j:k").Clear
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    mySplit = Split(Replace(Cells(I, "F").Value & " A E", ".", ",", , , vbTextCompare), " ", , vbTextCompare)
        For J = 0 To UBound(mySplit)
            xPos = InStr(1, mySplit(J), "x", vbTextCompare)
            If xPos > 0 Then
'' ROUND SU VALORI single SI COMPORTA MALE!
''                Cells(I, "j").Value = Round(CSng(Left(mySplit(J), xPos - 1)), 3)
''                Cells(I, "k").Value = Round(CSng(Mid(mySplit(J), xPos + 1)), 3)
                Cells(I, "j").Value = Round(CDbl(Left(mySplit(J), xPos - 1)), 3)
                Cells(I, "k").Value = Round(CDbl(Mid(mySplit(J), xPos + 1)), 4)
                Exit For
            End If
        Next J
Next I
   Cells(1, 10) = "no1"
    Cells(1, 11) = "no2"
ultima_riga_casa = Sheets("Foglio14").Range("A" & Rows.Count).End(xlUp).Row
''INULTILE:
''andrea = 2
For andrea = 2 To ultima_riga_casa
    Cells(andrea, 12) = Round(Cells(andrea, 10), 3)
    Cells(andrea, 13) = Round(Cells(andrea, 11), 4)
Next andrea
   
    Sheets("OrdiniVendita").Select
    Rows("1:1").Select
    Selection.AutoFilter
    Sheets("Foglio14").Select
    Cells(1, 1).Select
    Application.ScreenUpdating = True
'AGGIORNA Origine Dati per TabellaPivot:
pvtsh = "Foglio16"
datash = "Foglio14"
nwrange = datash & "!" & Sheets(datash).Range("A1:M1").Resize(ultima_riga_casa).Address(ReferenceStyle:=xlR1C1)
Sheets(pvtsh).PivotTables(1).ChangePivotCache _
    ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=nwrange)
'Aggiorna Pivot
Sheets(pvtsh).PivotTables(1).PivotCache.Refresh
             
End Sub

Ho lasciato, commentati con doppio Apostrofo a inizio riga, le righe che ho sostituito con le istruzioni che seguono, e ho inserito qualche commento che spiega il motivo della modifica. Tra l'altro ho modificato le istruzioni che facevano l'Arrotondamento, tipo Cells(I, "j").Value = Round(CSng(Left(mySplit(J), xPos - 1)), 3), perche' l'uso di dati tipo Single manda in tilt l'arrotondamento. Questo, tra l'altro, significa che forse potresti abolire le colonne L:M, che credo hai aggiunto solo per avere le colonne con l'arrotondamento desiderato.

Le modifiche non sono sostanziali, cioe' non cambiano l'approccio della macro composta a partire da quella autoregistrata; col tempo pero' imparerai che alcune operazioni le puoi effettivamente semplificare velocizzando nel contempo la macro.
Ma tra una macro lenta e inefficiente e "nessuna macro" e' ovvio che la mia raccomandazione e' "crea la macro, anche se lenta e inefficiente"

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

Re: pivot - aggiornamento e origine dei dati

Postdi marcus69 » 02/06/20 16:48

Ci hai preso: le due colonne le avevo create per quel motivo. Quando non riesco a risolvere, invento modi.
Ora guardò la tua modifica. Grazie.
Piano piano imparo.
( il perché la pivot cambi non lo so proprio )
marcus69
Utente Junior
 
Post: 91
Iscritto il: 19/10/17 14:39


Torna a Applicazioni Office Windows


Topic correlati a "pivot - aggiornamento e origine dei dati":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti