Magic_Doctor
XLDnaute Barbatruc
Bonsoir,
J’ai bricolé une fonction qui permet, suivant son paramétrage, de connaître :
- le nombre de fuseaux qui séparent 2 méridiens
- le décalage horaire entre 2 méridiens
- la distance, à une latitude donnée, séparant 2 méridiens
Apparemment, cette fonction marche correctement quand on l’utilise directement sur la feuille. En revanche, quand on l’utilise dans une macro, uniquement pour le nombre de fuseaux qui séparent 2 méridiens il y a un problème. Si c’est, par exemple (voir PJ), 7,228 j’obtiendrai 7.228. Comment résoudre ce problème ?
J’ai bricolé une fonction qui permet, suivant son paramétrage, de connaître :
- le nombre de fuseaux qui séparent 2 méridiens
- le décalage horaire entre 2 méridiens
- la distance, à une latitude donnée, séparant 2 méridiens
VB:
Function Decalage(lat As Double, long1 As Double, long2 As Double, Optional fuseau As Boolean = False, Optional distance As Boolean = False) As String
'Renvoie le décalage horaire entre 2 méridiens si "fuseau" & "distance" sont omis
'La latitude et les longitudes sont en degrés DÉCIMAUX
'- lat : latitude de l'un des 2 points
'- long1 : longitude du premier point
'- long2 : longitude du deuxième point
'- fuseau = True ("distance" omis) --> nombre de fuseaux qui séparent les 2 méridiens
'- distance = True ("fuseau" omis) --> distance, à la latitude "lat", séparant le méridien du point à la longitude "long1" du méridien du point à la longitude "long2"
'Magic_Doctor
Dim wf As WorksheetFunction, ValLongit As Double, dif As Double, circ As Double, LongArc As Double, nbf As Double, h As Byte, mn, s As Byte
Set wf = Application.WorksheetFunction
'************************************* Valeur, en km, d'1° de longitude suivant la latitude où l'on se trouve *************************************
ValLongit = 6371.009 * wf.Acos(Sin(wf.Radians(long1)) ^ 2 + Cos(wf.Radians(long1)) ^ 2 * Cos(wf.Radians(1))) '(loi des sinus)
dif = Abs(long1 - long2) 'nombre de degrés séparant les méridiens des 2 points
circ = 2 * wf.Pi * 6371.009 * Cos(wf.Radians(lat)) 'circonférence du parallèle à la latitude "lat"
LongArc = dif * circ / 360 'distance entre les longitudes des 2 points (la latitude "lat1" étant celle de l'un des 2 points)
nbf = LongArc / ValLongit / 15 'nombre de fuseaux horaires séparant les 2 Points
h = Int(nbf) 'heures
mn = Int((nbf - h) * 60) 'minutes
s = Int(((nbf - h) * 60 - mn) * 60) 'secondes
Decalage = IIf(distance = True, Format(Round(LongArc, 3), "#,##0.000 km"), IIf(fuseau = True, Format(Round(nbf, 3), "0.000"), IIf(h < 10, "0" & h, h) & ":" & IIf(mn < 10, "0" & mn, mn) & ":" & IIf(s < 10, "0" & s, s)))
End Function
Pièces jointes
Dernière édition: