EXCEL et VBA 6.3

xime78

XLDnaute Nouveau
Bonjour tout le monde,

J'ai une petite macro qui a toujours fonctionnée, et qui du jour au lendemain ne marche plus:

'-----------------------------------------------
Public Function ARCOS(angleeee) As Double
'Dim value As Double
If (angleeee = 1) Then
ARCOS = 0
ElseIf (angleeee = -1) Then
ARCOS = 4 * Atn(1) 'PI
Else
ARCOS = 2 * Atn(1) + Atn(-angleeee / Sqr(1 - angleeee * angleeee))
End If
End Function
'-----------------------------------------------


Eh bien du jour au lendemain donc, ça ne fonctionne plus! Et quand "angle=-1", VBA essaye d'exécuter le code à partir du "Else"...

Une idée?? :confused::confused:

Merci
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL et VBA 6.3

Bonsoir


A tout hasard, essaie d'utiliser ce code à la place
Code:
[FONT=Courier New][COLOR=darkblue]Option[/COLOR] [COLOR=darkblue]Explicit[/COLOR]

Global [COLOR=darkblue]Const[/COLOR] pi [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR] = 3.1415926536
Global [COLOR=darkblue]Const[/COLOR] rad [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR] = (pi / 180#)
Global [COLOR=darkblue]Const[/COLOR] deg [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR] = (180# / pi)

[COLOR=darkblue]Public[/COLOR] [COLOR=darkblue]Function[/COLOR] arcos([COLOR=darkblue]ByVal[/COLOR] ar [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR])
    [COLOR=green]' if ar is between -1 AND 1, return the corresponding arccos[/COLOR]
    [COLOR=green]' in radians[/COLOR]
Application.Volatile
    [COLOR=darkblue]If[/COLOR] ar >= 1 [COLOR=darkblue]Then[/COLOR] arcos = 0: Return
    [COLOR=darkblue]If[/COLOR] ar <= -1 [COLOR=darkblue]Then[/COLOR] arcos = pi: Return
    arcos = atan2(ar, Sqr(1 - ar ^ 2))
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Function[/COLOR]
[COLOR=darkblue]Public[/COLOR] [COLOR=darkblue]Function[/COLOR] atan2([COLOR=darkblue]ByVal[/COLOR] xC [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR], [COLOR=darkblue]ByVal[/COLOR] yC [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Double[/COLOR]) [COLOR=darkblue]As[/COLOR] Double
Application.Volatile
    [COLOR=green]' Returns the angle from x clockwise to y, in radians.[/COLOR]
    [COLOR=green]' "xc" is in the x direction, "yc" is in the y direction.[/COLOR]

    [COLOR=darkblue]If[/COLOR] (xC = 0 And yC >= 0) [COLOR=darkblue]Then[/COLOR]
        atan2 = pi / 2
    [COLOR=darkblue]ElseIf[/COLOR] (xC = 0 And yC < 0) [COLOR=darkblue]Then[/COLOR]
        atan2 = 3 * pi / 2
    [COLOR=darkblue]Else[/COLOR]
        atan2 = Atn(Abs(yC / xC))
        [COLOR=darkblue]If[/COLOR] (yC >= 0 And xC > 0) [COLOR=darkblue]Then[/COLOR]
        [COLOR=darkblue]ElseIf[/COLOR] (yC >= 0 And xC < 0) [COLOR=darkblue]Then[/COLOR]
            atan2 = pi - atan2
        [COLOR=darkblue]ElseIf[/COLOR] (yC <= 0 And xC < 0) [COLOR=darkblue]Then[/COLOR]
            atan2 = pi + atan2
        [COLOR=darkblue]ElseIf[/COLOR] (yC <= 0 And xC > 0) [COLOR=darkblue]Then[/COLOR]
            atan2 = 2 * pi - atan2
        [COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
    [COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
End [COLOR=darkblue]Function[/COLOR]
[/FONT]
source du code
 

job75

XLDnaute Barbatruc
Re : EXCEL et VBA 6.3

Bonjour xime78, Staple, le forum,

Chez moi (VBA 6.3 aussi), la fonction marche sans problème.

Elle fait le travail que ferait simplement la fonction intégrée Application.Acos (ACOS dans la feuille de calcul) : elle renvoie l'angle (en radian) dont le cosinus est l'argument Angleeee.

Angleeee doit correspondre à un cosinus, donc il faut que -1 <= Angleeee <=1.

Si par exemple on a Angleeee = 1,00000000000001, la fonction renvoie #VALEUR! (la décimale n'est pas forcément visible...).

Il vaut mieux par ailleurs déclarer Angleeee As Double :

Public Function ARCOS(Angleeee As Double) As Double

ou encore :

Public Function ARCOS#(Angleeee#)

A+
 

Discussions similaires

Réponses
1
Affichages
222

Membres actuellement en ligne

Statistiques des forums

Discussions
312 765
Messages
2 091 892
Membres
105 084
dernier inscrit
lca.pertus