Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao MecFala,
Si, avevo detto già all' inizio che con il nome statico non avevo problemi ma è stato proprio per eliminare gli spazi vuoti nell' elenco a tendina della convalida che sono passato a "litigare" con la funzione scarto.
Purtroppo, credo che i tuoi tentativi ad usare una formula siano destinati a fallire, se non per altro, poichè gli intervalli B2:B31 sui fogli delle classe (3A:3D e 4A:4C) non contengono delle celle vuote. Una cella che contiene una formula, anche una formula che potrebbe restituire una stringa vuota, ovvero "", non può mai essere vuota!
Pertanto ti consiglierei l'aiuto dell'amico VBA. Quindi prova qualcosa del genere:
- Fai clic dx sulla linguetta del foglio di interesse
- Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
- Incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim srcSH As Worksheet
Dim rngClasse As Range, rngStudente As Range
Dim rngConvalidaDati As Range
Dim arrClasse As Variant, arrFogli As Variant
Dim arrStudenti As Variant, arrConvalida() As Variant
Dim Res As Variant
Dim i As Long, LRow As Long
Const sCellaClasse As String = "B4" '<<=== Modifica
Const sCellaStudente As String = "B6" '<<=== Modifica
Const sClasse As String = "TerzaA,TerzaB,TerzaC,TerzaD," _
& "QuartaA,QuartaB,QuartaC" '<<=== Modifica
Const sFogli As String = "3A,3B,3C,3D,4A,4B,4C" '<<=== Modifica
With Me
Set rngClasse = .Range(sCellaClasse)
Set rngStudente = Me.Range(sCellaStudente)
End With
If Not Intersect(rngClasse, Target) Is Nothing Then
On Error GoTo XIT
Application.EnableEvents = False
arrClasse = Split(sClasse, ",")
arrFogli = Split(sFogli, ",")
With rngClasse
If Not .Value = vbNullString Then
Res = Application.Match(.Value, arrClasse, 0)
If Not IsError(Res) Then
Set srcSH = ThisWorkbook.Sheets(arrFogli(Res - 1))
With srcSH
LRow = .Cells(Rows.Count, "B").End(xlUp).Row
Set rngConvalidaDati = .Range("B2:B" & LRow)
End With
arrStudenti = rngConvalidaDati.Value
i = 1
Do Until arrStudenti(i, 1) = vbNullString
ReDim Preserve arrConvalida(1 To i)
arrConvalida(i) = arrStudenti(i, 1)
i = i + 1
Loop
With rngStudente
.ClearContents
.Activate
With .Validation
.Delete
.Add Type:=xlValidateList, Formula1:=Join(arrConvalida, ",")
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End With
End If
Else
With rngStudente
.ClearContents
.Validation.Delete
End With
End If
End With
End If
XIT:
Application.EnableEvents = True
End Sub
'<<=========
Potresti scaricare il mio file di prova (in formato Excel 97-2003) MecFala20170409.xls a:
https://www.dropbox.com/s/2xbkhcxyir2nuo6/MecFala20170409.xls?dl=0
===
Regards,
Norman