Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 14h12   #1
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
Par défaut VBA excel solidworks

Bonjour à tous,
je vous remercie déjà de prendre le temps de lire mon problème.

je vous explique:

je souhaiterais récupérer dans une feuilles Excel des données d'un objet provenant du logiciel Solidworks.

j'ai déja trouvé une macro VBA me permettant de faire ça mais VBA me trouve une (des) erreur(s).

Je vous copie la macro que j'ai trouvée.
Si vous pouviez me dire s'il y a déjà des éléments aberrants dans la macro, cela m'aiderait.

Je sais que la majorité d'entre vous ne connait pas Solidworks, mais je pense que pour résoudre mon problème, il n'est pas nécessaire de connaitre ce logiciel.

Voilà la macro:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Public swApp, Classeur As Object
Public Occupe As Boolean
Public Massprops As Variant
 
 
Sub macro()
'**************************************
'Lien unidirectionnel Excel->Solidworks
'**************************************
 
'Déclarer les variables
 
Dim swApp As Object
Dim Part As Object
Const swDocPART = 1 ' These definitions are consistent with type names
Const swMaterialPropertyDensity = 7 ' defined in swconst.bas
 
Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc ' Get handle to the active SolidWorks part
 
 
'**********************************************
'MODIFIER LA DENSITE DE LA PIECE
'**********************************************
 
Set xl = GetObject(, "Excel.Application")
Set Xlsh = xl.ActiveSheet
 
 
'Remplacer la valeur de la densité par la valeur inscrite dans la cellule C5
 
Density = Xlsh.Cells(5, 3)
 
'Recalculer la masse avec la nouvelle densité
 
Part.SetUserPreferenceDoubleValue swMaterialPropertyDensity, Density
 
 
'********************************************
'MODIFIER UNE COTE DE LA PIECE
'********************************************
 
Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
 
 
'Remplacer la valeur h de la cote par la valeur de la cellule C1
'Remplacer la valeur L de la cote par la valeur de la cellule C2
'Remplacer la valeur e de la cote par la valeur de la cellule C3
 
 
retval = Model.Parameter("h@Esquisse1@model exemple 1.Part").Setvalue2(Feuil1.Range("C1").Value, 1)
retval = Model.Parameter("L@Esquisse1@model exemple 1.Part").Setvalue2(Feuil1.Range("C2").Value, 1)
retval = Model.Parameter("e@Base-Extrusion@Model exemple 1.Part").Setvalue2(Feuil1.Range("C3").Value, 1)
 
 
'Reconstruire la pièce,vue isométrique et faire un zoom au mieux 
 
 
Model.EditRebuild
Part.ShowNamedView2 "*Isométrique", 7
Part.ViewZoomtofit2
 
'**************************************
'Lien unidirectionnel Solidworks->Excel
'**************************************
 
Set swApp = CreateObject("SldWorks.Application")
Set xlApp = GetObject(, "Excel.Application")
Set Part = swApp.ActiveDoc
Set Xlsh = xlApp.Application.ActiveSheet
 
'**********************************************
'RENVOYER LES PROPRIETES DE LA PIECE DANS EXCEL
'**********************************************
 
Massprops = Model.GetMassProperties
 
'Renvoyer la coordonnée du centre de gravité
'selon l'axe X dans la cellule D7
Range("D7").Value = Massprops(0)
 
'Renvoyer la coordonnée du centre de gravité
'selon l'axe Y dans la cellule D8
Range("D8").Value = Massprops(1)
 
'Renvoyer la coordonnée du centre de gravité
'selon l'axe Z dans la cellule D9
Range("D9").Value = Massprops(2)
 
'Renvoyer le Volume de la pièce
'dans la cellule C11
Range("C11").Value = Massprops(3)
 
'Renvoyer la superficie de la pièce
'dans la cellule C12
Range("C12").Value = Massprops(4)
 
'Renvoyer la masse de la pièce
'dans la cellule C13
Range("C13").Value = Massprops(5)
 
'Renvoyer le Moment d'inertie Lxx: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule G8
Range("G8").Value = Massprops(6)
 
'Renvoyer le Moment d'inertie Lyy: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule H9
Range("H9").Value = Massprops(7)
 
'Renvoyer le Moment d'inertie Lzz: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule I10
Range("I10").Value = Massprops(8)
 
'Renvoyer le Moment d'inertie Lxy et Lyx: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule G9 et H8
Range("G9").Value = Massprops(9)
Range("H8").Value = Massprops(9)
 
'Renvoyer le Moment d'inertie Lxz et Lzx: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule G10 et I8
Range("G10").Value = Massprops(10)
Range("I8").Value = Massprops(10)
 
'Renvoyer le Moment d'inertie Lyz et Lzy: ( grammes * millimètres carrés)
'Pris au centre de gravité dans la cellule H10 et I9
Range("H10").Value = Massprops(11)
Range("I9").Value = Massprops(11)
 
 
End Sub
Merci par avance.

Rémy.
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h21   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 411
Points : 14 411
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

Vu que, comme tu le soulignes très bien, plusieurs d'entre nous ne connaissent pas SolidWorks, il serait très utile que tu détailles les erreurs renvoyées par le VBA, ainsi que les lignes concernées par les erreurs, en précisant si c'est à la saisie du code que tu as des erreurs ou lors de son exécution.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h03   #3
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
merci de la rapidité de ta reponse!

alor pour te repondre l'erreur qu'il me dit au début est:

Erreur d'execution '424':
Objet requis

apres je pense qu'il risque d'y avoir une erreur apres chaques erreur résolut
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h21   #4
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 411
Points : 14 411
Envoyer un message via Skype™ à Pierre Fauconnier
Ca veut dire quoi "Au début"?

Sur quelle ligne bloque-t-il? Elle doit être surlignée (habituellement en jaune).

Donne déjà cette ligne.

De plus, tu instancies un objet de type excel.application... Pourquoi? Dans quel environnement cette macro tourne-t-elle? Si c'est dans Excel, il n'est pas nécessaire d'instancier Excel...

De plus, tu te reconnectes sur les différents objets en cours de macro. Je suppose que tu as mis bouts à bouts différentes macros. Si tout tient dans la même macro, il n'est pas nécessaire d'avoir plusieurs fois les lignes
Code :
1
2
3
4
Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc ' Get handle to the active SolidWorks part 
Set xl = GetObject(, "Excel.Application")
Set Xlsh = xl.ActiveSheet
On pourra voir plus tard comment faire du code plus propre et plus facilement réutilisable par la suite.

Déjà, commence par dire sur quelle ligne ton projet s'arrête.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h37   #5
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
alor le probleme c'est qu'il ne me mets pas en surbrillance l'endroit du probleme...
je peut meme pas voir l'aide..
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h38   #6
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
je lance sous excel mais je pense qu'il n'arrive pas à trouver le lien entre excel et solidworks.
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h41   #7
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 411
Points : 14 411
Envoyer un message via Skype™ à Pierre Fauconnier
Clique dans la procédure puis avance pas à pas avec F8.

Tu pourras identifier la ligne plus facilement.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 06h25   #8
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Attention !
Tu as aussi des erreurs de portée !
Enfin... des erreurs...
Ton public swApp en tête de module, et ton Dim swApp as Object dans la procédure, cela se bouscule au niveau de la lecture de ton code. Tu n'arriveras jamais sur le swApp public tant que tu le définis dans le module !

Tu devrais également ajouter les déclarations suivantes :
Code :
1
2
3
 
Dim xl as Excel.Application
Dim xlSh as Excel.WorkSheet

J'ai peur que ton erreur ne se produise sur la ligne
Code :
1
2
 
Set Part = swApp.ActiveDoc
En effet, la ligne précédente ne fait qu'instancier une nouvelle application SolidWorks. Cela ne signifie pas qu'il y a forcément un document à l'intérieur. Je ne connais pas la bibliothèque SolidWorks, mais tu devrais plutôt avoir un code dans le genre de celui-ci :
Code :
Set Part = swApp.Documents.Add
Mais bon.... peut-être que la récupération de ton appli implique l'existence d'un doc...

En tout état de cause, le code nous parle d'un Model, qui serait une instance d'un objet. Mais je n'ai pas trouvé de ligne d'instanciaition.
C'est la deuxième grande cause probable d'erreur dans ton code.
Il devrait y avoir, à priori, quelque part un dans ton code.
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 09h15   #9
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
en utilisant F8 je peut voir que l'erreur provient de la ligne 52:

Code :
retval = Model.Parameter("h@Esquisse1@model exemple 1.Part").Setvalue2(Feuil1.Range("C1").Value, 1)

. Quand je modifie le
Code :
1
2
set part = swApp.ActveDoc 
Set part = swApp.Documents.Add
il me dit
Citation:
Erreur d'exécution '438'
Propriété ou méthode non gérée par cet objet

Merci de vos réponse déjà!
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h08   #10
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Salut !

C'est bien ce que je te disais...
Citation:
En tout état de cause, le code nous parle d'un Model, qui serait une instance d'un objet. Mais je n'ai pas trouvé de ligne d'instanciaition.
C'est la deuxième grande cause probable d'erreur dans ton code.
Il devrait y avoir, à priori, quelque part un
dans ton code.

Après quelques recherches...
il semblerait (je pense...) que ton "Model" soit ton "Part"
Essaie en remplaçant "Model" par "Part"
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h21   #11
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 0
Points : 0
c'etait exactement sa, sa marche trés bien maintenant!
merci beaucoup pour l'aide!

A plus!
rmill est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h32.


 
 
 
 
Partenaires

Hébergement Web