Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Macro: assegnare una data riga alle Tabelle Pivot Opzioni
aetio
Inviato: Saturday, November 27, 2010 9:34:03 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
mi riaggancio al mio Topic di ieri relativo al confronto di tabelle... devo adattare la macro

Sub CercaSorgente()
With Sheets("TabPivot")
Riga = ActiveCell.Row
col = ActiveCell.Column
Select Case col
Case 5 To 17
x = 5
y = 2
z = 4
Case 22 To 34
x = 22
y = 19
z = 21
End Select
NrTab2 = .Cells(6, col).Value
NrTab1 = .Cells(5, x).Value
Nr = .Cells(Riga, y).Value
Comp = .Cells(Riga, z).Value
End With
With Sheets("Foglio2")
Set area = .Range("C2", .Range("c2").End(xlDown))
For Each cl In area
If cl.Value = Nr And Comp = .Cells(cl.Row, NrTab2).Value Then
CellRif = .Cells(cl.Row, NrTab2).Address
MsgBox ("Il Valore selezionato è riferito" & vbCrLf _
& "alla Cella " & CellRif & " del Foglio2 ")
Exit For
End If
Next
End With
End Sub

alle tabelle Pivot del foglio TabPivot generate dalle mie numerose tabelle di Foglio2. In particolare devo dare delle coordinate fisse alle istruzioni scritte in rosso, poiché le tabelle Pivot generate sono più di due...
Quindi, per poter soddisfare quella necessità, dovrei dare alla macro

Sub CreaPivot2()
Select Case Tab2
Case 1
colp = 3
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
Case 2
colp = 22
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
End Select
Set Rng = Cells(1, col).CurrentRegion
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Rng.Address).CreatePivotTable TableDestination:=Sheets("TabPivot").Cells( _
Rtab, colp), TableName:="Tabella_pivot" & Pr
Sheets("TabPivot").Select
ActiveSheet.PivotTables("Tabella_pivot" & Pr).SmallGrid = False
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Compon.")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlDataField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Somma di Numero")
.Function = xlCount
.Caption = "conteggio di numero"
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab2")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab1")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tabella_pivot" & Pr).ColumnGrand = False
ActiveSheet.PivotTables("Tabella_pivot" & Pr).RowGrand = False
Set Rng = Nothing
End Sub
le istruzioni di iniziare a compilare le varie tabelle Pivot in determinate righe, opportunamente designate in base alla lunghezza media stimata di dette tabelle, che possiamo fissare in 8500 righe ciascuna. Quindi la seconda coppia di tabelle inizierà da riga 8501, la terza da riga 17001 etc. Condizione importante: le 2 tabelle Pivot reciproche (quella di sinistra e quella di destra) devono iniziare nella stessa riga, in modo che nelle istruzioni
NrTab2 = .Cells(6, col).Value
e
NrTab1 = .Cells(5, x).Value
i due numeri (che variano in base alle rispettive righe di competenza, nelle tabelle in cui si applica la macro) siano delle costanti per tutte le tabelle, non solo per le prime due. Infatti le prime due tabelle iniziano entrambe sempre in riga 4, mentre la riga d'inizio delle successive dipende dalla lunghezza delle prime due impedendomi di fatto di poter applicare una macro ad esse dedicata. Supponendo di poter fare iniziare le seconde tabelle da riga 8501 le due istruzioni viste sopra diventerebbero
NrTab2 = .Cells(8503, col).Value
e
NrTab1 = .Cells(8502, x).Value
e via dicendo per le tabelle successive.
Penso che si dovrà agire nelle istruzioni sopra evidenziate in rosso, nella macro CreaPivot2, ma non conosco l'esatta sintassi affinché la ns. Amica svolga correttamente il lavoro assegnatole.

Grazie infinite per la pazienza, saluti
eZio
Sponsor
Inviato: Saturday, November 27, 2010 9:34:03 PM

 
a10n11
Inviato: Sunday, November 28, 2010 9:15:00 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Commenta:

In particolare devo dare delle coordinate fisse alle istruzioni scritte in rosso, poiché le tabelle Pivot generate sono più di due...


questo che dici è un particolare che mi sfugge.
La macro, sempre che si parli delle macro viste fino ad ora, crea solo due tabelle Pivot da dove vengono le altre?.
Qual'è la necessità di dividere ulteriormente le tabelle Pivot?.
saluti
Giap



aetio
Inviato: Sunday, November 28, 2010 10:12:22 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
le tabelle Pivot sono due se intendi quella di sinistra e quella di destra, ma anche guardando il file-prova sono più di due...
le prime 2 (quella di sinistra e di destra) vanno da riga 4 a riga 259
le seconde da 262 a 499
le terze da 502 a 735
le quarte da 738 a 979
le quinte da 982 a 1223
in base alla suddivisione della TABELLA1 di Foglio2
La mia necessità di fare partire le varie tabelle da una riga prestabilita è per poter scrivere le macro "CercaSorgente" della colonna di competenza, in base a ciascuna tabella, fissando di volta in volta le istruzioni
NrTab2 = .Cells(6, col).Value
e
NrTab1 = .Cells(5, x).Value
inserendo in ciascuna la rispettiva riga di competenza
Grazie assai, saluti
eZio
a10n11
Inviato: Monday, November 29, 2010 9:45:38 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
le tabelle Pivot sono due se intendi quella di sinistra e quella di destra, ma anche guardando il file-prova sono più di due...
le prime 2 (quella di sinistra e di destra) vanno da riga 4 a riga 259
le seconde da 262 a 499
le terze da 502 a 735
le quarte da 738 a 979
le quinte da 982 a 1223



Bisogna capire se stiamo parlando della macro che scansiona tutti glie elementi della tabella 1 (5 tabelle)
oppure della macro che analizza la sola colonna 34.
a quale delle due bisogna riferirsi?

Commenta:

La mia necessità di fare partire le varie tabelle da una riga prestabilita è per poter scrivere le macro "CercaSorgente" della colonna di competenza, in base a ciascuna tabella, fissando di volta in volta le istruzioni



1) Se le tabelle sono dinamiche come fai a stabilire a priori quanto sarà lunga la tabella?
2) per come è costruita la macro non hai nessuna necessità di individuare l'inizio di ogni tabella Pivot, la macro legge sempre l'intersezione esatta delle tabella a prescindere dal punto di partenza.(E' importante solo la riga di partenza della prima tabella Pivot.
3) l'unica cosa che dovrà essere modificato nella macro è il range di confronto se deve essere la tabella1 oppure la riga 34.
saluti
Giap

aetio
Inviato: Monday, November 29, 2010 8:19:38 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
mi riferisco a quelle di TABELLA1, 5 colonne... per cui 5 tabelle Pivot. Quella di col.34 non mi dà alcun problema, è tabella unica e la macro che hai preparato funziona a meraviglia.
Appunto perché sono tabelle dinamiche, che non hanno lunghezza fissa, mi serve un'istruzione che faccia iniziare ciascuna tabella in una derminata riga che mantengo a debita distanza dalla tabella dinamica precedente. Diciamo che se per ipotesi la prima coppia di tabelle arriva fino a riga 50, o anche 55, oppure al massimo 63, farò iniziare la seconda coppia di tabelle da riga 70 e siamo a posto. In questo modo ho la possibilità di dedicare una coppia di parametri fissi da inserire nella macro "CercaSorgente2" che consentano di risalire ai dati di Foglio2 per i dati di tutte le coppie di tabelle e non solo per quelli della prima...
Grazie assai, saluti
eZio
a10n11
Inviato: Tuesday, November 30, 2010 10:01:07 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
mi riferisco a quelle di TABELLA1, 5 colonne... per cui 5 tabelle Pivot. Quella di col.34 non mi dà alcun problema, è tabella unica e la macro che hai preparato funziona a meraviglia.
Appunto perché sono tabelle dinamiche, che non hanno lunghezza fissa, mi serve un'istruzione che faccia iniziare ciascuna tabella in una derminata riga che mantengo a debita distanza dalla tabella dinamica precedente. Diciamo che se per ipotesi la prima coppia di tabelle arriva fino a riga 50, o anche 55, oppure al massimo 63, farò iniziare la seconda coppia di tabelle da riga 70 e siamo a posto. In questo modo ho la possibilità di dedicare una coppia di parametri fissi da inserire nella macro "CercaSorgente2" che consentano di risalire ai dati di Foglio2 per i dati di tutte le coppie di tabelle e non solo per quelli della prima...
Grazie assai, saluti
eZio


alve
Partiamo dalla Tabella Complessiva del foglio2.

Se non ricordo male, questa tabella viene periodicamente aggiornata.
Consideriamo oggi venga aggiunta una riga alla tabella (quindi 5 records Tabella 1 - 26 Records Tabella2)
l'aggiunta di questa riga, incrementerà di la tabella Pivot di 13 righe per ogni record di tabella 1)

Alla luce di ciò come fai a prevedere il dimensionamento della Tabella Pivot.

Quello che continuo a non capire è la necessità che hai di trovare dei parametri fissi. Non ti serve alcun tipo di parametro. Se mi vuoi dire che la macro scansiona solo la prima colonna della Tabella1, basta estendere il range
e nel caso in cui ci possano essere valori duplicati nelle tabelle basta escludere l'istruzione Exit For come segue:

Code:

Sub CercaSorgente()
With Sheets("TabPivot")
Riga = ActiveCell.Row
col = ActiveCell.Column
Select Case col
Case 5 To 17
x = 5
Y = 2
z = 4
Case 22 To 34
x = 22
Y = 19
z = 21
End Select
NrTab2 = .Cells(6, col).Value
Nr = .Cells(Riga, Y).Value
Comp = .Cells(Riga, z).Value
End With
With Sheets("Foglio2")
Set area = .Range("C2", .Range("G2").End(xlDown))
For Each cl In area
If cl.Value = Nr And Comp = .Cells(cl.Row, NrTab2).Value Then
CellRif = .Cells(cl.Row, NrTab2).Address
MsgBox ("Il Valore selezionato è riferito" & vbCrLf _
& "alla Cella   " & CellRif & " del Foglio2 ")
End If
Next
End With
End Sub


saluti
Giap

aetio
Inviato: Tuesday, November 30, 2010 9:19:45 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
ho provato la macro, ma trova una serie di coordinate... (si apre diverse volte la finestra,con valori di riga diversi) in realtà il riferimento da cercare in Foglio2 è uno solo...
Commenta:
Se non ricordo male, questa tabella viene periodicamente aggiornata.
corretto.
Commenta:
Alla luce di ciò come fai a prevedere il dimensionamento della Tabella Pivot.
... non lo prevedo, lo prestabilisco io impostando nella macro dei riferimenti opportunamente abbondanti, in modo da non sovrapporre le tabelle.
Commenta:
Quello che continuo a non capire è la necessità che hai di trovare dei parametri fissi.
servono per dare alla macro dei riferimenti precisi sulle coordinate dei valori da ricercare...
Ho provato, con le più recenti tabelle Pivot elaborate, ad adattare la macro (dima) Creasorgente alle celle in cui si trovano x,y,z nelle tabelle Pivot generate dalla Confronta_Tabelle2 + CreaPivot2 e funziona... tutto corrispone. Forse non riesco bene a far capire ciò che intendo dire... più sopra ho cercato di dare dei riferimenti relativi al file-esempio per inquadrare l'argomento con qualcosa di definito...
Commenta:
le tabelle Pivot sono due se intendi quella di sinistra e quella di destra, ma anche guardando il file-prova sono più di due...
le prime 2 (quella di sinistra e di destra) vanno da riga 4 a riga 259
le seconde da 262 a 499
le terze da 502 a 735
le quarte da 738 a 979
le quinte da 982 a 1223
in base alla suddivisione della TABELLA1 di Foglio2
La mia necessità di fare partire le varie tabelle da una riga prestabilita è per poter scrivere le macro "CercaSorgente" della colonna di competenza, in base a ciascuna tabella, fissando di volta in volta le istruzioni
NrTab2 = .Cells(6, col).Value
e
NrTab1 = .Cells(5, x).Value
inserendo in ciascuna la rispettiva riga di competenza

e ancora
Commenta:
compilare le varie tabelle Pivot in determinate righe, opportunamente designate in base alla lunghezza media stimata di dette tabelle, che possiamo fissare in 8500 righe ciascuna. Quindi la seconda coppia di tabelle inizierà da riga 8501, la terza da riga 17001 etc. Condizione importante: le 2 tabelle Pivot reciproche (quella di sinistra e quella di destra) devono iniziare nella stessa riga, in modo che nelle istruzioni
NrTab2 = .Cells(6, col).Value
e
NrTab1 = .Cells(5, x).Value
i due numeri (che variano in base alle rispettive righe di competenza, nelle tabelle in cui si applica la macro) siano delle costanti per tutte le tabelle, non solo per le prime due. Infatti le prime due tabelle iniziano entrambe sempre in riga 4, mentre la riga d'inizio delle successive dipende dalla lunghezza delle prime due impedendomi di fatto di poter applicare una macro ad esse dedicata. Supponendo di poter fare iniziare le seconde tabelle da riga 8501 le due istruzioni viste sopra diventerebbero
NrTab2 = .Cells(8503, col).Value
e
NrTab1 = .Cells(8502, x).Value
e via dicendo per le tabelle successive.

Grazie assai, Saluti
eZio
a10n11
Inviato: Wednesday, December 01, 2010 10:51:05 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
la macro che segue crea i blocchi delle tabelle Pivot in righe predeterminate:


Sub CreaPivot2()
Select Case Pr
Case 1, 6
rtab = 4 ' Riga iniziale
Case 2, 7
rtab = 1000 'Tabella 2 e 7
Case 3, 8
rtab = 2000 'Tabella 3 e 8
Case 4, 9
rtab = 3000 'Tabella 4 e 9
Case 5, 10
rtab = 4000 'Tabella 5 e 10
End Select

Select Case Tab2
Case 1
colp = 3
Case 2
colp = 20
End Select
Set rng = Cells(1, col).CurrentRegion
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
rng.Address).CreatePivotTable TableDestination:=Sheets("TabPivot").Cells( _
rtab, colp), TableName:="Tabella_pivot" & Pr
Sheets("TabPivot").Select
ActiveSheet.PivotTables("Tabella_pivot" & Pr).SmallGrid = False
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Compon.")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Numero")
.Orientation = xlDataField
.Position = 1
End With
ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Somma di Numero"). _
Function = xlCount
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab2")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabella_pivot" & Pr).PivotFields("Tab1")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tabella_pivot" & Pr).ColumnGrand = False
ActiveSheet.PivotTables("Tabella_pivot" & Pr).RowGrand = False

Set rng = Nothing
End Sub


I blocchi assegnati nella istruzione Select Case puoi cambiarla a tuo piacimento lasciando solo la riga di partenza
sempre uguale a 4


Commenta:

ho provato la macro, ma trova una serie di coordinate... (si apre diverse volte la finestra,con valori di riga diversi) in realtà il riferimento da cercare in Foglio2 è uno solo...


Se la Msgbox si apre più volte, significa che nella tua tabella ci sono codici uguali che si ripetono.

saluti
Giap


aetio
Inviato: Saturday, December 04, 2010 1:38:11 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
innanzi tutto scusa se rispondo solo ora, ma per un imprevisto ero in trasferta... senza io mio amato pc, e le mie tabelle :)))

Direi che come al solto HAI FATTO CENTRO... con questa tua ultima macro le tabelle pivot partono da una riga prestabilita e ora anche la macro CercaSorgente funziona correttamente. Non capisco il motivo della ripetizione della Msgbox... dava riferimenti errati, nonostante i dati fossero scritti una sola volta...
Grazie infinite, buona giornata
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.