IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

VBA excel solidworks


Sujet :

VBA

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    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)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    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

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    alor le probleme c'est qu'il ne me mets pas en surbrillance l'endroit du probleme...
    je peut meme pas voir l'aide..

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    je lance sous excel mais je pense qu'il n'arrive pas à trouver le lien entre excel et solidworks.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    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)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    en utilisant F8 je peut voir que l'erreur provient de la ligne 52:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retval = Model.Parameter("h@Esquisse1@model exemple 1.Part").Setvalue2(Feuil1.Range("C1").Value, 1)

    . Quand je modifie le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set part = swApp.ActveDoc 
    Set part = swApp.Documents.Add
    il me dit
    Erreur d'exécution '438'
    Propriété ou méthode non gérée par cet objet

    Merci de vos réponse déjà!

  10. #10
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Salut !

    C'est bien ce que je te disais...
    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"

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut
    c'etait exactement sa, sa marche trés bien maintenant!
    merci beaucoup pour l'aide!

    A plus!

Discussions similaires

  1. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo