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

  1. #1
    Membre régulier
    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
    Points : 82
    Points
    82
    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 régulier
    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
    Points : 82
    Points
    82
    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
    Responsable Access

    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
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    je n'ai pas cette erreur sur 2003

  4. #4
    Membre régulier
    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
    Points : 82
    Points
    82
    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
    Responsable Access

    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
    Points : 14 526
    Points
    14 526
    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 régulier
    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
    Points : 82
    Points
    82
    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).

  7. #7
    Responsable Access

    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
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par SkyCorp Voir le message
    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).
    Le chemin SVG n'est pas incorrect.
    Rien ne dit que le dernier point doit être égal au premier ; c'était comme ça dans mon exemple mais c'était malheureusement un cas particulier.
    Un Z en fin de chemin demande de tracer un segment jusqu'au premier point pour fermer le chemin, ce que l'on peut faire aisément je pense.

    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
    72
    73
    74
    75
    76
    77
    78
    79
     
    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
    dim lFirstX as Double, lFirstY as Double
     
    ' 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)
                ' Garde la position du premier point
                lFirstX = Val(lCoordArray(lCptCoord + 1)) 
                lFirstY = Val(lCoordArray(lCptCoord + 2)) 
                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
                ' Ferme la forme
                loFreeformBuilder.AddNodes msoSegmentLine, msoEditingAuto, lFirstX * 10, lFirstY * 10
                lCptCoord = lCptCoord + 3
                ' 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

  8. #8
    Membre régulier
    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
    Points : 82
    Points
    82
    Par défaut
    Ca marche parfaitement !
    Merci pour tout

    Bonjour,

    Un nouveau soucis c'est présenté à moi dans la réalisation de ma carte à partir du même tuto.

    Suite à la création de ma carte, j'ai continuer à suivre le tuto en réalisant l'étape 6, "Colorier la carte". Ma carte se réalise correctement, même si le temps d'exécution sur mes 528 lignes du fichier Excel est relativement long (près de 1 minute 20).

    Là où ça se corse, c'est pour colorier directement la carte lors d'une modification, via la petite macro du tuto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    '--------------------------------------------------------------------------------
    ' Coloration de la carte sur changement dans la feuille CA
    '--------------------------------------------------------------------------------
    Private Sub Worksheet_Change(ByVal Target As Range)
    ColorMap
    End Sub
    Je ne vois aucun changement sur ma carte lorsque je modifie les valeurs, même après de longues minutes d'attente. Le nombre de lignes peut-il être à l'origine du problème ?

    Pour info, voici les 2 macros que j'ai placé dans le même module :
    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
    '--------------------------------------------------------------------------------
    ' Colore la carte en fonction de la progression du CA
    '--------------------------------------------------------------------------------
    Sub ColorMap()
    Dim oSheet As Excel.Worksheet ' Feuille
    Dim lLine As Long ' Numéro de ligne
    Dim loShape As Shape ' Forme
    Dim lColor As Long ' Couleur
    ' Feuille contenant la carte
    Set oSheet = ThisWorkbook.Sheets("CA")
    ' Désactive le remplissage de la carte
    oSheet.Shapes("CarteBasRhin").Fill.Visible = msoFalse
    ' Pour chaque ligne de CA
    For lLine = oSheet.UsedRange.Row + 1 To oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count
        ' Couleur de remplissage
        ' Rouge si CA diminue
        ' Vert si CA augmente
        If oSheet.Cells(lLine, 4) < oSheet.Cells(lLine, 3) Then
            lColor = vbRed
        Else
            lColor = vbGreen
        End If
        ' Parcours les départements de la carte
        For Each loShape In oSheet.Shapes("CarteBasRhin").GroupItems
            ' Si la forme loShape a pour nom la valeur de la première colonne (l'identifiant FR-XX)
            If loShape.Name = oSheet.Cells(lLine, 1) Then
                ' Réactive le remplissage de la forme
                loShape.Fill.Visible = True
                ' Type de remplissage = couleur unie
                loShape.Fill.Solid
                ' Pas de transparence
                loShape.Fill.Transparency = 0#
                ' Couleur de remplissage
                loShape.Fill.ForeColor.RGB = lColor
                ' La forme a été trouvée => on sort de la boucle
                Exit For
            End If
        Next
    Next
    End Sub
     
    '--------------------------------------------------------------------------------
    ' Coloration de la carte sur changement dans la feuille CA
    '--------------------------------------------------------------------------------
    Private Sub Worksheet_Change(ByVal Target As Range)
    ColorMap
    End Sub
    Donc guère de changement avec la macro du tuto (seul le nom de la carte change)

  9. #9
    Membre régulier
    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
    Points : 82
    Points
    82
    Par défaut
    J'ai résolu ce problème. J'avais fait une erreur de lecture. Il suffisait de mettre la macro non pas dans le module contenant la macro ColorMap() mais dans l'objet relatif à ma page "CA".

    Je rencontre à présent d'autres problèmes.
    L'un d'entre eux est le suivant :
    Sur ma carte, j'ai 2 objets représentant la même commune, baptisés "ville N_1" et "ville N_2"
    Dans ma liste de communes (dans les colonnes A à C de mon Excel), j'ai à présent uniquement "ville N" pour ces 2 objets.
    Pour prendre en compte ce cas particulier, j'ai légèrement modifié la macro ColorMap(), plus exactement la partie
    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
    For lLine = oSheet.UsedRange.Row + 1 To oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count
    (...)
        For Each loShape In oSheet.Shapes("CarteBasRhin").GroupItems
            ' Si la forme loShape a pour nom la valeur de la première colonne
            If loShape.Name = oSheet.Cells(lLine, 1) Then
                ' Réactive le remplissage de la forme
                loShape.Fill.Visible = True
                ' Type de remplissage = couleur unie
                loShape.Fill.Solid
                ' Pas de transparence
                loShape.Fill.Transparency = 0#
                ' Couleur de remplissage
                loShape.Fill.ForeColor.RGB = lColor
                ' La forme a été trouvée => on sort de la boucle
                Exit For
            End If
        Next
    Next
    en
    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
    For lLine = oSheet.UsedRange.Row + 1 To oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count
    (...)
        For Each loShape In oSheet.Shapes("CarteBasRhin").GroupItems
            ' Si le nom de la forme loShape contient la valeur de la première colonne
            If loShape.Name Like oSheet.Cells(lLine, 1) & "*" Then
                ' Réactive le remplissage de la forme
                loShape.Fill.Visible = True
                ' Type de remplissage = couleur unie
                loShape.Fill.Solid
                ' Pas de transparence
                loShape.Fill.Transparency = 0#
                ' Couleur de remplissage
                loShape.Fill.ForeColor.RGB = lColor
                ' La forme a été trouvée => on sort de la boucle
                Exit For
            End If
        Next
    Next
    Bref un = est devenu Like et j'ai ajouté un & "*".
    Le problème est qu'une seule des 2 formes ne se colorie.

    Une idée pour permettre le coloriage des 2 formes ?

  10. #10
    Membre régulier
    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
    Points : 82
    Points
    82
    Par défaut
    Bon, je n'ai pas eu de réponse à ma question. Peut-être parce que mon sujet traitait trop de questions.
    Pour plus de clarté, j'ai décidé de faire des sujets uniques pour chacune de mes questions.

    Je clos donc ce sujet.
    La suite ici et dans de futurs posts.

    Et un grand merci à Arkham46 pour m'avoir pas mal aider à résoudre la plupart de mes questions

+ 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