Nel Foglio ho modificato la macro così
- Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "B1:T29,B30:K30,AJ1"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub
If [W1] = "I" Then Col = 41
If [W1] = "D" Then Col = 43
If [W1] = "C" Then Col = xlNone
ActiveCell.Interior.ColorIndex = Col
If Target.Address = "$AJ$1" Then Call TrovaF
End If
End Sub
In un modulo ho inserito questa macro
- Codice: Seleziona tutto
Sub TrovaF()
UR = Range("B" & Rows.Count).End(xlUp).Row
CBuone = 0
CDoppie = 0
CManc = 0
Range("AJ2:AK10000").ClearContents
For RR = 1 To UR
For CC = 2 To 20
If Cells(RR, CC).Value <> "" Then
If Cells(RR, CC).Interior.ColorIndex = 41 Then CBuone = CBuone + 1
If Cells(RR, CC).Interior.ColorIndex = 43 Then
CDoppie = CDoppie + 1
URD = Range("AK" & Rows.Count).End(xlUp).Row + 1
Range("AK" & URD).Value = Cells(RR, CC).Value
End If
If Cells(RR, CC).Interior.ColorIndex = xlNone Then
CManc = CManc + 1
URM = Range("AJ" & Rows.Count).End(xlUp).Row + 1
Range("AJ" & URM).Value = Cells(RR, CC).Value
End If
End If
Next CC
Next RR
[Y2] = CBuone + CDoppie + CManc
[AA2] = CBuone + CDoppie
[AC2] = CManc
End Sub
La macro si attiva selezionando AJ1 dove ho scritto "Cerco" e in AK1 "Offro"
Ho spostato la cella convalida da AD1 a X1 (come si evince dalla macro del foglio)
Ho spostato l'intero riquadro dei totali portandolo nel range Y1:AH2
in AE2 inserito la formula:
- Codice: Seleziona tutto
=AA2/Y2
In quanto la macro troverà i totali (figurine) di Y2, AA2, AC2
e creerà l'elenco nella colonna AJ (Cerco) e AK (Offro)
Ho quindi cancellato le scritte al di sotto della tabella figurine per poter calcolare le righe effettive.
Allego il fileCiao
EDIT ore 18:00 -Per ovviare all'inconveniente della casella di convalida e colorare le celle con il solo click del mouse si potrebbe utilizzare una macro di questo tipo (da inserire nel foglio al posto della precedente):
- Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "B1:T29,B30:K30,AJ1"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub
Select Case ActiveCell.Interior.ColorIndex
Case xlNone
ActiveCell.Interior.ColorIndex = 41
Case 41
ActiveCell.Interior.ColorIndex = 43
Case 43
ActiveCell.Interior.ColorIndex = 41
End Select
If Target.Address = "$AJ$1" Then Call TrovaF
End If
End Sub
Perché a rigor di logica si tende a incrementare il numero delle figurine quindi ad avere sempre più figurine e le celle vanno quindi colorate o Blu o Verde se doppioni
Quando la figurina non la si ha la cella è senza colore, quando la si acquista o la si trova con un click la cella diviene Blu, se è doppione con un altro click diviene verde.
A questo punto la si offre in cambio di altra figurina, quindi, cliccandoci su da verde torna blu, non credo mai che debba tornare senza colore (si offre l'unica figurina che si ha nel catalogo ? )
Se proprio si vuol togliere il colore allora aggiungi anche questo codice nel foglio
- Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
CheckArea = "B1:T29,B30:K30"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub
ActiveCell.Interior.ColorIndex = xlNone
End If
End Sub
Con il doppio click si resetta il fondo della cella