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

Résolu
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   -
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
essaies avec
dim Uabx as double
.....
Uabx = plageX2.value - plageX1.value
0
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   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.
0
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjout

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


Michel
0
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   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
0
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Je me sens terriblement bête, merci pour tous
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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)
0
zanzib Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
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
0