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 
	 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		