IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème pour la création d'une carte sous Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut Problème pour la création d'une carte sous Excel
    Bonjour,

    Je fais suite à mes précédents messages ici puis ici.

    Je cherche à créer une carte sous Excel en suivant le tuto Dessiner une carte de France avec les fonctions de dessins de formes libres mais en utilisant ma propre carte que j'ai créée sous Inkscape.

    J'arrive à correctement ouvrir le fichier svg sous Excel 2010 et j'ai légèrement modifié la macro du tuto (elle ne tient plus compte du nom de la feuille Excel ni du nombre de lignes à présent). Le problème est, que ce soit avec ma macro ou la macro du tuto, je tombe sur une erreur d'exécution 1004 avec l'explication "Le groupage est désactivé pour les formes sélectionnées", le débogage pointant sur la ligne With oSheet.Shapes.Range(lShapeRange).Group.

    Pour information, les chemins vectoriels sur le fichier Excel n'ont pas exactement la même structure que pour l'image du tuto pour je ne sais quelle raison. Je les ai donc légèrement modifiés pour les rendre compatibles avec la macro : j'ai remplacé "M" en "M " (avec l'espace en plus), "L" en " L ", et "Z" (z en majuscule) en " z" (z en minuscule).

    J'ai placé en pièces jointes l'image et le fichier Excel modifié comme je l'ai indiqué plus haut.

    Quelqu'un peut-il me venir en aide pour résoudre ce problème ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut
    Bon, mon message n'a pas trop eu de succès. Je vais tenter de faire plus clair.

    Voici la macro que j'utilise, avec en gras leséléments que j'ai ajouté ou modifié par rapport à la macro de départ :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Explicit
    
    
    '---------------------------------------------------------------------------------------------------------
    ' Importation du fichier SVG des communes et création des formes libres
    '---------------------------------------------------------------------------------------------------------
    Function CreateShapes()
    Dim oSheet As Excel.Worksheet ' Feuille de travail
    Dim NbLignes As Integer ' Nombre total de lignes à traiter
    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 = ActiveSheet
    'comptage du nombre de lignes sur cette feuille
    NbLignes = oSheet.UsedRange.Rows.Count
    ' Parcourt la feuille des données
    For lLine = 1 To NbLignes
        ' 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 la commune courante 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
                ' Convertit 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 = "CarteBasRhin"
        .ScaleHeight 0.05, msoFalse
        .ScaleWidth 0.05, msoFalse
        .LockAspectRatio = msoTrue
    End With
    End Function
    Si je reprends la structure du tuto, voici un aperçu du fichier SVG :
    <g
         inkscape:label="Carte des communes du Bas-Rhin"
         inkscape:groupmode="layer"
         id="Carte_BasRhin"><path
           inkscape:label="Geispolsheim"
           inkscape:connector-curvature="0"
           d="M606.60457 1003.5399L613.25546 1020.9179L610.67467 1028.3424L614.16328 1031.426L592.2238 1031.5282L592.2382 1038.3053L582.5003 1042.7935L570.03674 1051.0566L563.17578 1064.8739L560.7376 1067.6864L546.71164 1072.8097L547.73106 1068.959L548.10164 1057.5194L556.95443 1043.6876L550.38383 1025.6479L561.06939 1020.2326L574.13463 1011.0553L576.0259 996.11433L579.72012 994.00487L583.67916 995.09493L599.61586 988.43187L602.89497 1003.4183Z"
           style="fill:none;stroke:#000000;stroke-width:0.3122628;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
           id="Commune67152" /><path
           inkscape:label="Offendorf"
           inkscape:connector-curvature="0"
           id="Commune67356"
           style="fill:none;stroke:#000000;stroke-width:0.3122628;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
           d="M775.79774 771.68891L778.14894 760.13872L784.19797 755.14745L788.76601 755.89021L795.23561 752.71422L802.3039 761.55678L802.2631 765.83326L771.98459 809.39707L765.48805 805.38625L760.56863 794.76354L731.85672 789.53373L727.02926 783.95369L728.17069 781.58033L750.14073 781.51383L772.24965 774.34015Z" />
    Et voici à présent les 2 premières lignes de mon fichier Excel sur lesquels je souhaiterai appliquer la macro :
    M 606.60457 1003.5399 L 613.25546 1020.9179 L 610.67467 1028.3424 L 614.16328 1031.426 L 592.2238 1031.5282 L 592.2382 1038.3053 L 582.5003 1042.7935 L 570.03674 1051.0566 L 563.17578 1064.8739 L 560.7376 1067.6864 L 546.71164 1072.8097 L 547.73106 1068.959 L 548.10164 1057.5194 L 556.95443 1043.6876 L 550.38383 1025.6479 L 561.06939 1020.2326 L 574.13463 1011.0553 L 576.0259 996.11433 L 579.72012 994.00487 L 583.67916 995.09493 L 599.61586 988.43187 L 602.89497 1003.4183 z	Commune67152	Geispolsheim
    M 775.79774 771.68891 L 778.14894 760.13872 L 784.19797 755.14745 L 788.76601 755.89021 L 795.23561 752.71422 L 802.3039 761.55678 L 802.2631 765.83326 L 771.98459 809.39707 L 765.48805 805.38625 L 760.56863 794.76354 L 731.85672 789.53373 L 727.02926 783.95369 L 728.17069 781.58033 L 750.14073 781.51383 L 772.24965 774.34015 z	Commune67356	Offendorf
    Comme je l'ai indiqué plus haut, que ce soit avec ma macro ou la macro du tuto, je tombe sur une erreur d'exécution 1004 avec l'explication "Le groupage est désactivé pour les formes sélectionnées", le débogage pointant sur la ligne With oSheet.Shapes.Range(lShapeRange).Group. (j'ai indiqué la ligne en rouge sur la macro).

    Est-ce que quelqu'un a une idée du problème ?

  3. #3
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    je n'ai pas cette erreur sur 2003

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut
    C'est dingue ! Ca marche également chez moi si je recopie ce que j'ai écrit sur un nouveau fichier Excel

    Bon, je refais 2-3 tests pour voir si je m'en sors

    Bon, c'est incompréhensible mais ça semble marcher à présent
    J'ai tout de même observé qu'appliquer 2 fois d'affilés la macro entrainent l'erreur que j'ai mentionné. Et pourtant, je l'aurais remarqué si c'était arrivé avant ! (Dire que ça faisait plusieurs jours que je bloquais sur ce point )

    Bref, ça marche (c'est l'essentiel)... ou presque. J'ai en effet observé une petite imperfection : il semble manquer un segment sur toutes les formes, qui ne sont donc pas fermées. Mais cela ne m'empêche pas de leur appliquer une couleur de remplissage.

    Une seule forme échappe à cette règle et apparait avec un contour bleu de largeur 2 points et un remplissage en bleu plus clair, tandis que les autres formes apparaissent avec une largeur de 0.75 pts sans remplissage.
    Voici la ligne en question :
    M 799.44487 718.31761 L 810.71214 721.1661 L 811.74544 724.74393 L 808.1961 725.24125 L 802.59691 730.85041 L 802.3039 761.55678 L 795.23561 752.71422 L 788.76601 755.89021 L 788.92905 752.24795 L 786.2766 745.46414 L 764.67777 738.61931 L 763.53653 734.90664 L 751.77733 728.38588 L 766.86291 705.54283 L 768.86743 706.89994 L 787.84575 702.37012 L 790.7067 700.27296 L 794.29324 705.94238 L 799.44487 718.31764 z	Commune67106	Drusenheim
    
    Ce que je remarque, c'est que le point de départ et le point d'arrivée sont quasiment confondus, ce qui n'est apparemment pas le cas pour les autres points (je n'ai pas tout vérifié non plus, mais ça semble être le cas). Pourtant, toutes les formes sont correctement fermées sur Inkscape.

    Quelqu'un a une idée du problème ?

  5. #5
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Citation Envoyé par SkyCorp Voir le message
    J'ai tout de même observé qu'appliquer 2 fois d'affilés la macro entrainent l'erreur que j'ai mentionné.
    sûrement que des formes existent déjàavec le même nom donc ça plante

    Citation Envoyé par SkyCorp Voir le message
    il semble manquer un segment sur toutes les formes, qui ne sont donc pas fermées.
    le Z demande la fermeture de le forme
    il faudrait conserver le position du premier point (quand M) et fermer la forme à la fin (quand Z)

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    sûrement que des formes existent déjàavec le même nom donc ça plante
    C'est mon avis également. Je ne comprend pas ce que j'avais pu louper avant.

    Citation Envoyé par Arkham46 Voir le message
    le Z demande la fermeture de le forme
    il faudrait conserver le position du premier point (quand M) et fermer la forme à la fin (quand Z)
    Il faudrait que je recopie à chaque fois le premier point à la fin du chemin, juste avant le Z ? Si oui, je ne comprend pas trop pourquoi Inkscape n'a pas configuré mes chemins correctement (sauf pour une forme).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Création d'une matrice sous Excel, pb Formule
    Par logiclogic dans le forum Excel
    Réponses: 5
    Dernier message: 30/08/2010, 09h50
  2. Réponses: 0
    Dernier message: 29/07/2009, 11h13
  3. Réponses: 3
    Dernier message: 05/10/2008, 02h53
  4. Création d'une carte géographqiue pour un jeu.
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/03/2007, 12h26
  5. Problème pour la création d'une fonction
    Par jipé95 dans le forum C
    Réponses: 5
    Dernier message: 10/12/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo