Calcul de distance automatique avec MapPoint

Compress

XLDnaute Occasionnel
Bonjour les amis,

pour une fois, je ne viens pas soumettre un nouveau problème mais seulement proposé une solution. La documentation française sur MapPoint étant très réduite, je me permets de soumettre un bout de code que j'utilise pour piloter MapPoint via VBA.

MapPoint est pour ceux qui ne le savent pas un puissant outil de Microsoft pour la visualisation de données cartographiques et permet de faire tourner des protocoles d'optimisation algorithmiques.

Ici, je reste dans les basiques, souvent certains forumeurs ont cherché à obtenir un calcul automatique des distances via le net. Alors ici, je vous propose une solution sans bug limite et avec une très nette précision basée sur MapPoint (application payante mais disponible en version d'essai).

Je dispose de MapPoint 2009.

Il suffit d'avoir deux colonnes : Ville A / Ville B (colonne 2 et 6 dans le code) :

VB:
Private Sub Distance()
        Dim objApp As New MapPoint.Application
        Dim objMap As MapPoint.Map
        Dim objRoute As MapPoint.Route
        Dim objLoc1 As MapPoint.Location
        Dim objLoc2 As MapPoint.Location
        Set objApp = CreateObject("MapPoint.Application.EU.16")
        objApp.Visible = False
        Set objMap = objApp.NewMap
        Set objRoute = objMap.ActiveRoute
        Worksheets("Feuil1").Cells(1, 7).Value = "Dist routière (kms)"
        Worksheets("Feuil1").Cells(1, 8).Value = "Dist oiseau (kms)"
        LigneActive = 2
        Do While Worksheets("Feuil1").Cells(NReadRow, 2) <> ""
            'Définition des deux points sur la carte
            Set objLoc1 = objMap.FindResults(Worksheets("Feuil1").Cells(LigneActive, 2)).Item(1)
            Set objLoc2 = objMap.FindResults(Worksheets("Feuil1").Cells(LigneActive, 6)).Item(1)
          
            'Placement des points et calcul de la distance
            objRoute.Waypoints.Add objLoc1
            objRoute.Waypoints.Add objLoc2
            objRoute.Calculate
            
            'Distance routière entre les deux villes
            Worksheets("Feuil1").Cells(LigneActive, 7) = objRoute.Distance
            'Distance à vol d'oiseau
            Worksheets("Feuil1").Cells(LigneActive, 8) = objMap.Distance(objLoc1, objLoc2)
            objRoute.Clear
            LigneActive = LigneActive + 1
        Loop
        
        
     objMap.Saved = True
     Set objApp = Nothing
     Set objMap = Nothing
     Set objLoc1 = Nothing
     Set objLoc2 = Nothing
     Set objRoute = Nothing

End Sub

Pour 1200 enregistrements, 2min pour obtenir toutes les distances.

Attention pensez à référence MapPoint. (Outils > Références...)

Cordialement. Si des personnes sont intéressées pour en savoir plus et que ça reste dans mes humbles cordes, n'hésitez pas.

Bonne journée.
 

dominou34@yahoo.fr

XLDnaute Nouveau
Re : Calcul de distance automatique avec MapPoint

Bonjour Compress,

ton idée est géniale, mais je n'arrive pas à faire fontionner ton code sur Excel...
Dans VBA en référence j'ai le choix entre Mappoint Control 17.0
Mappoint 17.0 object library (europe)
Mappoint utilites 1.0 type library
j'ai essayé les 3, un à un, et à chaque fois il bloque sur "Dim objApp As New MapPoint.Application"
Si je corrige le code en mettant "Dim objApp As MapPoint.Application" il me dit que je n'ai pas de licence (hors c'est un produit acheté..)

J'avoue que je suis novice en VBA, mais puisque l'occasion m'est donnée, as-tu déjà été confronté à ce problème ?
Peux-tu me dire ce que tu as coché s'il te plaît ?

Merci beaucoup pour ton aide.
 

dominou34@yahoo.fr

XLDnaute Nouveau
Re : Calcul de distance automatique avec MapPoint

Re-bonjour,

je n'avais pas réfléchi, en fait en version 2010, il faut :
remplacer Set objApp = CreateObject("MapPoint.Application.EU.16")
par Set objApp = CreateObject("MapPoint.Application.EU.17")

et hop le tour est joué, le lien entre mappoint et excel se fait bien :)

Youpiiiii
 

Compress

XLDnaute Occasionnel
Re : Calcul de distance automatique avec MapPoint

Super oui effectivement attention à la version...!

Si ça marche super cool en même temps à part ça le reste reste basique ;)

Pour limiter les vitesses, je peux également compléter le code si besoin, étant donné que je travaille pour un transporteur routier, j'avais besoin que MapPoint limite la vitesse sur autoroute à 90 km/h et sur les voies rapides également.

Je te donne l'astuce à rajouter dans le sub :

VB:
 'Limitation des vitesses sur autoroutes et routes
            objRoute.DriverProfile.Speed(geoRoadInterstate) = 90
            objRoute.DriverProfile.Speed(geoRoadLimitedAccess) = 90
            objRoute.DriverProfile.Speed(geoRoadOtherHighway) = 90
 

ashraf

XLDnaute Nouveau
Re : Calcul de distance automatique avec MapPoint

Bonjour

J'ai copié ce code dans un macro excel mais j'ai toujours l'erreur suivante:
"erreur 1004
erreur définie par l'application ou par l'objet

j'utilise Map point 2009 et excel 2007

Merci de me répondre
jen ai vraiment besoin
 

YANN-56

XLDnaute Barbatruc
Re : Calcul de distance automatique avec MapPoint

Bonsoir Compress, aux intervenants, et à ceux qui passeront par ici,

Ce que tu as proposé tombe à pic dans un souci que je n'arrivais pas à résoudre.

J'avais construit une appli qui me permettait de trouver la distance entre le siège d'une entreprise
et son lieu d'intervention via une requête: Google Maps... (Les Kms étant facturés).

Avec ton idée, je pensais pouvoir créer une base de données définitive.

1) Car dans ma première solution, il y avait nécessité d'être connecté (Souci aussi en réseau)
2) Que la page d'accueil de " maps.google" ayant changé, je ne parviens plus à m'en servir.

J'ai, comme tu le verras, su adapter à mon besoin ponctuel le calcul des distances.

Cependant, compte tenu des tailles souvent balaises de nos communes du département,
il peut y avoir 20 kms entre un point et un autre.
(Dans le cadre d'une facturation: "X" kms x 4 personnes x 1.75 € aller-retour pèsent lourd!)

J'ai tenté de définir un lieu pour peaufiner.... Mais -> Echec!!!
(En réalité: entre Landévant Mairie et Nostang - Lieu dit Magouero, il y a 7 kms ... et non 3,89)

Il y a-t-il une solution à ce caprice????

Pour info: Je teste sur Mappoint 2010 version d'essai 60 j.
et j'ai été obligé d'ajouter le code postal pour éviter les erreurs issues des doublons.
.... Sinon: Plouf !!!

Merci d'avance à toi ou à qui aura envie de se pencher sur le sujet.

Amicalement.

Yann
 

Pièces jointes

  • KMS.xls
    25.5 KB · Affichages: 802
  • KMS.xls
    25.5 KB · Affichages: 824
  • KMS.xls
    25.5 KB · Affichages: 851

YANN-56

XLDnaute Barbatruc
Re : Calcul de distance automatique avec MapPoint

Bonjour Morgan, et à ceux qui passeront par ici,

Rapproche-toi de ce Fil:
https://www.excel-downloads.com/thr...nce-entre-deux-villes-via-google-maps.106712/
Et ma dernière réponse!

Tu dis être novice en VBA; moi je ne sais qu'utiliser la craie sur un tableau! :(
(Et ce n'est pas une plaisanterie: C'est vrai!!!)

A noter que de mon coté, j'ai abandonné Mappoint car maps.google me convient mieux.

Tu trouveras dans ce Fil des aides pertinentes utilisant une ou des Feuilles Excel
qui devraient correspondre à ce que tu cherches à faire.

Bon courage.

Amicalement.

Yann
 

Compress

XLDnaute Occasionnel
Re : Calcul de distance automatique avec MapPoint

Bonjour Yann, bonjour le forum,

as-tu essayé avec ville, FRcode postal ?

A priori sur les essais que j'ai fait de cette forme, je n'ai pas eu d'erreurs, mais je n'ai pas testé toutes les communes de France non plus....

Dans l'attente de tes nouvelles...

CDLT.
 

YANN-56

XLDnaute Barbatruc
Re : Calcul de distance automatique avec MapPoint

Bonjour Compress, et à ceux qui passeront par ici,

Merci pour ton message, mais je ne comprends pas ce que tu proposes ici:

as-tu essayé avec ville, FRcode postal ?

De mon coté, j'ai bien avancé sur le sujet. Mais il correspond à un besoin spécifique.

1) Le lieu de départ est immuable. (Celui de l'utilisateur)
2) Une base de donnée à été crée avec les distances vers les autres communes des 5 départements Bretons.
(Ceci par le biais d'une procédure VBA, et en me servant des codes INSEE mis dans une Feuille))

La gestion des lieux dits où rues est en cours, et en bonne voie (Sans jeu de mots)
Je travaille actuellement sur la cohérence des possibilités proposées en cas d'imprécision.

Moralité: Même en cas d'impossibilité de connexion,
l'utilisateur aura au moins la distance avec la commune, et tant pis pour ce que la précision du lieu ajoute!

Si tu as un besoin ponctuel qui ressemble au mien, on pourra en reparler.

Amicalement, et au plaisir de te lire.

Yann
 

Compress

XLDnaute Occasionnel
Re : Calcul de distance automatique avec MapPoint

J'ai étudié l'autre outil que tu as mis dans le fil plus haut, je vois ce que tu veux dire...

Petit boulot sympa j'aime le simple et l'efficace.

Pour ta demande, le lieu de départ peut rester immuable dans MapPoint et pour les lieux dits, il faudrait que je fasse des tests, si tu as des données où tu veux que je teste la qualité des informations et que l'on compare aux données relevées dans google maps....
N'hésites pas, ma version de MapPoint est achetée donc pas de soucis de délais...

En tout cas ravi de te lire à chaque fois ;) et en te souhaitant bon courage pour le travail que tu effectues.

Amicalement.
 

dominou34@yahoo.fr

XLDnaute Nouveau
Re : Calcul de distance automatique avec MapPoint

Bonjour à tous,

je reviens vers vous, concernant le calcul de distances entre des points GPS (lon, lat)placés sur Excel.

J'ai repris le code d'origine de Compress, en changeant ceci:

Set objLoc1 = objMap.FindResults(Worksheets("Distancier").Cells(ligneactive, 2)).Item(1)
Set objLoc2 = objMap.FindResults(Worksheets("Distancier").Cells(ligneactive, 6)).Item(1)

par :

Set objLoc1 = objMap.GetLocation(2.50744009017944, 48.6944694519042, 500)
Set objLoc2 = objMap.GetLocation(2.69911003112792, 48.2713890075683, 500)

ça à l'air de fonctionner.
Mais dès lors que je remplace les points GPS par des liens sur mon onglet Excel avec, par exemple :
Set objLoc1 = objMap.GetLocation(Worksheets("Distancier").Cells(ligneactive, 6))
il n'en veut pas :(, mais alors pas du tout!

c'est dommage, j'aurais bien voulu lui coller une série de points GPS en lieu et place des codes Zip, pour être + fin dans mes analyses...

Quelqun aurait-il rencontrer ce problème ?
J'ai bien chercher sur le net, mais ce que je trouve est basé sur des zip.
 

Oli2bo

XLDnaute Nouveau
Re : Calcul de distance automatique avec MapPoint

Bonjour à tous,


D'avance, je vous prie de m'excuser pour ce déterrage :s.

Je suis vraiment novice en VBA, je procède sans connaissance de base, uniquement par essais erreurs et en recherchant sur le net.

J'ai repris le code de Compress pour tenter de mesurer des distances routières entre un point de départ immuable et toute une série de points caractérisés par leurs coordonnées Lat/Lon. Je parviens bien sûr à mesurer la distance routière entre ce point de départ (toujours le même dans mon cas) et tout autre point situé en Europe, en rentrant ses coordonnées dans le code, mais je ne parviens pas à modifier le code pour qu'il prenne en compte la liste de coordonnées Lat/Lon dont je dispose dans mon excel. Ma question rejoins donc celle de Dominou34, à savoir comment rentrer dans le code des références relatives de latitudes et longitudes localisant tous mes points de destination.

Merci d'avance pour votre aide !

Oli
 

Discussions similaires

Statistiques des forums

Discussions
312 298
Messages
2 086 978
Membres
103 417
dernier inscrit
abaabdelghani