Dessiner une carte sous Excel

d0do

XLDnaute Nouveau
Bonjour cher forum !!!

J'aimerais illustrer sous excel des statistiques par commune sur une carte regroupant plusieurs communes (en les colorisant par exemple). J'ai trouvé un site expliquant comment dessiner une carte sous Excel : OFFICE : Dessiner une carte de france avec les fonctions de dessins
J'ai réutilisé le code illustré sur cette page et j'ai trouvé le fichier .svg correspondant aux coordonnées des communes qui m'intéressent. J'ai introduit le tout dans Excel. Cependant lorsque je lance la fonction ça ne va pas.
J'ai alors essayé avec moins de communes et en simplifiant leurs coordonnées. Cela fonctionne.
Il semblerait donc que les coordonnées utilisées pour déterminer les contours de mes communes soient trop nombreuses. Les coordonnées d'une seule commune sont jusqu'à vingt fois plus nombreuses que celles utilisées pour les départements (exemple du lien).
Existe-t-il :
- des erreurs dans le code que j'utilise ?
- un autre moyen de faire ça sous Excel?
- ou éventuellement, un moyen efficace pour simplifier le code (cela voudra dire perte de détails sur la future carte, mais c'est mieux que... pas de carte)

Un grand merci d'avance,

Damien

Le code :

Option Explicit

Function CreateShapes3()
Dim oSheet As Excel.Worksheet ' Feuille de travail
Dim lLine As Long ' Compteur de lignes
Dim lCoord As String ' Coordonnées de la commune
Dim lCoordArray As Variant ' Coordonnées de la commune en tableau
Dim lCptCoord As Long ' Compteur pour parcourir les coordonnées
Dim lNbShape As Long ' Nombre de formes créées
Dim lShapeRange() ' Tableaux des noms de formes créées pour fonction Group
Dim loFreeformBuilder As Excel.FreeformBuilder 'Constructeur de forme libre

' Feuille de données
Set oSheet = Sheets("Communes")
' Parcours la feuille des données
For lLine = 2 To 71
' Coordonnées
lCoord = oSheet.Cells(lLine, 1)
' Mise en forme des coordonnées
lCoord = Replace(lCoord, ",", " ")
' Crée un tableau à partir de la chaîne de caractères
lCoordArray = Split(lCoord, " ")
' Initialise le compteur
lCptCoord = LBound(lCoordArray)
Do
Select Case lCoordArray(lCptCoord)
Case "M" ' Point de départ
' Crée un constructeur de "forme libre" pour le département courant sur la feuille oSheet
Set loFreeformBuilder = oSheet.Shapes.BuildFreeform(msoEditingCorner, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10)
lCptCoord = lCptCoord + 3
Case "L" ' Segment
loFreeformBuilder.AddNodes msoSegmentLine, msoEditingAuto, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10
lCptCoord = lCptCoord + 3
Case "C" ' Courbe
loFreeformBuilder.AddNodes msoSegmentCurve, msoEditingCorner, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10, Val(lCoordArray(lCptCoord + 3)) * 10, Val(lCoordArray(lCptCoord + 4)) * 10, Val(lCoordArray(lCptCoord + 5)) * 10, Val(lCoordArray(lCptCoord + 6)) * 10
lCptCoord = lCptCoord + 7
Case "z" ' Fin de la forme
' Converti le Constructeur en Forme
With loFreeformBuilder.ConvertToShape
' Identifiant de la commune
.Name = oSheet.Cells(lLine, 2)
' Incrémente le nombre de formes créées
lNbShape = lNbShape + 1
' Redimensionne le tableau de formes créées
ReDim Preserve lShapeRange(1 To lNbShape)
' Ajoute le nom de la forme au tableau pour groupement
lShapeRange(lNbShape) = .Name
End With
' Libère l'objet constructeur
Set loFreeformBuilder = Nothing
' Sort de la boucle de traitement des coordonnées
Exit Do
End Select
Loop
Next
' Groupe les communes dans une forme

With oSheet.Shapes.Range(lShapeRange).Group
.Name = "CarteCommunes"
.ScaleHeight 0.05, msoFalse
.ScaleWidth 0.05, msoFalse
.LockAspectRatio = msoTrue
End With

End Function
 

Pièces jointes

  • Province de Liège.xlsm
    270.2 KB · Affichages: 251

kiki29

XLDnaute Barbatruc
Re : Dessiner une carte sous Excel

Salut, pour que cela fonctionne il convient d'ajouter un On Error Resume Next , enfin c'est comme cela que j'avais résolu les problèmes des exemples donnés sur le site que tu cites.

En PJ une version XLS
Pour info sur le format SVG Scalable Vector Graphics (SVG) 1.1 (Second Edition)
 

Pièces jointes

  • Province de Liège.zip
    283.6 KB · Affichages: 253
Dernière édition:

orson17

XLDnaute Nouveau
Re : Dessiner une carte sous Excel

Bonjour, suite à la lecture de ce post j'essaie de créer dans excel une carte de parcelles agricoles que je souhaite colorier en fonction de ce qui y est cultivé. Je n'ai que excel 2000, excel starter 2010 et inskape. Je ne peux essayer la version de démo de begraphic qui est indisponible au téléchargement. Ni graphicmap qui n'est que pour excel 2007 que je n'ai pas.
J'ai dessiné 7 parcelles sous inskape pour me faire la main mais lorsque que j'ouvre mon fichier svg crée avec inskape je n'ai au début que les M & Z , aprés lecture j'ai découvert qu'il fallait modifier une option d'inskape (extension rendre les segments droits) pour avoir le L qui apparait. Je n'ai pas de C dans mon fichier.

en lançant la procédure j'obtient une erreur "l'indice n'appartient pas à la selection" de quoi s'agit il? Y a t'il quelqu'un qui est déjà passé par ce probléme merci.
 

Pièces jointes

  • essai dessin parcelles.xls
    36.5 KB · Affichages: 140

Discussions similaires

Réponses
31
Affichages
2 K
Réponses
0
Affichages
1 K

Statistiques des forums

Discussions
311 720
Messages
2 081 889
Membres
101 831
dernier inscrit
gillec