Bonjour,
Ce sujet fait suite aux divers messages que j'ai postés dans le but de créer et rendre interactive sous Excel une carte d'une région de France initiallement au format SVG (cf. 1, 2 et 3). Je me suis servi pour cela du tuto Dessiner une carte de France avec les fonctions de dessins de formes libres.
La carte créée, baptisée "CarteBasRhin", est composée de nombreuses formes libres (les villes) regroupées ensembles. Chaque forme se rapporte à une ligne d'un tableau composé de 500 lignes (une ligne par ville) environ et de 3 colonnes : l'identifiant (le code postal à peu de choses près), le nom de la ville, et une valeur associée.
Ma carte est correctement créée et je peux colorier presque chacune des formes libres en fonction de cette valeur associée grâce à une macro.
Je dispose également d'une macro nommée "Carte_Click" me permettant, lorsque l'utilisateur clique sur une ville particulière, de colorer la forme libre d'une autre couleur pour mieux la repérer par la suite et d'afficher les infos relatives à cette ville dans une zone de texte "info", du style :
Vous avez cliqué sur la ville : Ville N (ID XXXX)
Le CA de cette ville est : 568753 k€
Comme il n'est pas toujours aisé de connaître la position précise d'une ville sur ma carte, je souhaiterai ajouter une zone de liste baptisée "Select_Commune" listant le nom des villes et me permettant également de repérer la ville en la colorant sur la carte et d'afficher les infos relatives à cette ville dans "info".
Pour faire bien, il faudrait que en cliquant sur la carte, la zone de liste "Select_Commune" affiche aussi le nom de la ville correspondante.
J'ai tenté plusieurs techniques que j'ai trouvées au cours de mes recherches sur le web, mais rien n'a fonctionné jusqu'à présent.
Une idée pour faire cette zone de liste ?
Pour information :
* Ma carte et mes données sont sur la seule feuille de mon fichier : "CA"
* Voici la macro Carte_Click du module "Carte_Click" utilisée lorsque je clique sur la carte :
* Pour remplir la zone de liste, voici la macro du classeur (l'objet nommé par défaut "ThisWorkbook") :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Sub Carte_Click() ' Dim oSheet As Excel.Worksheet ' Feuille Dim shpInfo As Shape Dim loShape As Shape ' Forme Dim strInfo, villeNum, villeNom As String Dim i, villeTableur As Integer Set oSheet = ThisWorkbook.Sheets("CA") Set shpInfo = oSheet.Shapes("info") 'Récupère le code de la ville villeNum = Application.Caller 'Recherche la position du code de la ville dans le tableur et en récupère le nom i = 1 Do i = i + 1 If Range("A" & i).Value = Application.Caller Then villeTableur = i villeNom = Range("B" & i).Value i = 535 End If Loop Until i > 534 'Affiche les nom et code de la ville shpInfo.Select strInfo = "Vous avez cliqué sur la ville : " & Chr(12) & villeNom & " (" & villeNum & ")" & vbNewLine & "xxx" Selection.Characters.Text = strInfo ' Parcourt les villes de la carte pour mettre en transparence la ville sélectionnée For Each loShape In oSheet.Shapes("CarteBasRhin").GroupItems If loShape.Name = Application.Caller Then loShape.Fill.Transparency = 0.6 Else loShape.Fill.Transparency = 0# End If Next 'Range("A" & depTableur & ":D" & depTableur).Select End Sub
J'avais essayé de remplir automatiquement la zone de liste mais ça n'a pas fonctionné, donc je la remplie en rentrant directement la plage maintenant. Je l'ai également mis à tout hasard quelqu'un trouve aussi une solution à ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Option Explicit ' Nettoyage puis création de la liste de communes dans la liste déroulante "Select_Commune" (ref. : http://www.lesite.net/forum/affich-1266881-liste-deroulante-excel-vba#breadScrumb) '-------------------------------------------------------------------------------- ' Déclenchement de la procédure à l'ouverture du classeur '-------------------------------------------------------------------------------- Private Sub Workbook_Open() 'Dim oSheet As Excel.Worksheet ' Feuille 'Dim lLine As Long ' Numéro de ligne ' Feuille contenant la carte 'Set oSheet = ThisWorkbook.Sheets("CA") 'oSheet.Select_Commune.Clear 'For lLine = oSheet.UsedRange.Row + 1 To oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count ' oSheet.Select_Commune.AddItem Row.Cells(1, 2).Value & " - " & Row.Cells(1, 1).Value 'Next ThisWorkbook.Sheets("CA").Select_Commune.ListFillRange = "B2:B529" End Sub
Partager