|
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
|
|
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
Guest |