Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

EXCEL et VBA 6.3

  • Initiateur de la discussion Initiateur de la discussion xime78
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

X

xime78

Guest
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?? 😕😕

Merci
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
528
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
460
Réponses
4
Affichages
594
  • Question Question
Microsoft 365 Excel VBA
Réponses
5
Affichages
582
Réponses
2
Affichages
412
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…