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

Résolu/Fermé
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016
-
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
-
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




A voir également:

2 réponses

Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 261
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
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

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è.
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 261 >
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

essaies avec
dim Uabx as double
.....
Uabx = plageX2.value - plageX1.value
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

Toujours ce problème d'incompatibilité de type...
ci-joint mon fichier .xls, si cela peut vous aidez a comprendre mon probléme.
Feuille1: donnée de type tp, X1,Y1,Z1,X2,Y2,Z2,etc...
Feuille2: pré traitement.
https://www.cjoint.com/c/EIqkDdYXRiu
En tous cas merci pour tous
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Bonjour,

Une méthode pour découvrir pourquoi un calcul ne fonctionne pas est de d'abord déterminer qu'est-ce qu'on tente de faire....

A essayer
msgbox plagex1.value
msgbox plagex2.value
msgbox plagex1
msgbox plagex2
Set Uabx = plageX2 - plageX1


Que contient Plagex2.value ?
est-ce que c'est une valeur, du texte, un type d'objet qui ne s'affiche pas ?
Avant d'essayer de soustraire ou faire une opération mathématique, il faut savoir ce que contient les éléments avant l'opération.

Sinon, on peut faire aussi des test nous même, mais je n'ai pas vraiment la tête à décortiquer tout les calculs.
Un exemple de valeur a entrer pour les inputbox X1 Y1 et autre serait le bienvenue car si j'écris blah blah blah ca ne fera pas un test concluant.
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

Bonjour,
Merci pour tous j'ai pu identifié le problème. Je cherche a faire ces calculs sur 200 à 400 valeurs en même temps pour ensuite ressortir mes valeurs d'angle dans un graphique, mais mes opérations ne fonctionne que pour une valeur à la fois. Pouvez vous me conseillez une autre technique pour pouvoir faire le calcul sur toute les valeurs en même temps, et ainsi pouvoir crée mon graphique?
Pour les exemples vous pouvez trouvé mon fichier .xls contenant la macro et les données en feuille1 sachant que les colonnes B,C,D,E,F,G,,H,I,et J correspondent respectivement aux plages X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3.

fichier .lsx: https://www.cjoint.com/c/EIqkDdYXRiu

Sinon, plage X1:
0.073469408
0.073296979
0.073459662
0.07375174
0.073894337

plage Y1:
-0.225794122
-0.22960867
-0.234042689
-0.238672882
-0.243632093

plageZ1:
2.950000048
2.950000048
2.950000048
2.950000048
2.950000048

plage X2:
0.07309489
0.073450558
0.073914796
0.074351735
0.075220786

plage Y2:
-0.011618197
-0.01566286
-0.020208705
-0.025097234
-0.030479785

plage Z2:
2.840000153
2.839999914
2.840000153
2.839999914
2.850000143

plage X3:
0.075459905
0.075596318
0.075970605
0.07635285
0.076659158

plage Y3:
0.090077534
0.086018652
0.081488609
0.076580308
0.071360283

plage Z3:
2.840000153
2.840000153
2.839999914
2.839999914
2.839999914

Merci pour tous
Cordialement
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 261
Bonjout

Tite demo
Sub essai()
Dim plageX1 As Range
Set plageX1 = Application.InputBox(prompt:="X1", Default:="A1", Type:=8)
plageX1.Select
end sub


Michel
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

Merci, mais je ne comprend pas en quoi cela m'aide, votre démo marche sans le Default:="A1", et ma macro ne fonctionne pas plus avec ce paramètre supplémentaire.
Sinon ma déclaration et mon utilisation de plageX1 m'ont l'air en tous points identique.
Est ce qu'il y aurait une subtilité que je n'aurais pas compris dans votre demo?
Cordialement merci
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Bonjour,

Prendre la ligne de Michel_M
Prendre votre ligne de code,
Les copier-coller cote à cote :

Set plageX1 = Application.InputBox(prompt:="X1", Default:="A1", Type:=8)
Set plageX1 = Application.intputbox(prompt:="X1", Type:=8)

inputbox vs intputbox
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

Je me sens terriblement bête, merci pour tous
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 261
Merci Placagegranby, je finissais par douter! ;o)

mais il est vrai que cette syntaxe est bizarre et en paume + d'un (j'ai trouvé dans un bouquin)
Messages postés
27
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
16 septembre 2016

J'ai une nouvelle question, Sur Set Uabx = plageX2 - plageX1, j'ai une erreur d'incompatibilité de type, est-ce du encore a une faute bete de ma part, ou l'opération est tous simplement impossible entre deux ranges (sachant que je peut avoir des valeurs négatives dans mes deux colonnes. Ou doit-je passer par un tableau ou autre? Merci