Magic_Doctor
XLDnaute Barbatruc
Bonsoir,
Je me heurte à un problème avec une fonction personnalisée.
Dans le paramétrage de cette fonction, il y a 2 paramètres optionnels : un pour un compteur (que l’on omettra), l’autre pour une valeur qui ne peut être dépassée.
Supposons que la valeur indépassable soit, par exemple, 3,45. Si je rentre dans la cellule :
3,3 --> 3° 3’
3,4 --> 3° 4’
3,44 --> 3° 44’
3,48 --> 3° 45’
3,57 --> 3° 45’
Mais, curieusement :
3,5 ou 3,6 ou 3,7 ou 3,8 ou 3,9 --> non pas 3° 5’ ou … 3° 9’, mais toujours 3° 45’.
Comment régler ce problème ?
La fonction :
Je me heurte à un problème avec une fonction personnalisée.
Dans le paramétrage de cette fonction, il y a 2 paramètres optionnels : un pour un compteur (que l’on omettra), l’autre pour une valeur qui ne peut être dépassée.
Supposons que la valeur indépassable soit, par exemple, 3,45. Si je rentre dans la cellule :
3,3 --> 3° 3’
3,4 --> 3° 4’
3,44 --> 3° 44’
3,48 --> 3° 45’
3,57 --> 3° 45’
Mais, curieusement :
3,5 ou 3,6 ou 3,7 ou 3,8 ou 3,9 --> non pas 3° 5’ ou … 3° 9’, mais toujours 3° 45’.
Comment régler ce problème ?
La fonction :
VB:
Function ConvertirDecimal$(NbDec$, ChxDegGr As Byte, Optional compteur, Optional max)
'Retranscrit une valeur décimale en format TEXTE (qui ne doit pas dépasser 2 décimales après la virgule) en degrés & minutes ou grades
'- NbDec : un nombre entier ou décimal qui n'excède alors pas 2 chiffres après la virgule
'- ChxDegGr : si 1 --> degrés sous forme, par exemple : 42,75 <=> 42° 75'
' si 2 --> grades
'- compteur : un numéro de compteur (1, 2, 3...)
' si omis --> pas de signe +/- avant la chaîne de caractères
' si stipulé --> un signe +/- (suivant la valeur du compteur) avant la chaîne de caractères
' Ex : pour degrés --> compteur omis : 42,25 --> 42° 25'
' compteur stipulé (suivant la valeur de celui-ci) : + 42° 25' | - 42° 25'
' pour grades --> compteur omis : 55,75 --> 55,75 gr
' compteur stipulé (suivant la valeur de celui-ci) : + 55,75 gr | - 55,75 gr
'- max : une valeur que ne peut dépasser la variable "NbDec"
'Magic_Doctor
Dim verif As Boolean, deg%, min As Byte, largo As Byte, pos As Byte, pref$
On Error Resume Next 'sinon bordel incompréhensible
If IsMissing(max) = False And NbDec > max Then NbDec = max '"NbDec" <= "max"
verif = IIf(NbDec = Int(NbDec), True, False) 'vérifie si NbDec est entier ou pas
deg = Int(NbDec) 'nombre de degrés (à gauche de la virgule)
largo = Len(NbDec): pos = InStr(NbDec, ",")
min = IIf(verif = False, Right(NbDec, largo - pos), 0) 'nombre de minutes (à droite de la virgule)
If IsMissing(compteur) Then
If ChxDegGr = 1 Then 'saisie en degrés sexagésimaux
ConvertirDecimal = deg & "°" & IIf(min = 0, "", " " & min & "'")
Else 'saisie en grades
ConvertirDecimal = NbDec & " gr"
End If
Else
' pref = IIf(compt(compteur) = 1, "+ ", "- ") 'symbole "+/-" qui précède la chaîne de caractères suivant la valeur de "compt(compteur)"
' If ChxDegGr = 1 Then 'saisie en degrés sexagésimaux
' ConvertirDecimal = IIf(deg = 0 And min = 0, "", pref) & deg & "°" & IIf(min = 0, "", " " & min & "'")
' Else 'saisie en grades
' ConvertirDecimal = IIf(NbDec = 0, "", pref) & NbDec & " gr"
' End If
End If
End Function