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 :

Identifier si une coordonnée GPS est dans la zone [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut Identifier si une coordonnée GPS est dans la zone
    Bonjour,

    J'aimerai savoir si une rue se trouvait dans les coordonnées d'un quartier (=périmètre d'un quartier)...
    Je pense que c'est possible puisque trouvé sur un des forums javascript (ici), mais il faudrait que ça puisse l'avoir avec Excel....
    Exemple : le polygone du quartier =
    {u'type': u'Polygon', u'coordinates': [[[5.936661194337211, 43.122479093236386], [5.93689548801544, 43.122722619970794], [5.936999923520946, 43.12274594886675], [5.937052135006671, 43.12282809093605], [5.9370477581637005, 43.12283786069888], [5.9370723870729485, 43.12283883105662], [5.937057760137893, 43.12287627088782], [5.93714237365309, 43.12289804463583], [5.937628094026023, 43.12273212382442], [5.937910710521981, 43.12263323834742], [5.937990331575547, 43.122515278013694], [5.937972683660318, 43.12248382685259], [5.938079197574212, 43.1222233843163], [5.938087045355805, 43.12218617240539], [5.938078810217996, 43.12216658302038], [5.938134743559458, 43.121890508569216], [5.938144451479349, 43.12186088745476], [5.938162978755013, 43.121686096244254], [5.9382513606264125, 43.12152136731724], [5.9382567069803756, 43.12146627281498], [5.9382084118089065, 43.12146990659392], [5.938122553537004, 43.12160639296034], [5.938138582688557, 43.121620936467764], [5.937875214197794, 43.12183909945828], [5.93791608867483, 43.1219051600739], [5.937665251957375, 43.12198245793927], [5.937548526552085, 43.1217886134859], [5.937522991408141, 43.121770959232215], [5.9374838886741195, 43.12175760633436], [5.937439418336393, 43.12176383026573], [5.937398766098164, 43.12177627931364], [5.937371094294378, 43.12181291912318], [5.937369407729698, 43.12184705219594], [5.937363347863315, 43.12189377933463], [5.937284164208808, 43.121920666275706], [5.937168727711515, 43.121911791950254], [5.9371816203381265, 43.121770275007236], [5.9371612399458975, 43.12167602722164], [5.937126912890278, 43.121515346355515], [5.937086955053101, 43.12137138190431], [5.937107207688247, 43.12137183968949], [5.937085142733757, 43.121274176217824], [5.937074116101995, 43.12127233285703], [5.937004078320964, 43.12097290738993], [5.936968570003777, 43.12084729631208], [5.936918629690299, 43.12076686919789], [5.936967191145749, 43.120735109065016], [5.937020978761124, 43.120725104897566], [5.937077376111649, 43.120714230308856], [5.937127034465711, 43.120722494653485], [5.937170294683937, 43.12081755513814], [5.937199972382685, 43.12084159314832], [5.937249677926163, 43.12085165447377], [5.937285257633735, 43.120839062942345], [5.937320841480873, 43.12081668583602], [5.937350685655183, 43.12064157565012], [5.937370979428871, 43.120449277292565], [5.937155813910193, 43.120433395841204], [5.937029166918464, 43.12048212484522], [5.936801745560783, 43.12055761057522], [5.936750381420151, 43.120539272314296], [5.936287029205737, 43.120709542643084], [5.936137812145267, 43.12079552707565], [5.936027934961095, 43.12080607099277], [5.935937855863172, 43.120825547538644], [5.935464268634354, 43.120960575005725], [5.935011759436935, 43.12022767021614], [5.934759907830239, 43.11990990481875], [5.934583900823193, 43.11961738817373], [5.9343054461437585, 43.11916593204429], [5.934130737062672, 43.11925799742659], [5.9336353089270375, 43.119519002280974], [5.932843802269119, 43.11992577889339], [5.931998331761589, 43.12035922145369], [5.931415187155173, 43.12065949793545], [5.931044840428094, 43.120843280851815], [5.930448010179037, 43.12114034382536], [5.92933941787321, 43.12169160644544], [5.92974662884072, 43.12201715964602], [5.929276893978246, 43.122276543394456], [5.929158500399969, 43.12229237186702], [5.928973868477547, 43.122285683094915], [5.929200699929124, 43.12259184026085], [5.929524593902417, 43.12294577037892], [5.930034669411525, 43.12357902493483], [5.9299759013717575, 43.12363193715781], [5.929883841909883, 43.12368214176876], [5.9286510004777835, 43.124207991565406], [5.928406923403761, 43.12433794234002], [5.928308136058115, 43.12437661505235], [5.927897702827794, 43.12389093636218], [5.927820800173469, 43.123925438915805], [5.927772859477243, 43.12397353559074], [5.927279048190508, 43.124194860282465], [5.926261274765089, 43.12464914922078], [5.926336677073627, 43.12475509220656], [5.926407232483493, 43.124813487112355], [5.926540541282656, 43.12485814022724], [5.926610316027714, 43.124939264688116], [5.926628142897371, 43.12502212949895], [5.926710306594818, 43.12500747702242], [5.92670089236704, 43.12497151797868], [5.926824932157317, 43.12496137134964], [5.926844033168604, 43.12496804037868], [5.927160863816569, 43.12492185282223], [5.927185715187644, 43.124978896665624], [5.927230437110726, 43.1249746629401], [5.927334708161484, 43.12507541436314], [5.927394277502982, 43.125038688309914], [5.9274777488389905, 43.125013026201536], [5.927721714712567, 43.124977597586174], [5.928223049534001, 43.12490456532146], [5.928305930343466, 43.12513362092635], [5.928850796436708, 43.12504680908439], [5.928902001351713, 43.12503913122999], [5.9291345962193684, 43.12502200247022], [5.929536354039168, 43.12494807969562], [5.929523889873151, 43.12489619711571], [5.930149336725974, 43.12477479641742], [5.930767463048641, 43.12465447140471], [5.931037668153877, 43.12518537020268], [5.932445279190784, 43.124907651681625], [5.932249530104573, 43.12436754216063], [5.9322257683193484, 43.12428628691583], [5.932109347498194, 43.12390512761126], [5.932231795654447, 43.12387208806759], [5.932412345507698, 43.123822167932296], [5.932486513534274, 43.12378235229454], [5.932589935585466, 43.12402886136556], [5.93271984629874, 43.12426472358533], [5.932786945299047, 43.12430340539637], [5.932774166462027, 43.12434245761546], [5.932924654882926, 43.124813588131104], [5.932665513675464, 43.12486474628499], [5.932872251747673, 43.125403654456875], [5.933805493061493, 43.12522165425031], [5.93486629348941, 43.1250109463941], [5.935027180102296, 43.124984951850834], [5.936079373475459, 43.12477448790817], [5.93625024549269, 43.124291893344925], [5.936237029894583, 43.12415275108972], [5.936068214740389, 43.12419155180718], [5.9346802969374455, 43.1244696677174], [5.933609592561922, 43.12467883442254], [5.933450153900772, 43.124272758210445], [5.933395566633302, 43.12406903049268], [5.9335331803285944, 43.12404457359056], [5.933844399305958, 43.12397849977412], [5.934065561657814, 43.12390588035878], [5.934079606563579, 43.123867679158195], [5.93395701158052, 43.123543917436514], [5.934360254370717, 43.12346164633445], [5.9343455411424975, 43.12338383357095], [5.934879099247456, 43.12325467897504], [5.934952545134707, 43.1233833780126], [5.935377940269834, 43.123277882907935], [5.935512340438146, 43.12316623027152], [5.935569602081618, 43.12313225181687], [5.936120534332712, 43.122802226265456], [5.936661194337211, 43.122479093236386]]]}
    C’est une partie du quartier centre ville de Toulon….

    Ensuite j'ai une série d'adresse et je souhaitais savoir si elles font partie du quartier : par exemple : place Victor Hugo (43.124075, 5.932420) fait parti de ce quartier. Par contre 1,Place de la Liberté (43.126347,5.931230) n'en fait pas parti....et plus subtile : le N°27 du boulevard de Strasbourg (43.124675,5.933048) en fait parti, alors que le N°14 boulevard de Strasbourg (43.125192,5.931385) n'en fait pas parti....

    J’ai les coordonnées GPS (grâce à Tatiak via « adresse.data.gouv.fr ») des différentes adresses recherchées.
    Donc, la question est : possible or not possible ? et naturellement, si oui, comment faire....?

    Merci pour votre aide,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Bonjour,

    Est-ce que la représentation des coordonnées doit ressembler à cela ?
    Pièce jointe 522726

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Oui, le quartier a exactement cette forme...EXTRAORDINAIRE !!!!

    et donc, à partir d'une liste de rues et leurs coordonnées (je mets en PJ) , je souhaite savoir si elles appartiennent à ce quartier....une simple réponse VRAI/FAUX me suffirait...

    Merci pour votre aide,
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Cela pourrait donner cela.
    Ensuite, il faudrait sélectionner les formes à l'intérieur du polygone et les coller sur une nouvelle feuille, puis faire la correspondance avec la base des points qui est numérotée.
    Pièce jointe 522756

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Whaou...!!!

    Impressionnant...!!! et assez extraordinaire....BRAVO !! je suis vraiment scotché par la réalisation...c'est ....super !

    Vous êtes sur du visuel, et si j'ai bien compris, il faudrait que je copie les points rouges qui sont dans la partie bleues et les coller ensuite dans une autre feuille et prendre les numéros et comparer par rapport aux lignes....oui, cela se rapproche beaucoup du résultat souhaité.

    En fait, c'est juste l'info OUI/NON, VRAI/FAUX qui m'est nécessaire. C'est vrai que le visuel apporte une vision globale et très intéressante, mais là, j'ai mis un fichier "que" de 900 lignes, mais mon fichier source comprend plus de 10000 lignes et donc je crains que la visualisation soit affectée...d'où le souhait d'avoir juste l'info VRAI/FAUX que je pourrais mettre sur chaque ligne du fichier.

    Merci pour votre aide,

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Je ne vois pas de solution pour identifier la couleur du pixel du polygone qui se trouve sous le point.
    Je ne vois pas non plus la solution pour déterminer si on a deux intersections avec le polygone en dessus et au dessous d'un point à sa verticale.
    Sinon une fois les formes collées sur une autre feuille, il est assez facile d'identifier les adresses concernées.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci Eric KERGRESSE, TOP !!!

    Donc, si j'ai tout compris, il faut que je copie les points rouges qui sont dans la zone bleue et que je les colle dans une autre feuille. Comme ils portent un numéro (qui doit être le numéro de la ligne je pense), avec un equiv/index et/ou rechercheV, je retrouve les adresses se situant dans le polygone...

    Si c'est ça, c'est parfait....je comprends que l'identification (mathématique) soit une mission très difficile et/ou délicate, donc votre solution via le visuel peut correspondre à ce que je cherchais...et concernant mes 10000 lignes, je vais voir comment je vais "découper" mon fichier. C'est réalisable assez facilement, je pourrais faire différentes feuilles dans mon classeur et donc adapter avec votre code...

    Oui, c'est bon, je pense que votre fichier est la solution...

    Pourriez vous le mettre en PJ afin que je puisse travailler dessus ?

    En vous remerciant et vous félicitant pour ce résultat,
    Eric

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    L'identification ne peut se fait par une simple fonction car il s'agit d'objets shape. Il faut réaliser un double balayage sur la collection Shapes dans la nouvelle feuille et sur la base de données des points, le nom des formes correspond à l'index de la base de données.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Ok,

    Je pense avoir compris :je prends le nom des formes et je compare à la base de données des rues pour les identifier ? ce qui voudrait dire une boucle sur le nom des shape dans la nouvelle feuille et recherche par index dans la base des rues ?

    En vous remerciant,
    Eric

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Vous pouvez adapter le fichier présent dans le message #9 de cette discussion Eexcel-image-svg-traitement-individuel-shapes

    Si l'ami WuKoDLaK lit cette discussion, j'en profite pour le saluer

    Pour la création des points :
    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
     
    Sub TestCreerUneCoordonnee()
     
    Dim AirePoints As Range
     
    Dim I As Long
     
            Set AirePoints = Sheets("Liste des points").Range("AirePoints")
            For I = 1 To AirePoints.Count
                CreerUneCoordonnee Sheets("Mes formes3"), CDbl(AirePoints(I).Offset(0, 5)), CDbl(AirePoints(I).Offset(0, 6)), CStr(AirePoints(I).Offset(0, 1)), Sheets("Mes formes3").Shapes("Agglo")
            Next I
     
    End Sub
    Sub CreerUneCoordonnee(ByVal FeuilleCoordonnee As Worksheet, ByVal Longitude As Double, ByVal Latitude As Double, ByVal NumeroDOrdre As String, ByVal CarteEnCours As Shape)
     
    Dim Forme As Shape
     
        With FeuilleCoordonnee
     
             Set Forme = .Shapes.AddShape(msoShapeOval, Longitude + CarteEnCours.Left, Latitude + CarteEnCours.Top, 18, 18)
             With Forme
                  .Name = "Point " & NumeroDOrdre
                  With .Fill
                       .Visible = msoTrue
                       .ForeColor.RGB = RGB(255, 0, 0)
                      .BackColor.RGB = RGB(255, 0, 0)
                  End With
                  With .Line
                       .Visible = msoTrue
                       .ForeColor.RGB = RGB(255, 0, 0)
                  End With
                  With .Line
                       .Visible = msoTrue
                       .Weight = 0.5
                  End With
                  With .TextFrame2
                       .VerticalAnchor = msoAnchorMiddle
                       .WordWrap = msoFalse
                       With .TextRange
                            .Text = NumeroDOrdre
                            .ParagraphFormat.Alignment = msoAlignCenter
                            With .Font
                                 .Size = 6
                                 .Name = "Arial"
                                 .Bold = True
                                 .Fill.ForeColor.ObjectThemeColor = msoThemeColorText1
                            End With
                       End With
                  End With
             End With
             Set Forme = Nothing
     
       End With
     
    End Sub

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Merci Eric KERGRESSE,

    Mais lorsque vous dites "adapter" le fichier...je n'ai pas compris où je pouvais mettre les coordonnées de mon polygone...afin de pouvoir le re-dessiner...ni où mettre les adresses afin de pouvoir dessiner les points rouges...

    j'ai mis les valeurs que vous aviez identifiées dans votre "classeur1" (coordonnées de mon polygone) dans la feuille "Liste coordonnées" en colonne C et E, mais ...à chaque fois cela re-dessine la Sarthe (très beau département au demeurant...). J'ai même modifié les coordonnées dans la feuille "Communes", et toujours re-dessin de la Sarthe...J'ai effacé les données de la feuille "Lien Google", re-dessin de la Sarthe....je ne comprends rien....j'ai mis le fichier en PJ...

    Bref, j'aurai besoin de votre aide et/ou que vous puissiez mettre le fichier que vous avez réalisé (=celui qui donnait les copies écran du résultat)...afin que je puisse "voir" où mettre les données de dessin et faire les différents essais.....bref, comprendre....

    En vous remerciant,
    Eric
    Fichiers attachés Fichiers attachés

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Dans ce fichier, j'ai ajouté un nouvel onglet "Mes formes3" pour contenir les shapes.

    Dans l'onglet "Communes", ne doit subsister qu'une seule ligne. J'ai appelé cette commune "Agglo". Ce nom doit se retrouver sur les cellules A2 et B2. Les autres colonnes n'ont pas d'importance.
    Pièce jointe 522792

    Il faut retrouver dans la colonne A de l'onglet "Liste des coordonnées" le même nom que que celui noté en B2 de l'onglet commune. Les coordonnées sont celles trouvées avec le programme de mon 1er post effacé depuis. Ces coordonnées sont à placer respectivement dans les colonnes Coord X et Coord Y. Eventuellement, adapter l'aire dans les formules C3, D3, C7, D7.
    La numérotation des points est à faire en incrémentant les lignes à partir de 1.

    Puis lancer le programme CreateShapesV4 en ayant modifié la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set ShShapes = Sheets("Mes formes3")
    Pièce jointe 522794

    Pour la série des points, dupliquer l'onglet Liste des cordonnées (ici Liste des points). Coller vos points dans CoordX et CoordY et appliquer le code fourni plus haut.
    Pièce jointe 522795

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Réflexion faite, l'idée de transférer les shapes sur un onglet n'est pas réaliste si le nombre dépasse une dizaine d'objets, alors avec 10000...
    L'idée serait alors de créer des rectangles au dessus des shapes situés à l'intérieur du polygone. Il faudrait pour cela zoomer le polygone pour avoir une plus grande précision. Une fois fait, on peut récupérer les coordonnées des rectangles et vérifier si les coordonnées X ou Y "carte" sont dans un des rectangles avec la même méthode que dans mon premier post (effacé depuis). Mais cela reste artisanal...
    Une automatisation de la génération des rectangles en série est possible avec un événement (clic droit par exemple), la suppression d'un rectangle étant plus simple que sa création.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Merci pour ce tuto très bien expliqué, merci d'avoir pris ce temps....j'avais "presque bon" puisque j'avais bien mis les coordonnées (de votre 1er post au bon endroit et bien mis dans "Communes")

    J'ai fait tout comme vous avez dit, mais maintenant, je pense savoir pourquoi rien ne fonctionne depuis hier soir : je n'ai pas le code "CreateShapesV4" ....pourtant j'ai fait ce que vous m'avez dit : reprendre le fichier du #9...c'est certainement pour cette raison que j'avais toujours la carte de la Sarthe...et j'ai regardé dans tous vos échanges avec WuKoDLaK et fichiers échangés, pas trouvé de code CreateShapesV4....

    Pour la précision, effectivement, cela pourrait être une/LA solution...mais comme déjà dit, votre aide est vraiment nécessaire...

    Merci pour votre aide,

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    Public MatriceDesPoints() As Variant
    Public AireCommunes As Range, CelluleCommunes As Range
    Public AireCoordonnees As Range, CelluleCoordonnees As Range
     
    Public ShShapes As Worksheet, ShCoordonnees As Worksheet, ShCommunes As Worksheet
     
    Sub CreateShapesV4()
     
    'Dim loFreeformBuilder As Excel.FreeformBuilder 'Constructeur de forme libre
    Dim CtrI As Long, I As Long
     
    Dim DerniereLigne As Long, TitreCoordonnees As Long
    Dim DerniereLigneCommunes As Long, TitreCommunes As Long
    'Dim MesCoordonneesCommunales As Variant
    Dim AirePoints As Range
     
    Dim ColNomCommunes As Long, ColCoordX As Long, ColCoordY As Long
    Dim CommuneChoisie As String
     
    Dim MaForme As Shape
     
        On Error GoTo Fin
     
        Application.ScreenUpdating = False
        Set ShShapes = Sheets("Mes formes3")
        With ShShapes
             .Activate
             .Shapes.SelectAll
             Selection.Delete
             NbFormesCreees = 0
        End With
     
     
        Set ShCommunes = Sheets("Communes")
        With ShCommunes
             TitreCommunes = 1
             DerniereLigneCommunes = .Cells(.Rows.Count, 1).End(xlUp).Row
             Set AireCommunes = .Range(.Cells(TitreCommunes + 1, 2), .Cells(DerniereLigneCommunes, 2))
        End With
     
     
       Set ShCoordonnees = Sheets("Liste des coordonnées")
        With ShCoordonnees
             TitreCoordonnees = 10
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             ColNomCommunes = 1
             ColCoordX = 6
             ColCoordY = 7
             Set AireCoordonnees = .Range(.Cells(TitreCoordonnees + 1, ColNomCommunes), .Cells(DerniereLigne, ColNomCommunes))
        End With
     
     
       CtrI = 0
       For Each CelluleCommunes In AireCommunes
            ChargerMatriceDesCoordonnees AireCoordonnees, CelluleCommunes
            CreationFormeLibreV2 ShShapes, CelluleCommunes
            CtrI = CtrI + 1
        Next CelluleCommunes
     
     
      '  With ShShapes.Shapes.Range(MatriceDesFormes).Group
      '      .Name = "Agglo2"
      '      .LockAspectRatio = msoTrue
      '  End With
     
        Set AireCommunes = Nothing
        Set AireCoordonnees = Nothing
        Set ShCoordonnees = Nothing
        Set ShShapes = Nothing
        Set ShCommunes = Nothing
     
     
     
            Set AirePoints = Sheets("Liste des points").Range("AirePoints")
            For I = 1 To AirePoints.Count
                CreerUneCoordonnee Sheets("Mes formes3"), CDbl(AirePoints(I).Offset(0, 5)), CDbl(AirePoints(I).Offset(0, 6)), CStr(AirePoints(I).Offset(0, 1)), Sheets("Mes formes3").Shapes("Agglo")
            Next I
     
        Set AirePoints = Nothing
     
        Application.ScreenUpdating = True
        MsgBox "Fin de programme !", vbInformation
     
        Exit Sub
     
    Fin:
     
        MsgBox "Erreur détectée", vbCritical
        Set AireCommunes = Nothing
        Set AireCoordonnees = Nothing
        Set ShCoordonnees = Nothing
        Set ShShapes = Nothing
        Set ShCommunes = Nothing
     
     
    ' Groupe les départements dans une forme
    End Sub
     
     
    Sub CreationFormeLibreV2(ByVal MaFeuilleShape As Worksheet, ByVal MaCommune As String)
     
    Dim I As Integer
    Dim loFreeformBuilder As FreeformBuilder 'Constructeur de forme libre
     
        With MaFeuilleShape
       ' .Activate
        Set loFreeformBuilder = .Shapes.BuildFreeform(msoEditingCorner, CSng(MatriceDesPoints(0, 1)), CSng(MatriceDesPoints(0, 2)))
        For I = 1 To UBound(MatriceDesPoints, 1)
            loFreeformBuilder.AddNodes msoSegmentLine, msoEditingAuto, CSng(MatriceDesPoints(I, 1)), CSng(MatriceDesPoints(I, 2))
        Next I
        loFreeformBuilder.AddNodes msoSegmentLine, msoEditingAuto, CSng(MatriceDesPoints(0, 1)), CSng(MatriceDesPoints(0, 2))
     
        With loFreeformBuilder.ConvertToShape
                    ' Identifiant de la commune
                    .Name = MaCommune
                    .Line.Weight = 1
                    NbFormesCreees = NbFormesCreees + 1
                    ReDim Preserve MatriceDesFormes(1 To NbFormesCreees)
                    MatriceDesFormes(NbFormesCreees) = .Name
        End With
     
                ' Libère l'objet constructeur
                Set loFreeformBuilder = Nothing
     
        End With
     
     
    End Sub
     
    Sub ChargerMatriceDesCoordonnees(ByVal AireDesPoints As Range, ByVal MaCommune As String)
     
    Dim CelluleDesPoints As Range
    Dim NombreDePoints As Long
     
        ReDim MatriceDesPoints(AireDesPoints.Count - 1, 2)
     
        NombreDePoints = 0
        For Each CelluleDesPoints In AireDesPoints
            If CelluleDesPoints = MaCommune Then
                MatriceDesPoints(NombreDePoints, 0) = CelluleDesPoints
                MatriceDesPoints(NombreDePoints, 1) = CSng(CelluleDesPoints.Offset(0, 5))
                MatriceDesPoints(NombreDePoints, 2) = CSng(CelluleDesPoints.Offset(0, 6))
                NombreDePoints = NombreDePoints + 1
            End If
        Next CelluleDesPoints
     
    End Sub

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Le code bloque car "variable non définie" au niveau de " ReDim Preserve MatriceDesFormes(1 To"

    Merci pour votre aide,

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Le code est dans le message #10.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Oui, nos messages se sont croisés, j'ai effectivement repris le code du #10 (j'avais tout repris nos échanges depuis le début et donc j'ai retrouvé...), , j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public MatriceDesFormes() As Variant
    pour enlever l'erreur du #16

    J'ai aussi nommé "Airepoints". Voici le résultat....mais qui ne ressemble pas au votre...(#4) .....??


    Pièce jointe 522907

    En vous remerciant pour votre aide,
    Images attachées Images attachées  

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ericdev67 Voir le message
    Pour vos points, il faut appliquer les mêmes formules correctrices que dans l'onglet Liste des coordonnées.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Malgré plusieurs essais et vérifications, le positionnement des points ne correspond pas à "la réalité" (=positionnement des rues dans le quartier), malgré les corrections sur la feuille "Liste coordonnées"...

    Merci pour votre aide,

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/05/2017, 19h13
  2. [Google Maps] Déterminer si une coordonnée GPS se situe dans un polygone
    Par dumoulex dans le forum APIs Google
    Réponses: 8
    Dernier message: 04/01/2014, 23h07
  3. appel d'une fonction qui est dans une autre page
    Par guppy33 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/08/2006, 12h05
  4. Peut-on executer une fonction qui est dans un iframe ??
    Par miloud dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/04/2006, 11h52
  5. voir comment est alimentée une vue qui est dans dba_objects
    Par meufeu dans le forum Administration
    Réponses: 15
    Dernier message: 06/10/2004, 17h27

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