Convertir coordonnées WGS 84 en Lambert 93

Bonjour à tous,

je souhaite convertir des données depuis le système WGS 84 vers Lambert 93, via des formules Excel (sans prog VBA).

Jusqu'à présent, j'utilise l'excellent

, qui permet notamment de traiter en masse ces conversions, mais comme le traitement que je dois faire doit avoir lieu plusieurs fois, pour plusieurs centaines de points, ça me faciliterait la vie de faire la transformation via Excel directement.

J'ai cherché longuement mais n'ai rien trouvé de satisfaisant. Je pensais avoir trouvé le Graal ici :

Mais que nenni.

ex. avec un point situé dans le centre de Aubusson

ENTREE :

XWGS84 = 45.952796

YWGS84 = 2.166869

SORTIE :

XL93 = 635467

YL93 = 6539572

Si vous pouviez m'aider à trouver la formule adéquate, ce serait génial !

Merci de votre aide.

Bonjour,

A partir du code source en PHP de 'Me Capello', j'ai traduit sa fonction en Vba

* source :

Ce qui donne :

Function Lambert93(latitude As Single, longitude As Single) As L93
Dim l0 As Single, lc As Single, phi0 As Single, phi1 As Single, phi2 As Single
Dim phi As Single, l As Single, gN1 As Single, gN2 As Single
Dim gl1 As Double, gl2 As Double, gl0 As Double, gl As Double
Dim n As Double, c As Double, ys As Double

    l0 = deg2rad(3)
    lc = deg2rad(3)
    phi0 = deg2rad(46.5)    ' latitude d origine en radian
    phi1 = deg2rad(44)      ' 1er parallele automécoïque
    phi2 = deg2rad(49)      ' 2eme parallele automécoïque

    phi = deg2rad(latitude)
    l = deg2rad(longitude)

'   //calcul des grandes normales
    gN1 = a / Sqr(1 - e * e * Sin(phi1) * Sin(phi1))
    gN2 = a / Sqr(1 - e * e * Sin(phi2) * Sin(phi2))

'   //calculs des latitudes isométriques
    gl1 = Log(Tan(PI / 4 + phi1 / 2) * Pow((1 - e * Sin(phi1)) / (1 + e * Sin(phi1)), e / 2))
    gl2 = Log(Tan(PI / 4 + phi2 / 2) * Pow((1 - e * Sin(phi2)) / (1 + e * Sin(phi2)), e / 2))
    gl0 = Log(Tan(PI / 4 + phi0 / 2) * Pow((1 - e * Sin(phi0)) / (1 + e * Sin(phi0)), e / 2))
    gl = Log(Tan(PI / 4 + phi / 2) * Pow((1 - e * Sin(phi)) / (1 + e * Sin(phi)), e / 2))

'   //calcul de l'exposant de la projection
    n = (Log((gN2 * Cos(phi2)) / (gN1 * Cos(phi1)))) / (gl1 - gl2)

'   //calcul de la constante de projection
    c = ((gN1 * Cos(phi1)) / n) * exp(n * gl1)

'   //calcul des coordonnées
    ys = y0 + c * exp(-1 * n * gl0)
    Lambert93.X = x0 + c * exp(-1 * n * gl) * Sin(n * (l - lc))
    Lambert93.Y = ys - c * exp(-1 * n * gl) * Cos(n * (l - lc))
End Function

Voici un exemple d'utilisation les coordonnées GPS sont à saisir en A et B, Lambert93 s'inscrit en C et D

Est-ce que c'est bon?

Pierre

Est-ce que c'est bon?

Merci de ton implication pierrep56 !

Ceci dit j'ai une erreur direct à la ligne 30.

Tu l'as fait avec quelle version d'Excel ? Je sais que j'ai eu des soucis entre Excel 2016 et 2013, où certaines fonctions n'étaient plus nommées pareil (c'est pratique tiens !).

Ecrit et fonctionnel sous Excel 2016 32 bits - Windows10 64 bits

Testé et fonctionnel sous Excel 2007 32 bits - Windows10 32 bits

=> si ajout, vérifier les données en A et B ...

=> si Mac, c'est la loose

Pierre

Curieux...

Je suis bien sur PC W7 64 bits et Excel 2013.

A l'ouverture, les 2 coordonnées qui sont déjà inscrites dans le fichier ne sont pas reconnues comme des nombres, Excel me les converti à sa demande, et en activant la macro ensuite, j'ai toujours la ligne 30 qui bugue..

Alors voici une version dans laquelle en A et B les valeurs sont des valeurs numériques, séparateur virgule du type : XWGS84 = 45,952796 YWGS84 = 2,166869

(rq : mes version d'Office sont en FR-fr, et format numérique à virgule)

C'est, tout simplement, fan-tas-tique !!!!!!

Merci beaucoup pierrep56, ça va m'épargner de nombreuses manips, c'est formidable !

pierrep56, comment je peux faire pour intégrer ta macro à une macro ?

Je suis pas un grand maître Excel, je me débrouille mais pas suffisamment pour comprendre les différents étages de ta macro Test.

Si je l'intègre comme ça dans une macro à moi, ça bugue et ça me renvoie à la ligne qui défini la fonction 'Lambert93'.

Peux-tu m'aider à comprendre ce que je dois faire dans ma macro STP ?

Alors décodage du 'sub test', dans le code proposé :

1/ j'ai créé un type personnalisé 'L93' composé du tuple X-Y

2/ la variable 'Resultat' est déclarée en tant que type 'L93'

3/ lg est le nombre de lignes de la feuille "Feuil1" calculé à patir de la colonne A

4/ on boucle de la ligne 3 à la ligne lg

5/ on place la valeur lue en A dans une variable latitude et B dans une longitude

6/ 'Resultat' (de type 'L93' donc) est le retour de la fonction Lambert93(lat, lng)

7/ il reste à coller Resultat.X en C et Resultat.Y en D de la même ligne

Le reste du code, les constantes et les 3 functions, peuvent-doivent être copié/collé tel quel dans un projet quelconque

Pierre

Le reste du code, les constantes et les 3 functions, peuvent-doivent être copié/collé tel quel dans un projet quelconque

Merci Pierre.

En collant ton code dans ma macro, le débug s'arrête direct sur la ligne qui définie la fonction Lambert93 en disant : Erreur de compilation : Type défini par l'utilisateur non défini.

Une idée ?

relire le 1/ ...

relire le 1/ ...

Il faut m'en dire plus STP...

copier/coller tout le code du module sauf les lignes 'sub test ... end sub' dans son projet

tout le code ...

copier/coller tout le code du module sauf les lignes 'sub test ... end sub' dans son projet

tout le code ...

Alors, j'ai fait cela, sauf que désormais, lorsque j'exécute mes macros, lorsque j'arrive à celle qui contient entre autre ton code, j'ai l'erreur 1004 : impossible d'éxécuter la macro en question. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.

Bon bien sûr les macros ne sont pas désactivées puisque les autres fonctionnent bien, et lorsque j'exécute la macro toute seule j'ai toujours la même erreur de compilation à la ligne où est définie la fonction Lambert93 !..

Visiblement vous n'êtes pas à l'aise avec le Vba.

Alors si le fichier que j'ai proposé fonctionne tel que, utilisez-le tel que, avec un copier/coller des valeurs numériques Lat et Lng en A et B.

Ce sera déjà mieux que votre pratique antérieure.

Oui voilà c'est bien pour cela que j'avais demandé initialement sans VBA...

Du coup j'ai intégré ton code comme nouvelle macro dans mon projet, et ça fonctionne très bien.

Merci encore.

Rechercher des sujets similaires à "convertir coordonnees wgs lambert"