VBA, Propriété ou méthode non gérée par l'objet
Résolu
zanzib
Messages postés
28
Statut
Membre
-
PlacageGranby Messages postés 402 Statut Membre -
PlacageGranby Messages postés 402 Statut Membre -
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:
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:
- Propriété ou méthode non gérée par cet objet
- Vous devez disposer d'autorisations d'accès en lecture pour afficher les propriétés de cet objet - Guide
- Vente objet occasion entre particulier - Guide
- Objet interdit en cabine ryanair - Guide
- Trouver objet avec photo - Guide
- Mesurer un objet - Guide
2 réponses
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
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
Bonjout
Tite demo
Michel
Tite demo
Sub essai()
Dim plageX1 As Range
Set plageX1 = Application.InputBox(prompt:="X1", Default:="A1", Type:=8)
plageX1.Select
end sub
Michel
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
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
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
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è.
dim Uabx as double
.....
Uabx = plageX2.value - plageX1.value
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
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
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.
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