Ho scaricato il tuo file e avendo le convalide non funzionanti le ho eliminate quindi fai lo stesso e segui questa procedura
1) Aggiungi un foglio chiamandolo "Elenchi"
2) Copia le colonne A e B del foglio Trasmittanza e le incolli in questo nuovo foglio
3) con le due colonne selezionati ti porti nel Menu Dati e elimini i doppioni
4) Selezioni la colonna B (fino dove sono i dati: B1:B20) e definisci il nome "Regioni"
4) selezioni da C1 a C100 definendo il range con nome "prov"
5) Selezioni da D1 a D300 e definisci il nome "Comuni"
6) torni sul foglio trasmittanza e convalidi le tre celle C21, C23, C25 con i rispettivi elenchi Regioni, Prov, Comuni
7) Copia la macro1 nel Vba del foglio Trasmittanza
5) Copia la macro2 e inseriscila in un modulo
6) In E23 inserisci questa formula
- Codice: Seleziona tutto
=SE(C23="";"";CERCA.VERT(C23;ISTAT!C8:D8107;2;FALSO))
(formula che puoi eliminare se aggiungi una riga codice alla macro che inserirà la sigla provincia in automatico)
7) Salva il file in formato .xlsm
e provi a cambiare la regione, dovresti ottenere solo pe province di quella regione nella convalida di appartenenza
una volta selezionata la provincia, dovresti trovare solo i comuni nella rispettiva convalida
selezionando il comune avrai la "Zona Climatica" aggiornata
Non sono andato oltre perché il file non corrisponde con la descrizione che hai fornito sui dati
ma potrai procedere da solo seguendo le istruzioni all'interno della macro
Macro1
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
AreaR = "C21:D22"
AreaP = "C23:D24"
AreaC = "C25:D26"
If Not Application.Intersect(Target, Range(AreaR)) Is Nothing Then
Application.EnableEvents = False
CreaElProv
Application.EnableEvents = True
End If
If Not Application.Intersect(Target, Range(AreaP)) Is Nothing Then
Application.EnableEvents = False
CreaElCom
Application.EnableEvents = True
End If
If Not Application.Intersect(Target, Range(AreaC)) Is Nothing Then
Application.EnableEvents = False
TrovaDati
Application.EnableEvents = True
End If
End Sub
Macro2
- Codice: Seleziona tutto
Sub CreaElProv()
Dim WSI As Worksheet
Dim WST As Worksheet
Dim WSE As Worksheet
Set WSI = Worksheets("ISTAT")
Set WST = Worksheets("TRASMITTANZA")
Set WSE = Worksheets("Elenchi")
WSE.Columns("C").ClearContents
URIS = WSI.Range("A" & Rows.Count).End(xlUp).Row
For i = 8 To URIS
If WST.Range("C21").Value = WSI.Range("B" & i).Value Then
If Prov = WSI.Range("C" & i).Value Then GoTo Saltaprov
URE = WSE.Range("C" & Rows.Count).End(xlUp).Row + 1
WSE.Range("C" & URE).Value = WSI.Range("C" & i).Value
Prov = WSI.Range("C" & i).Value
End If
Saltaprov:
Next i
WST.Range("C23:D24").ClearContents
WST.Range("C25:D26").ClearContents
WST.Range("C29:D32").ClearContents
End Sub
Sub CreaElCom()
Dim WSI As Worksheet
Dim WST As Worksheet
Dim WSE As Worksheet
Set WSI = Worksheets("ISTAT")
Set WST = Worksheets("TRASMITTANZA")
Set WSE = Worksheets("Elenchi")
WSE.Columns("D").ClearContents
URIS = WSI.Range("A" & Rows.Count).End(xlUp).Row
For i = 8 To URIS
If WST.Range("C23").Value = WSI.Range("C" & i).Value Then
If Comu = WSI.Range("G" & i).Value Then GoTo SaltaCom
URE = WSE.Range("D" & Rows.Count).End(xlUp).Row + 1
WSE.Range("D" & URE).Value = WSI.Range("G" & i).Value
Comu = WSI.Range("G" & i).Value
End If
SaltaCom:
Next i
End Sub
Sub TrovaDati()
Dim WSI As Worksheet
Dim WST As Worksheet
Set WSI = Worksheets("ISTAT")
Set WST = Worksheets("TRASMITTANZA")
URIS = WSI.Range("A" & Rows.Count).End(xlUp).Row
MiaRic = WST.Range("C21").Value & WST.Range("C23").Value & WST.Range("C25").Value
For i = 8 To URIS
If MiaRic = WSI.Range("B" & i).Value & WSI.Range("C" & i).Value & WSI.Range("G" & i).Value Then
WST.Range("C29").Value = WSI.Range("K" & i).Value '<<< riga da duplicare per ogni cella che deve essere compilata sul foglio "Trasmittanza"
'<<<< da qui in poi potrai inserire tutti gli altri campi copiando la riga precedente e adattandola alle coordinate celle
End If
Next i
End Sub
Allego il file esempio
Download File TestCiao