ArcSinus sous visual basic

  • Initiateur de la discussion yoyo
  • Date de début
Y

yoyo

Guest
Bonjour,
Je souhaite utiliser la fonction mathématique arcsinus dans une macro excel.
La fonction ASIN() d'une feuille de calcul ne fonctionne pas en visual basic.
Y a t'il une solution pour avoir cette fonction dans ma macro?

D'avance merci pour vos réponses.
 

Ti_

Nous a quitté
Repose en paix
2 solutions :
Dans une application Office, passe par Worksheetfunction

Function ASin#(Byval N#)
ASin = WorksheetFunction.ASin(N)
End Function


dans un programme VB, tu peux utiliser cette fonction de W. Stucki:

Function ArcSin(X As Double) As Double
' Inverse du Sinus
If X = 1 Then
ArcSin = PI() / 2
ElseIf X = -1 Then
ArcSin = -PI() / 2
Else
ArcSin = Atn(X / Sqr(-X * X + 1))
End If
End Function
 

xyam

XLDnaute Nouveau
Re : ArcSinus sous visual basic

Bonjour,
Je programme une petite application en VB6 qui doit calculer à partir de 3 points théorique et 3 points réel la différence, y compris la différence d'angle.

Pour cela j'ai besoin de la fonction SINUS INVERSE le problème quand j'utilise la fonction que tu as donner Ti_ c'est qu'il me met le message d'erreur "Tableau attendu".

EDIT: j'ai remplacer "pi()" par "pi = 3.141592654 '358979" maintenant j'ai "Argument ou appel de la fonction incorrect"
Sur la fonction ArcSin = Atn(X / Sqr(-X * X + 1))
je pense que ça viens de l'importation de la librairie "Maths" ?

Extrait du code :
Code:
Private Sub Main()
Dim sinus1 As Double

valeurX1 = (TextreelX1.Text) - (TexttehoriqueX1.Text)
valeurY1 = (TextreelY1.Text) - (TexttehoriqueY1.Text)
sinus1 = (valeurX1) / (valeurY1)
sinus1 = ArcSin(sinus1)
MsgBox (sinus1)


Désolé de déterrer un sujet d'attends de 2006 mais je n'arrive pas à trouver mon bonheur sur la toile...et la je bloque surement sur une problématique très bête mais qui ne me saute pas aux yeux :confused:
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : ArcSinus sous visual basic

Bonjour xyam
Essayez ceci :
Code:
[COLOR=DarkSlateGray][B]Function ASN#(x#)
  If Abs(x) = 1 Then ASN = 2 * Sgn(x) * Atn(1) Else ASN = Atn(x / Sqr(-x * x + 1))
End Function[/B][/COLOR]
ROGER2327
#4702


Dimanche 8 Sable 138 (Conception du Père Ubu (AJ), SS)
18 Frimaire An CCXIX
2010-W49-3T13:12:22Z
 

ROGER2327

XLDnaute Barbatruc
Re : ArcSinus sous visual basic

Suite…
Votre procédure pourrait s'écrire
Code:
[COLOR=DarkSlateGray][B]Private Sub Main()
Dim sinus1#, valeurX1#, valeurY1#
  valeurX1 = CDbl(TextreelX1.Text) - CDbl(TexttehoriqueX1.Text)
  valeurY1 = CDbl(TextreelY1.Text) - CDbl(TexttehoriqueY1.Text)
  sinus1 = valeurX1 / valeurY1
  sinus1 = ASN(sinus1)
  MsgBox sinus1
End Sub[/B][/COLOR]
Mais il y a de nombreuses possibilités de plantage, parmi lesquelles :

  1. Un argument TextreelX1.Text ou TextreelY1.Text n'est pas susceptible d'être converti en nombre.
  2. valeurY1 est nul.
  3. La valeur absolue de valeurX1 / valeurY1 est strictement supérieur à 1.
En sécurisant un peu, on a
Code:
[COLOR=DarkSlateGray][B]Private Sub Main()
Dim sinus1#, valeurX1#, valeurY1#
  On Error Resume Next
  valeurX1 = CDbl(TextreelX1.Text) - CDbl(TexttehoriqueX1.Text)
  valeurY1 = CDbl(TextreelY1.Text) - CDbl(TexttehoriqueY1.Text)
  If Err.Number <> 0 Then MsgBox "Au moins une donnée incorrecte.": Exit Sub
  On Error GoTo 0
  If valeurY1 = 0 Or Abs(valeurY1) > Abs(valeurY1) Then MsgBox "L'arc cherché n'existe pas.": Exit Sub
  sinus1 = valeurX1 / valeurY1
  sinus1 = ASN(sinus1)
  MsgBox sinus1
End Sub[/B][/COLOR]
Il convient évidemment de tester tout cela : en l'absence de support, je n'ai pas pu le faire.
ROGER2327
#4703


Dimanche 8 Sable 138 (Conception du Père Ubu (AJ), SS)
18 Frimaire An CCXIX
2010-W49-3T13:43:47Z
 

ROGER2327

XLDnaute Barbatruc
Re : ArcSinus sous visual basic

Re…
Je te remercie pour le temps passé, je vais tester tous cela,
bonne journée
Je n'ai pas grand mérite, la formule étant (en principe) connue de tout bachelier tant soit peu scientifique et même de l'aide de VisualBasic. Le seul cas un peu sensible est pour les valeurs 1 et -1, où la fonction n'est pas définie (division par zéro) et qui nécessite un test conditionnel pour renvoyer la valeur π/2 ou -π/2 (valeur obtenue ici par 2 * Sgn(x) * Atn(1)).
Bonne soirée,

ROGER2327
#4720


Lundi 9 Sable 138 (Saint Sagouin, homme d'Etat, SQ)
19 Frimaire An CCXIX
2010-W49-4T17:14:46Z
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz