Ciao,
a10n11 ha scritto:
Se la guardi bene la macro non è poi molto diversa dal gioco della battaglia navale.
... Vero! :)
Ma è "un tantino" più complicata...!! :)))
Sto testardamente (giuro che la mia testa è dura come il granito...chi mi conosce lo sa benissimo!! ahahaha) cercando di applicare la macro ad una variante del tema, che anziché partire da un confronto tra le due tabelle lavora sul confronto tra una delle 2 tabelle e la col.AH (che è composta da valori da 1 a 10). Il risultato è che la tabella Pivot si compila alla perfezione, tutti i dati corrispondono, ma se applico la macro CercaSorgente con le dovute correzioni del caso (come mi hai spiegato in modo impeccabile sopra) non funziona correttamente perché il riferimento della cella di Foglio non è corretto: il valore di col.AH non corrisponde... Ecco i parametri di lavoro delle macro(del file adattate al nuovo lavoro:
Dim col As Integer
Dim Pr As Integer
Dim Tab2 As Integer
Sub confronta_Tabelle2()
With Sheets("TabPivot")
.Cells.Clear
End With
Intab2 = 8
Ftab2 = 20
Pr = 1
For Tab2 = 1 To 2
Range("AK2:BH" & Rows.Count).ClearContents
'Range("AK2:bH65536").ClearContents
uriga = Range("C" & Rows.Count).End(xlUp).Row
Riga = 2
col = 37
For n = 34 To 34
For A = Intab2 To Ftab2
For i = 2 To uriga
Cells(Riga, col).Value = Cells(i, n).Value
Cells(Riga, col + 1) = n - 2
Cells(Riga, col + 2) = A
Cells(Riga, col + 3) = Cells(i, A).Value
ctrl = True
If ctrl Then
Riga = Riga + 1
Else
Riga = Riga
End If
ctrl = False
Next i
Next A
A = 7
Call CreaPivot2
Pr = Pr + 1
Sheets("foglio2").Select
col = col
Riga = 2
Next n
Intab2 = 21
Ftab2 = 33
Next Tab2
End Sub
Sub CreaPivot2()
Select Case Tab2
Case 1
colp = 3
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
'Rtab = Sheets("TabPivot").Range("C65536").End(xlUp).Row + 3
Case 2
colp = 20
Rtab = Sheets("TabPivot").Cells(Rows.Count, colp).End(xlUp).Row + 3
'Rtab = Sheets("TabPivot").Cells(65536, 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
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
laTabella Pivot dovrebbe avere in:
a) col.B e col.U i valori di col.AH di Foglio2
b) col.D e col.W i valori da col.H a col.AG di Foglio2
c) col.E:Q e col.X:AJ il valore più"recente" di col. AH di Foglio2
Usando l'ultima 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 24 To 36
x = 24
y =21
Z = 23
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("H3", .Range("h3").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
le condizioni viste sopra a) e b) si verificano regolarmente, mentre quando lancio la macro CercaSorgente la condizione c) va a spasso come vuole lei e mi restituisce delle coordinate errate, perché è vero che un valore uguale si trova in quella colonna, in quella riga, ma che non è correlato al suo valore di col.AH di Foglio2, mentre la tabella Pivot lo segnala correttamente...
quale errore concettuale (e a questo punto sostanziale) commetto nell'adattare l'ultima macro??
Grazie assai, buona giornata
eZio