Dessiner un fond de carte dans Excel

Dans un précédent article, nous avons vu comment créer une carte choroplèthe en important un fichier EMF comme dessin dans Excel.
Dans cet article, nous allons voir une autre méthode qui permet d’aboutir au même résultat. Nous allons dessiner la carte, région après région. En réalité, nous allons utiliser une procédure VBA qui va se charger du dessin. Voyons tout cela en détails.


 

Trouver une carte au format vectoriel

Le principe est le même que lorsque nous avions importé la carte, il nous faut un fichier au format SVG pour dessiner la carte.

Nous allons donc partir du même exemple que la dernière fois : une carte des départements français. Et comme la dernière fois, nous allons télécharger une image au format SVG disponible sur Wikipédia.

Carte departements Wikipedia

Comme nous l’avions expliqué la dernière fois, SVG est un format vectoriel. Le fichier est organisé en plusieurs couches ou calques, dont celui dessinant les départements. Ce calque est donc composé de diverses formes, chacune d’elles ayant des coordonnées bien précises et correspondant à un département.

Ces coordonnées ne sont pas visibles mais nous verrons ci-dessous comment les récupérer. Surtout, elles vont nous être très utiles pour faire un dessin précis des contours de chaque département.
Et c’est une macro qui se chargera de les exploiter. Nous n’utiliserons pas nos talents de dessinateurs aujourd’hui !

 

Récupérer les coordonnées des régions

Ouvrir un fichier SVG avec Excel

Pour récupérer ces coordonnées, nous utilisons tout simplement Excel, et nous ouvrons ce fichier SVG. Nous passons par le menu Ouvrir puis nous sélectionnons tous les fichiers pour afficher ceux qui ne sont pas prévus par défaut.
Après avoir sélectionné le fichier SVG, Excel nous renvoie plusieurs messages pour nous avertir de problèmes, notamment de sécurité, liés au format. Validons-les, ci-dessous, le premier d’entre eux.

Message avertissement ouverture format SVG Excel

Excel propose ensuite de l’ouvrir au format XML. On sélectionne la première option, En tant que tableau XML.

Ouverture format SVG fichier XML

Enfin, dernier message que l’on valide également pour accepter la création d’un schéma avec les données source.

Validation format donnees SVG XML

Excel ouvre alors un nouveau fichier contenant un tableau et de nombreuses données.

Contenu tableau donnees SVG Excel
 

Identifier et comprendre les coordonnées des formes

Les premières colonnes contiennent les informations générales sur le fichier et sont donc communes à toutes les lignes.
Nous allons explorer ces données pour trouver celles qui nous intéressent. En se déplaçant vers la droite, on trouve des informations concernant le ‘layer10’, il s’agit du calque contenant les départements. On peut filtrer sur cette valeur pour masquer les lignes du fond de carte par exemple qui ne nous intéressent pas.

Identification calques donnees SVG Excel

Le filtre nous donne 96 lignes comme le nombre de départements en France métropolitaine. C’est plutôt rassurant sur le fait que ce calque contient bien les informations que nous cherchons.

Filtre calque donnees SVG Excel

En continuant vers la droite, on trouve ce dont nous avons réellement besoin :

  • La liste des départements avec un nom sous la forme ‘departement’ suivi du numéro, pour identifier clairement auquel correspond chaque ligne
  • Une cellule avec des séries de nombres et quelques lettres, située juste à gauche de la précédente. Ce sont les coordonnées des formes représentant ces départements sur la carte.

Noms coordonnees formes SVG Excel

Bien que peu parlantes, les coordonnées sont structurées de manière stricte et vont pouvoir être traitées via une procédure VBA. Voici quelques explications sur les valeurs trouvées dans ce champ :

  • Les coordonnées vont par paire et désignent un point sur la feuille de calcul. Elles sont représentées par un nombre décimal avec un séparateur point, la virgule marque la séparation entre les deux coordonnées d’un même point.
  • La lettre ‘M’ signale le début d’une nouvelle forme à dessiner, on la trouve donc au début de chaque ligne. Elle est suivie par les coordonnées d’un seul point où commence le tracé de la forme.
  • La lettre ‘L’ signale le tracé d’une ligne droite. Elle est suivie des coordonnées du point d’arrivée, le point de départ étant l’arrivée du segment précédent.
  • La lettre ‘C’ signale le tracé d’une ligne courbe. Elle est suivie par les coordonnées de 3 points : départ, inflexion et arrivée.
  • La lettre ‘z’ signale la fin du tracé d’une forme.

 

Utiliser les coordonnées dans une procédure VBA

Créer des formes libres en VBA

Comme lors de l’import d’un fichier au format EMF, l’objectif est d’obtenir des formes libres. Nous l’avons vu en première partie, nous n’allons évidemment pas dessiner manuellement ces formes.
Mais nous pouvons essayer d’enregistrer une macro et de dessiner une forme libre pour vérifier les commandes utilisées par cette fonctionnalité.

Procedure VBA dessin segments forme libre

Comme nous le voyons ci-dessus, la 1ère ligne d’initialisation prend les coordonnées d’un point de départ. Cela correspond à ce qu’on trouve après la lettre ‘M’ dans les coordonnées.
La création d’une ligne droite msoSegmentLine requiert les coordonnées d’un point, disponibles après la lettre ‘L’.
La création d’une ligne courbe msoSegmentCurve requiert les coordonnées de 3 points, disponibles après la lettre ‘C’.
Enfin, la commande de fin permet de convertir en forme l’objet créé.

Procedure VBA dessin conversion forme libre

Nous disposons donc de tout ce qui est nécessaire pour créer des formes libres. Voyons comment retraiter les coordonnées.

 

Exploiter les données du fichier SVG

Téléchargez le fichier en cliquant ici ou sur le bouton ci-dessous pour retrouver le code que nous allons détailler ci-dessous.

logo telecharger fichier

Dans ce fichier, nous avons un tableau avec la liste des coordonnées, le numéro du département et son nom à titre d’information.

Liste coordonnees formes libres dessin fond carte procedure VBA

La procédure VBA parcourt ce tableau et pour chaque ligne effectue les opérations suivantes :

  • Décomposition des coordonnées pour identification de chaque lettre et de chaque point
  • Interprétation des coordonnées : création d’une forme, ajout d’un segment droit ou courbe, clôture de la forme libre
  • Lorsqu’une forme est terminée, le numéro de département lui est attribué comme nom. C’est utile pour l’identifier facilement dans une prochaine procédure VBA par exemple.
  • L’ensemble des formes sont regroupées au sein d’un groupe portant le nom de la carte entré au-dessus du tableau. C’est pratique pour déplacer ou redimensionner toute la carte.

 

Adapter et réutiliser le fichier avec d’autres cartes

Retrouvez les détails du code dans le module 1, vous pouvez modifier ou réutiliser cette procédure comme vous le souhaitez.
Elle fait appel à la feuille de calcul Carte, au champ NomCarte et au tableau lstCoord. Prenez soin de modifier la procédure ou de les recréer dans votre fichier si vous déplacez le code.
Consultez notre tutoriel pour savoir comment insérer ce code dans un autre classeur.

Vous pouvez bien sûr modifier la liste des régions à tracer : les coordonnées et le code sont nécessaires au bon fonctionnement. Dans le fichier à télécharger, nous disposons de la liste des départements français. Il ne reste qu’à cliquer sur le bouton ‘Dessiner la carte’ pour la voir apparaître en une fraction de seconde à l’écran.

Resultat dessin forme libre procedure VBA

Elle est dessinée avec les paramètres de contour et de remplissage par défaut. On peut sélectionner le groupe entier et modifier le contour en prenant le plus fin et un remplissage blanc pour obtenir un fond de carte classique.

Mise en forme dessin fond carte procedure VBA

Il y a quelques contraintes à respecter pour que cela puisse fonctionner.
Toutes les coordonnées doivent être positives. Le point 0, 0 est situé dans le coin en haut à gauche de la feuille. Aucune valeur négative ne sera donc acceptée par Excel.
Certains formats SVG présentent des coordonnées correspondant au décalage par rapport au point de départ pour tracer les segments. Elles ne peuvent pas non plus être interprétées par Excel.
Si vous voulez dessiner une carte à partir des coordonnées, il faudra dans un premier temps la modifier, en la recadrant par exemple, avec un logiciel de dessin vectoriel comme Inkscape que nous avons présenté dans le précédent article.

 

Voici à nouveau le lien pour télécharger le fichier contenant la procédure de dessin du fond de carte. Réutilisez-le avec les coordonnées que vous voulez pour tracer vos propres cartes.

C’est une méthode alternative à la première technique que nous avions vue. Utilisez la solution avec laquelle vous êtes le plus à l’aise. Dans un prochain article, nous passerons en revue les avantages de chaque méthode et nous verrons dans quels cas il convient de les utiliser.
N’hésitez pas à poser vos questions en commentaires.

 

Abonnez-vous à la newsletter

Illustration couverture ebook 100 trucs et astuces pour Excel-ler au travail

Et recevez gratuitement l'ebook 100 trucs et astuces pour Excel-ler au travail (5€ sur Amazon)

Votre adresse mail ne sera pas communiquée et vous pourrez vous désabonner à tout moment.

Taggé , , , .Mettre en favori le Permaliens.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.