VBA, Propriété ou méthode non gérée par l'objet

Résolu/Fermé
zanzib Messages postés 27 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 16 septembre 2016 - 15 sept. 2015 à 13:46
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - 21 sept. 2015 à 14:59
Bonjour, je cherche à faire une macro me calculant l'angle entre 3 points selon des plages de coordonnées fournie par l'utilisateur.
Mais mon intputbox n'a pas l'air de fonctionner (le débogueur me renvoie: Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet). Auriez vous une idée/solution?
Merci d'avance
Ci joint le code:

Sub angle()
Dim plageX1 As Range
Dim plageY1 As Range
Dim plageZ1 As Range
Dim plageX2 As Range
Dim plageY2 As Range
Dim plageZ2 As Range
Dim plageX3 As Range
Dim plageY3 As Range
Dim plageZ3 As Range
Dim CS As Workbook
Dim OS As Worksheet
Dim CD As Workbook
Dim OD As Worksheet

Dim Uabx As Range
Dim Uaby As Range
Dim Uabz As Range
Dim Ubcx As Range
Dim Ubcy As Range
Dim Ubcz As Range
Dim prodsca As Range
Dim Nuab As Range
Dim Nubc As Range
Dim Nabc As Range
Dim Cosabc As Range
Dim angle As Range

Set CS = ThisWorkbook
Set OS = CS.Sheets("Feuille2")
Workbooks.Add
Set CD = ActiveWorkbook
Sheets(Sheets.Count).Name = "CalculAngle"

OS.Activate
Set plageX1 = Application.intputbox(prompt:="X1", Type:=8)
Set plageY1 = Application.intputbox(prompt:="Y1", Type:=8)
Set plageZ1 = Application.intputbox(prompt:="Z1", Type:=8)
Set plageX2 = Application.intputbox(prompt:="X2", Type:=8)
Set plageY2 = Application.intputbox(prompt:="Y2", Type:=8)
Set plageZ2 = Application.intputbox(prompt:="Z2", Type:=8)
Set plageX3 = Application.intputbox(prompt:="X3", Type:=8)
Set plageY3 = Application.intputbox(prompt:="Y3", Type:=8)
Set plageZ3 = Application.intputbox(prompt:="Z3", Type:=8)

'calcul vecteur
Set Uabx = plageX2 - plageX1
Set Uaby = plageY2 - plageY1
Set Uabz = plageZ2 - plageZ1

Set Ubcx = plageX3 - plageX2
Set Ubcy = plageY3 - plageY2
Set Ubcz = plageZ3 - plageZ2

'produit scalaire
Set prodsca = plageX1 * plageX2 * plageX3 + plageY1 * plageY2 * plageY3 + plageZ1 * plageZ2 * plageZ3

'norme
Set Nuab = ((Uabx) ^ 2 + (Uaby) ^ 2 + (Uabz) ^ 2) ^ 1 / 2
Set Nubc = ((Ubcx) ^ 2 + (Ubcy) ^ 2 + (Ubcz) ^ 2) ^ 1 / 2
Set Nabc = ((Uabx + Uabc) ^ 2 + (Uaby + Ubcy) ^ 2 + (Uabz + Ubcz) ^ 2) ^ 1 / 2

'cos
Set Cosabc = prodsca / (Nuab * Nubc)

'youhou un angle
'Set angle = Arccos(Cosabc)

' graph
CD.Activate
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=angle
ActiveChart.Location Where:=xlLocationAsObject, Name:="CalculAngle"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With

End Sub




2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
16 sept. 2015 à 10:56
Re,

Uabx est défini comme range (il faut alors lui donner une adresse: XL ne connait pas les cellules SDF)

si tu cherche une valeur, définiS plutôt Uabx en tant que double ou integer ou long (méfie toi des types "single" dans les calculs) suivant
^m remarque pour les Nu... Ub... cos... etc
2
zanzib Messages postés 27 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 16 septembre 2016
16 sept. 2015 à 11:43
Re,

Toujours ce problème d'incompatibilité de données mon Uabx(double) deviens la soustraction de deux ranges...
Cette macro à pour but de calculé l'angle entre 3 points dans l'espaces selon les plages sélectionné par l'utilisateur. Est-ce vraiment possible de faire des calculs directement sur des plages? Ai-je choisie la bonne solution pour réaliser ces calculs?

Merci pour le temps que vous m'accordè.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > zanzib Messages postés 27 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 16 septembre 2016
16 sept. 2015 à 12:07
essaies avec
dim Uabx as double
.....
Uabx = plageX2.value - plageX1.value
0