Function ControlMinutes$(angle$, Optional DegZero As Boolean = False)
'Vérifie et éventuellement corrige le nombre décimal entré pour "angle"
'- angle : un angle désigné, par convention, sous la forme X°,Y' avec un maximum de 2 décimales après la virgule (ex : 12,25 <=> 12° 25')
' Dans la feuille, la cellule qui contient la valeur "angle" doit être en format TEXTE
'- DegZero : si True, stipule que les degrés doivent être nécessairement nuls (il ne peut y avoir que des minutes. Ex : 2,33 --> 0,33 <=> 0° 33')
'Ex : angle = 25,75 --> 12,59
' angle = 15,15892 --> 15,15
' angle = 15,20 --> 15,20
' angle = 15,2 --> 15,2
'Magic_Doctor /laurent950
Dim pos As Byte, deg$, min$
'Pour pouvoir entrer dans le TextBox de l'UF des valeurs comme, par exemple, 2,30 ou 45,50 (sinon considérées comme 2,3 ou 45,5)
If angle Like "*,*" Then
If Len(Split(angle, ",")(1)) = 2 Then 'il y a 2 chiffres après la virgule (minutes)
angle = Format(Abs(angle), "#.00") 'angle est toujours positif (on ne peut affecter un préfixe +/- qu'avec le label des points cardinaux E/W)
Else
angle = Abs(angle) 'angle est toujours positif (on ne peut affecter un préfixe +/- qu'avec le label des points cardinaux E/W)
End If
End If
pos = InStr(angle, ",") 'position de la virgule dans la chaîne
If pos = 0 Then 'pas de virgule --> il n'y a que des degrés
If DegZero Then 'les degrés sont toujours nuls
If angle > 0 Then angle = 0 'la variation annuelle de la déclinaison magnétique est seulement de quelques minutes
End If
GoTo fin 'il n'y a que des degrés, on court-circuite l'étape des minutes
End If
deg = Split(angle, ",")(0) 'degrés (à gauche de la virgule)
If DegZero Then 'les degrés sont toujours nuls
If deg > 0 Then deg = 0 'la variation annuelle de la déclinaison magnétique est seulement de quelques minutes
End If
min = Split(angle, ",")(1) 'minutes (à droite de la virgule)
If min > 59 Then
min = 59 'les minutes ne peuvent excéder 59
ElseIf min = "0" Or min = "00" Then '1 "0" tout seul ou 2 "0" inutiles après la virgule
angle = Left(angle, pos - 1): pos = 0
ElseIf Left(min, 1) = "0" Then 'les minutes commencent par un "0" (ex : 12,03 --> 12,3)
min = Right(min, 1)
End If
fin:
ControlMinutes = IIf(pos = 0, angle, deg & "," & min) 'résultat sous forme décimale (X° | X°,Y')
End Function