Projet:Communes de France/VBA/Composition d'un canton
La présente page s'inscrit dans le cadre d'un corpus d'applications visant à acquérir des notions de VBA pour faciliter l'amélioration des articles relevant des projet Communes de France ou Intercommunalités de France. L'utilisateur pressé pourra aller directement récupérer le fichier et l'utiliser.
L'objectif est ici de mettre en forme WP une liste pour la transformer en tableau en utilisant le modèle {{Tableau Liste commune de France 2}}
Résultat attendu
modifierExemple pour le canton de Beaugency.
Le code WP construit par le bot sera le suivant
{{Tableau Liste commune de France 2 | charte = canton | commune 1 = Baccon | commune 2 = Baule | bureau = Beaugency | commune 4 = Cléry-Saint-André | commune 5 = Cravant (Loiret) | commune 6 = Dry (Loiret) | commune 7 = Jouy-le-Potier | commune 8 = Lailly-en-Val | commune 9 = Mareau-aux-Prés | commune 10 = Messas | commune 11 = Mézières-lez-Cléry | commune 12 = Tavers | commune 13 = Villorceau }}
Ce qui donnera l'affichage suivant :
Données utilisées
modifierDonnées de base
modifierAttention. La table d'appartenance des communes (ici) ne suffit dès lors plus. Il manque des données. Il faut donc d'abord définir les données que l'on veut puis créer la macro. Dans un premier temps, chaque élément de ligne du code ci-dessus sera mis dans une cellule de la feuille LISTE de notre classeur, puis dans un deuxième temps, on mettra un bouton qui récupèrera en mémoire tampon tout le code. Il n'y aura plus qu'à le copier à la main au bon endroit dans l'article en question (si celui-ci n'est pas à jour - il ne s'agit que d'un exercice).
Données complémentaires
modifierNous disposons comme données de départ la liste d'appartenance des communes, il nous manque donc, dans le cas présent, les noms wikifiés des communes et les bureaux centralisateurs.
L'information relative aux bureaux centralisateurs peut être trouvée dans la page définissant le Code officiel géographique (ici pour le COG au 1er janvier 2020) en deux endroits :
- dans le tableau des cantons. Télécharger la liste des cantons en .csv. Le fichier .csv peut être ouvert directement dans Excel. Pour avoir une feuille de calcule exploitable, il suffit de faire Données/convertir/délimité/virgule et toutes les données sont rangées proprement en colonnes.
- dans le tableau des communes.
Pour faire simple, toutes les bases (communes, cantons, EPCI, arrondissements, etc) au 1er janvier 2020 ont été regroupées dans un seul fichier Bases.xls. Il est téléchargeable ici
Procédure et code
modifierProcédure
modifierPour réaliser le code, la procédure :
- copier les feuilles COM2020 et CANTON du fichier Bases.xls dans un nouveau fichier.
- créer une feuille code
- Définir un Nom pour la plage de données de la feuille canton (Nom/Définir)
- Réserver une cellule de la feuille Code pour la saisie du code du canton
- Récupérer le nom du canton et le code du bureau centralisateur via la fonction RECHERCHEV et la zone nom
- créer une nouvelle macro vierge Compo_canton
- ajouter un bouton sur lequel on affecte la macro en question
- Entrer le code ci-dessous
Code
modifierSub Compo_canton() Ligne = 13 ' numérotation de la ligne du code n = 0 ' compte ne nombre de communes de la division CodeCanton = Sheets("Code").Cells(4, 2) ' récupère en variable le code du canton Range("E14:L44").Select ' efface ce qui n'est pas nécessaire Selection.Clear For i = 7 To 34976 ' routine balyant toutes les communes If Sheets("COM2020").Cells(i, 14) = CodeCanton Then ' ne retient que les communes dans le canton choisi Ligne = Ligne + 1 n = n + 1 Sheets("Code").Cells(Ligne, 7) = Sheets("COM2020").Cells(i, 4) ' copie le nom WP de la commune If Sheets("COM2020").Cells(i, 2) = Sheets("Code").Cells(9, 2) Then ' test si la commune est bureau centralisateur Sheets("Code").Cells(Ligne, 6) = " | bureau = " ' si oui, le texte est bureau Else Sheets("Code").Cells(Ligne, 6) = " | commune " & n & " = " ' si non, le texte est commune End If End If Next i For i = 14 To Ligne ' ajout de concaténation pour former la ligne de code Sheets("Code").Cells(i, 5) = "=RC[1]&RC[2]" Next i Ligne = Ligne + 1 Sheets("Code").Cells(Ligne, 5) = "}}" ' ajoute la fin de tableau Range("E12:E" & Ligne).Select Selection.Copy End Sub
Autre méthode
modifierPrincipe
modifierCeci était un exercice. On peut atteindre le même résultat en utilisant le modèle {{Composition Division de France}} avec le code suivant :
{{Composition Division de France | charte = canton | canton = Canton de Beaugency }}
Ce qui donne :
Nom | Code Insee |
Intercommunalité | Superficie (km2) |
Population (dernière pop. légale) |
Densité (hab./km2) |
Modifier |
---|---|---|---|---|---|---|
Beaugency (bureau centralisateur) |
45028 | CC des Terres du Val de Loire | 16,45 | 7 598 (2021) | 462 | |
Baccon | 45019 | CC des Terres du Val de Loire | 33,02 | 647 (2021) | 20 | |
Baule | 45024 | CC des Terres du Val de Loire | 12,11 | 2 025 (2021) | 167 | |
Cléry-Saint-André | 45098 | CC des Terres du Val de Loire | 18,13 | 3 520 (2021) | 194 | |
Cravant | 45116 | CC des Terres du Val de Loire | 33,91 | 946 (2021) | 28 | |
Dry | 45130 | CC des Terres du Val de Loire | 22,64 | 1 411 (2021) | 62 | |
Jouy-le-Potier | 45175 | CC des Portes de Sologne | 50,40 | 1 567 (2021) | 31 | |
Lailly-en-Val | 45179 | CC des Terres du Val de Loire | 45,61 | 3 098 (2021) | 68 | |
Mareau-aux-Prés | 45196 | CC des Terres du Val de Loire | 13,34 | 1 629 (2021) | 122 | |
Messas | 45202 | CC des Terres du Val de Loire | 5,21 | 1 013 (2021) | 194 | |
Mézières-lez-Cléry | 45204 | CC des Terres du Val de Loire | 27,01 | 852 (2021) | 32 | |
Tavers | 45317 | CC des Terres du Val de Loire | 22,62 | 1 344 (2021) | 59 | |
Villorceau | 45344 | CC des Terres du Val de Loire | 9,50 | 1 074 (2021) | 113 | |
Canton de Beaugency | 4501 | 309,95 | 26 724 (2021) | 86 |
On notera que ce modèle permet d'obtenir un titre plus explicite et une ligne de synthèse sur la canton que l'on n'a pas avec le modèle {{Tableau Liste commune de France 2}}.
Il mériterait d'être déployé sur tous les articles de cantons, hormis ceux qui sont des fractions cantonales (voir pb ci-après).
Bot
modifierIl s'agit ici d'un traitement élémentaire. Le code WP peut être obtenu directement dans la feuille Excel. Le code VBA consiste alors simplement à copier ce code WP.
Cas des fractions cantonales
modifierUtilisation du code
modifierLes puristes se seront aperçus que le code ne permet pas d'afficher les cantons qui sont des fractions cantonales, à savoir des parties de territoires d'une commune (comme par exemple canton d'Orléans-1, code 4513, et entièrement intégré dans Orléans), tout simplement parce que le modèle utilisé ({{Tableau Liste commune de France 2}}) liste des communes entières et n'est donc pas adapté au problème. Pour un canton donné, le code lui-même parcourt la base des communes et récupère le nom de la commune lorsque le code canton correspond au code du canton recherché. Mais une commune comportant une ou des fractions cantonales est codée avec un suffixe (deux derniers chiffres du code canton ) supérieur à 80 (par ex 4599 pour la commune d'Orléans). Le bot ne peut donc pas récupérer le nom de la commune par cette méthode (puisque, dans notre exemple, il ne trouvera à aucun endroit de la base des communes le code 4513).
Le code ne peut donc être utilisé que pour les cantons comportant des nombres entiers de communes.
Utilisation du module:Composition Division de France
modifierLe module en question a par contre été pensé pour prendre en compte ce problème.
{{Composition Division de France | charte = canton | canton = Canton d'Orléans-1 }}
Ce qui donne :
Nom | Code Insee |
Intercommunalité | Superficie (km2) |
Population (dernière pop. légale) |
Densité (hab./km2) |
Modifier |
---|---|---|---|---|---|---|
Orléans (bureau centralisateur) |
45234 | Orléans Métropole | 27,48 | Fraction : 24 171 (2021) Commune : 116 617 (2021) |
4 244 | |
Canton d'Orléans-1 | 4513 | 24 171 (2021) |
Fichier
modifierSinon, plus simplement … récupérer le tableau avec le fichier Excel Code-Compo-canton.xls avec ce lien. Entrer un code canton, cliquer sur le bouton voulu et copier dans une page brouillon (pour voir ce que ça donne) ou dans la page du canton concerné (si la composition est erronée).
Méthode 1 (modèle Tableau Liste)
modifierUtiliser le premier bouton (macro Compo_canton).
Méthode 2 (modèle Composition Division)
modifierUtiliser le deuxième bouton (macro Compo2).