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: