Ripassiamo la Geografia dell'Italia

Stato
Chiusa ad ulteriori risposte.

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Buongiorno a tutti
Ho preso spunto da questa discussione Grafico Excel con mappa Italia ed ho voluto approfondire gli ottimi lavori di Fugma e di Gallo Balm Arturo. E’ venuto fuori il lavoro che allego qui.

Di cosa si tratta?
Un gioco (ma poi non tanto) per individuare le Regioni e le Province dell’Italia. La stessa base potrebbe essere utilizzata (con gli opportuni aggiustamenti) anche per le statistiche (andamento PIL, andamento Demografico, ecc.) sulle quali sto lavorando.

Attiro la vostra attenzione sul fatto che il lavoro NON HA ALCUNA PROTEZIONE (quindi occhio a cosa c’è in una cella prima di scrivervi dentro).

Vorrei il vostro parere e, principalmente, se ci sono miglioramenti da apportare (quali e come).

Ciao a tutti,
Mario
 

Baloon_50

Utente assiduo
2 Agosto 2015
4.156
48
69
Milano - Italy
2013 PC
50
Buongiorno a tutti
Ho preso spunto da questa discussione Grafico Excel con mappa Italia ed ho voluto approfondire gli ottimi lavori di Fugma e di Gallo Balm Arturo. E’ venuto fuori il lavoro che allego qui.

Di cosa si tratta?
Un gioco (ma poi non tanto) per individuare le Regioni e le Province dell’Italia. La stessa base potrebbe essere utilizzata (con gli opportuni aggiustamenti) anche per le statistiche (andamento PIL, andamento Demografico, ecc.) sulle quali sto lavorando.

Attiro la vostra attenzione sul fatto che il lavoro NON HA ALCUNA PROTEZIONE (quindi occhio a cosa c’è in una cella prima di scrivervi dentro).

Vorrei il vostro parere e, principalmente, se ci sono miglioramenti da apportare (quali e come).

Ciao a tutti,
Mario
Ciao Mario complimenti bel lavoro.
Forse ci potrebbe essere una leggera miglioria :
se seleziono una regione si potrebbe poi fare in modo che selezionando le province, venissero fuori nella lista solo le province della regione selezionata. Lo stesso se si fa uso del mouse.
Forse chiedo troppo :dubbioso:

ciao e comunque già così è ottimo. cappello_saluta
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
22.697
1.733
Como
2011MAC 2016WIN
514
Ottimo lavoro Mario.
Complimenti :StrettaDiMano:

E grazie per la condivisione.SmileForum
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Ciao e grazie ad entrambi per i complimenti-

@Baloon55
Gaetano, se ho capito bene quello che hai suggerito, eccoti accontentato: allegato qui.

Fai sapere se va bene. Ciao,
Mario
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Ciao Rollis
sai quanto m'è costato Ustica, le Eolie, la provincia di trapani con Pantelleria e le Egadi, Livorno e l'Elba, Grosseto e il Giglio, per non parlare di Venezia e Udine.

Ma credo ti sia piaciuto lo stesso.
Aspetto sempre suggerimenti e migliorie.

Ciao,
Mario
 

dracoscrigno

CioccaPiatti & VBA Expert
Expert
1 Maggio 2016
4.023
63
office pro 2010
58
sarebbe interessante capirne il funzionamento attraverso quattro righe di racconti, comprenderne la macro leggendola, vederne la grafica attraverso un paio di immagini, ANCHE dal mio smartphone :StrettaDiMano:
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Buongiorno a tutti
A seguito della richiesta di Dracroscrigno (ciao) schematizzo l’iter che mi ha portato a questo lavoro.

IDEA
Fare un programma su un Foglio Excel che aiutasse i ragazzi (ma non solo) ad apprendere e ripassare la Geografia d’Italia aiutandoli con una matta, anche interattiva.

LAVORO PREPARATORIO
Un’immagine di una Cartina d’Italia suddivisa in Regioni e Province. Inserire sopra una figura a mano libera, col Foglio ingrandito al 400%, per ogni provincia (lavoro certosino che, spesso, mi indiceva a …lasciare).
Reperire da qualche sito i dati necessari (elenco Regioni, Province e relativi dati: estensione, residenti, densità, ecc.).
Ho inserito nel Foglio: due OptionButton, una CheckBox e una ComboBox

FUNZIONAMENTO
E’ scritto in basso a destra nella schermata.
Occorre selezionare un OptionButton. Questa selezione popola la ComboBox coi i relativi dati.
Si può scegliere l’automatismo o l’interattività selezionando o deselezionando la CheckBox.
Se la CheckBox NON E’ FLAGGATA, non appena si seleziona un nome della ComboBox la relativa Regione o Provincia è colorata in rosso.
Se, invece, la CheckBox E’ FLAGGATA, dopo aver selezionato un nome della ComboBox, occorre portarsi col mouse sulla cartina nel punto in cui si ritiene sia quella regione o Provincia e dare un click: se il punto è congruo la Regione o Provincia assume il colore rosso; se il punto non è corretto un opportuno messaggio avverte che si è in errore e comunica che si è fatto clic sulla Regione … e sulla Provincia di …

ESECUZIONE DEL PROGRAMMA
Quando si apre il programma viene lanciata la macro che azzera tutto e dà il colore ad ogni Regione
Codice:
Private Sub Workbook_Open()
With Sheets(1)
    .ComboBox1.ListFillRange = ""
    .ComboBox1.Value = ""
    .CheckBox1.Value = False
    .OptionButton1.Value = False
    .OptionButton2.Value = False
    .Range("M3") = 0
    .Range("M4") = 0
    Range("L9:M10").ClearContents
    colore_regione
End With
End Sub
La Sub colore_regione dà il colore scelto per ogni regione che si trova nell’intervallo AF2:AH21
E’ basata sul nome dato all’immagine della provincia, nome costituito da “C_siglaregione_siglaprovicnia_numero”
Codice:
Sub colore_regione()
Dim x As Integer, i As Long, j As Long
Dim C1 As Integer, C2 As Integer, C3 As Integer
x = ActiveSheet.Shapes.Count
For i = 1 To x
    For j = 2 To 21
        If Mid(ActiveSheet.Shapes(i).Name, 3, 3) = Cells(j, 31) Then
            C1 = Cells(j, 32).Value: C2 = Cells(j, 33).Value: C3 = Cells(j, 34).Value
            ActiveSheet.Shapes(i).Fill.ForeColor.RGB = RGB(C1, C2, C3)
            Exit For
        End If
    Next j
Next i
End Sub
La selezione di uno degli OptionButton popola la ComboBox coi dati relativi alla scelta e aggiunge dei valori ad alcune celle del Foglio per i successivi calcoli che dovrà eseguire il clic sulla ComboBox
Codice:
Private Sub OptionButton1_Click() 'scelta Regioni
    If OptionButton1.Value = True Then
        Sheets(1).Range("L5") = " Scegli una Regione"
        Application.EnableEvents = False
        ComboBox1.Value = ""
        ComboBox1.ListFillRange = "Foglio1!AA2:AA21"
        Application.EnableEvents = True
        Sheets(1).Range("M3") = 1
    End If
End Sub
A questo punto selezioniamo un nome dall’elenco della ComboBox il cui evento _Change effettua un primo controllo se una delle due OptionButton è selezionata (si potrebbe eliminare in quanto se nessuno dei due OptBt è selezionato la ComboBox è vuota);
Codice:
If OptionButton1.Value = False And OptionButton2.Value = False Then
    MsgBox "Occorre selezionare uno dei" & vbLf & "pulsanti Regione o Provincia"
    Exit Sub
End If
quindi assume il valore della CheckBox rimandando alla fine della sub se è flaggata
Codice:
If CheckBox1.Value = True Then GoTo Fine
Se la CheckBox non è flaggata colora la Regione o la Provincia selezionata. Questa la macro intera
Codice:
Private Sub ComboBox1_Change()
Dim i As Integer, x As Integer
Dim Testo As String
Dim ur As Long, riga As Long
Dim letcln As String, numcln As Long, ima As String
Call colore_regione
Columns(17).ClearContents
If OptionButton1.Value = False And OptionButton2.Value = False Then
    MsgBox "Occorre selezionare uno dei" & vbLf & "pulsanti Regione o Provincia"
    Exit Sub
End If
Application.EnableEvents = False
If CheckBox1.Value = True Then GoTo Fine
If OptionButton1.Value = True Then  'Regione
    letcln = "aa": numcln = 27
Else
    letcln = "ab": numcln = 28      'Provincia
End If
Testo = ComboBox1.Value
If Testo = "" Then
    Range(Cells(9, 12), Cells(10, 13)).ClearContents
    Exit Sub
End If
'cerca il dato
ur = Cells(Rows.Count, numcln).End(xlUp).Row
riga = Application.WorksheetFunction.Match(Testo, Range(Cells(2, numcln), Cells(ur, numcln)), 0)
x = ActiveSheet.Shapes.Count
If OptionButton1.Value = True Then  'se è una regione
    Cells(9, 12) = "Regione"
    Cells(10, 13) = Testo
    Testo = "C_" & Left(ComboBox1.Value, 3)
    For i = 1 To x
        If Left(ActiveSheet.Shapes(i).Name, 5) = Testo Then
            ActiveSheet.Shapes(i).Fill.ForeColor.RGB = RGB(255, 0, 0)
        End If
    Next i
    'elenca le province
    Call ElencoProvince(Testo)
Else                                'se è una provincia
    Cells(9, 12) = "Provincia di"
    Cells(10, 13) = Testo
    ima = Range("AA1").Offset(riga, 3)
    ActiveSheet.Shapes.Range(Array(ima)).Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Fine: 'Riattiva l'aggiornamento dello schermo
Application.ScreenUpdating = True
End Sub
Se la CheckBox è flaggata allora si ha l’interattività, cioè bisogna fare clic col mouse sul punto ritenuto corretto per la Regione o Provincia selezionata. Per far ciò ho dovuto associare ad ogni Shape una macro che rimanda al lavoro comune.
Mi spiego meglio. Ogni immagine ha assegnata una macro come la sotto riportata che differisce per il nome e per il numero
Codice:
Sub C_SIC_AG_094()  'agrigento
Dim num As Integer
num = 94
Call Transform(num)
End Sub
La funzione a cui rimanda è la seguente che non sto a spiegare perché, credo, abbastanza comprensibile
Codice:
Function Transform(ByVal num As Integer)
Dim x As Long, i As Long, rg As Long, Testo As String
Dim sigla As String, Pro As String, nomreg As String, Reg As String, mes As String
If Range("M3") = 0 Then GoTo Fine
'in base al numero individua Provincia e Regione
x = ActiveSheet.Shapes.Count
For i = 1 To x
    If ActiveSheet.Shapes(i).Type = msoFreeform Or ActiveSheet.Shapes(i).Type = msoGroup Then
        If Val(Right(ActiveSheet.Shapes(i).Name, 3)) = num Then
            sigla = ActiveSheet.Shapes(i).Name
            rg = Application.WorksheetFunction.Match(sigla, Sheets(1).Range("AD2:AD111"), 0) + 1
            Pro = Range("AB" & rg)
            nomreg = Mid(sigla, 3, 3)
            rg = Application.WorksheetFunction.Match(nomreg, Sheets(1).Range("AE2:AE21"), 0) + 1
            Reg = Range("AA" & rg)
        End If
    End If
Next i
If Range("M3") = 2 And Range("M4") = 1 Then 'se la scelta è provincia
    If Pro = Range("RegProv") Then
        Cells(9, 12) = "Provincia di"
        Cells(10, 13) = Pro
        ActiveSheet.Shapes(sigla).Fill.ForeColor.RGB = RGB(255, 0, 0) 'colora
        GoTo Fine
    Else
        GoTo Errore
    End If
ElseIf Range("M3") = 1 And Range("M4") = 1 Then 'se la scelta è regione
    If Reg = Range("RegProv") Then
        Cells(9, 12) = "Regione"
        Cells(10, 13) = Reg
        For i = 2 To 111
            If Mid(Range("AD" & i), 3, 3) = nomreg Then
                ActiveSheet.Shapes(Range("AD" & i)).Fill.ForeColor.RGB = RGB(255, 0, 0) 'colora
            End If
        Next
        Testo = "C_" & nomreg
        Call ElenProv(Testo)
        GoTo Fine
    Else
        GoTo Errore
    End If
End If
Errore:
    mes = "Indicazione errata" & vbLf
    mes = mes & "E' stato fatto click su" & vbLf
    mes = mes & "Regione   = " & Reg & vbLf
    mes = mes & "Provincia  = " & Pro
    MsgBox mes
Fine:
End Function
E questo è tutto.
Facile a dirsi ma che mi ha creato qualche difficoltà circa l’interattività. Non essendoci una UserForm non sono riuscito a creare una ‘Classe’ (come era nelle mie intenzioni) per evitare le 110 macro per le province.

Spero di non aver commesso errori nella spiegazione e aspetto vostri suggerimenti (in base al suggerimento di Baloon_50 – grazie Gaetano) ho implementato con l’indicazione delle Province quando si opta per una Regione.

Ciao a tutti,
Mario
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.946
213
47
Cosenza
Excel 2016
216
Complimenti Mario, Ottimo lavoro :applausi: (e ottima occasione per ripassare codice e province)
Grazie per la condivisione
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Complimenti Mario, Ottimo lavoro :applausi: (e ottima occasione per ripassare codice e province)
Grazie per la condivisione
Ciao Enzo e grazie per i complimenti.
Sto lavorandoci ancora sopra per implementare il programma con qualche ... ciliegina :dubbioso:LeggoStudio
Intanto mi sono accorto di un errore e chiedo scusa a tutti: le province di Savona e Imperia sono invertite :arrossisco:. Per gli esperti che mi hanno omaggiato il loro assenso non sarà difficile correggere; per tutti gli altri, abbiate qualche giorno di pazienza e posterò il nuovo lavoro, corretto e più ... intrigante.

Ciao,
Mario
 

Gianfranco55

Utente senior
5 Novembre 2015
5.804
213
64
Valdagno
excel 365
350
ciao
Marius

non è che mi riposti il file
non riesco a scaricarlo

magari se puoi su dropbox

file dropper non mi apre la pagina sul download


grazie
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
Ciao Gianfranco
grazie per la preferenza

Ecco il file

Ciao,
Mario

PS - Le province di Imperia e Savona ora sono corrette. Per il resto ... vedremo.
 

klingklang

Ciappinaro VBA_Expert
Expert
20 Ottobre 2017
5.239
213
43
San Giovanni in Persiceto (BO)
www.excelswissknife.com
2016, 365
376
Ciao Mario, ti faccio i miei complimenti per il bellissimo lavoro... se l'avessi trovato qualche anno fa saresti diventato istantaneamente il mio eroe personale (non sai quante bestemmie per utilizzare un programma di cartografia e rappresentare dati elettorali su cartina... :Incazzatissimo::Arrabbiato:TestateSulMuro), ma anche così hai tutta la mia stima! cappello_saluta (e dirai: ammè, chemmefrega? :CheGoduria:)
 

Marius44

VBA Expert
Moderatore
Expert
9 Settembre 2015
5.935
83
76
Catania
Excel2010
175
No, Enrico, ti sbagli.
Ricevere complimenti, e specie da uno come te, mi inorgoglisce.

Avevo scritto che avrei cercato di apportare dei miglioramenti ma ... i nipotini e il Forum mi hanno impegnato molto.

Grazie ancora e ciao,
Mario
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
21.732
1.713
66
Napoli
2019 Pro Plus
444
Di nulla.

Inoltre, in quanto nuovo, ti invito a:

1) leggere regolamento e annunci dello staff
2) presentarti nella sez. "Presentati qui"
 
Stato
Chiusa ad ulteriori risposte.

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!