Magic_Doctor
XLDnaute Barbatruc
Bonjour,
J'ai rédigé une fonction qui fonctionne :
Il se trouve qu'il y a plusieurs compteurs (compt(x), variables déclarées en Public dans un module standard et qui ne peuvent avoir que 2 valeurs : 1 ou 2) et, plutôt que d'affecter une fonction pour chaque compteur, j'ai rédigé ceci :
Et là, si dans le paramétrage de la fonction j'omets un numéro de compteur (2ème argument), ça plante.
Le problème, je pense, doit être dans le "IsMissing".
Merci d'avance pour une explication.
J'ai rédigé une fonction qui fonctionne :
VB:
Function ConvertirDecimalEnDegMin$(NbDec$, Optional signe As Boolean = False)
'Retranscrit une valeur décimale en format de TEXTE (qui ne doit pas dépasser 2 décimales après la virgule) en degrés et minutes
'- NbDec : un nombre décimal où les chiffres avant la virgule représentent les degrés et ceux après la virgule les minutes
' Ex : 42,75 <=> 42° 75'
'- signe : si omis ou False --> pas de signe +/- avant la chaîne de caractères
' si True --> un signe +/- (suivant la valeur du compteur) avant la chaîne de caractères
' Ex (suivant que signe est False ou True) : signe omis ou False : 42,75 --> 42° 75'
' signe True (suivant la valeur de compt(1)) : + 42° 75' | - 42° 75'
'Magic_Doctor
Dim verif As Boolean, deg%, min As Byte, largo As Byte, pos As Byte
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)
ConvertirDecimalEnDegMin = IIf(signe, IIf(compt(1) = 1, "+ ", "- "), "") & deg & "°" & IIf(min = 0, "", " " & min & "'")
End Function
VB:
Function ConvertirDecimalEnDegMin2$(NbDec$, Optional compteur As Byte)
'Retranscrit une valeur décimale en format de TEXTE (qui ne doit pas dépasser 2 décimales après la virgule) en degrés et minutes
'- NbDec : un nombre décimal où les chiffres avant la virgule représentent les degrés et ceux après la virgule les minutes
' Ex : 42,75 <=> 42° 75'
'- 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 : compteur omis : 42,75 --> 42° 75'
' compteur stipulé : + 42° 75' | - 42° 75'
'Magic_Doctor
Dim verif As Boolean, deg%, min As Byte, largo As Byte, pos As Byte
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
ConvertirDecimalEnDegMin2 = deg & "°" & IIf(min = 0, "", " " & min & "'")
Else
ConvertirDecimalEnDegMin2 = IIf(compt(compteur) = 1, "+ ", "- ") & deg & "°" & IIf(min = 0, "", " " & min & "'")
End If
End Function
Le problème, je pense, doit être dans le "IsMissing".
Merci d'avance pour une explication.
Dernière édition: