J’ai un petit soucis concernant la réalisation d’une macro avec laquelle j’espérais utiliser une variable globale définie à la création du fichier pièce.Ma déception fut grande.
Je vous joints une description du problème constaté dans le document attaché. pb macro.pdf (138,3 Ko)
J’ai essayé de biaiser comme avec les courbes paramétrées, en créant préalablement une esquisse dont une cote avait pour valeur la variable globale puis en demandant à la macro de prendre cette cote. J’ai fais choux blanc.
Pourquoi passer par une macro? Moi je fais ça via un formulaire. Je rentre toutes mes cotes et la pièce ce génère et ce modifie en fonction. Je vous mettrai une pièce en exemple quand je serai devant le pc.
Bonsoir ac_cobra _427,
Merci de votre réponse. Je connais bien votre proposition que j’utilise abondement car elle est très pertinente.
Dans mon cas présent, si je souhaite une macro c’est que cela me ferait gagner beaucoup de clics. Je fais de la découpe laser de contre plaqué. J’ai donc un modèle (*.dot) qui comporte une texture contreplaqué et une variable globale représentant l’épaisseur. Je dessine mes pièces pour les envoyer sur la table de découpe au format dxf. Je pourrai me contenter de n’en faire que les esquisses mais pour avoir une vue globale du produit et s’assurer du montage (assemblage, simulation cinétique …) je les modélise en 3D. Cette modélisation repose uniquement sur des extrusions plan milieu.avec comme valeur l’épaisseur, d’où l’intérêt qu’elle soit en tant que variable globale et ainsi accessible aux équations. Si en un clic je pouvais faire ces extrusions ce me serait plus confortable car ça devient rapidement répétitif. Donc j’aimerai avoir une macro avec son icône que je mettrai dans le bandeau des fonctions, et hop clic clic c’est fini.
J’ai sans doute mal compris mais si tu as une variable globale et que sa valeur 4 est en accord avec la valeur d’extrusion, pourquoi une variable globale ??
Si le but est est de pouvoir modifier cette valeur d’épaisseur plus tard, c’est plus rapide de modifier directement la cote avec :
« clic sur l’extrusion dans l’arbre + clic sur la cote + 4 + entrée »,
tandis que pour modifier une variable il faut :
« ouvrir les équations + clic sur la variable + 4 + entrée pour valider la variable + entrée ou clic pour valider et fermer la fenêtre équations ».
Une variable coûte 1 clic de plus que via la cote.
Le problème pour la macro, c’est le fait que l’on ne peut pas lier l’extrusion à la variable épaisseur en dehors d’une fonction de tôlerie.
Peut-être essayer en récupérant la valeur de la dimension d’épaisseur et lui mettre un texte de type « =Epaisseur »
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketch As SldWorks.SketchManager
Dim swFeature As SldWorks.Feature
Dim swDimension As SldWorks.Dimension
Dim userInput As String
Dim newLength As Double
Dim newWidth As Double
Dim newHeight As Double
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Aucune pièce ouverte.", vbExclamation, "Erreur"
Exit Sub
End If
' Demande les nouvelles dimensions
userInput = InputBox("Entrez la longueur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newLength = CDbl(userInput) / 1000 Else Exit Sub
userInput = InputBox("Entrez la largeur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newWidth = CDbl(userInput) / 1000 Else Exit Sub
userInput = InputBox("Entrez la hauteur (en mm) :", "Modification de la pièce")
If IsNumeric(userInput) Then newHeight = CDbl(userInput) / 1000 Else Exit Sub
' Sélection de l'esquisse "Esquisse1"
Set swFeature = swModel.FeatureByName("Esquisse1")
If swFeature Is Nothing Then
MsgBox "L'esquisse 'Esquisse1' n'a pas été trouvée.", vbExclamation, "Erreur"
Exit Sub
End If
swFeature.Select2 False, 0
swModel.EditSketch
' Mise à jour des dimensions
Set swDimension = swModel.Parameter("D1@Esquisse1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newLength
Set swDimension = swModel.Parameter("D2@Esquisse1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newWidth
Set swDimension = swModel.Parameter("D1@Boss.-Extru.1")
If Not swDimension Is Nothing Then swDimension.SystemValue = newHeight
' Validation de l'esquisse et mise à jour
swModel.EditRebuild3
swModel.SetSaveFlag
swModel.EditSketch
MsgBox "Dimensions mises à jour avec succès.", vbInformation, "Succès"
End Sub
Avec la macro jointe, extrusion en deux clics de souris d’une esquisse existante, par plan milieu et épaisseur gérée par une variable globale :
le premier clic pour sélectionner l’esquisse;
le second pour exécuter la macro (si un bouton existe).
La variable globale est définie dans la macro par une constante nommée « Epais ». Elle doit bien sûr exister dans le document de pièce (ou mieux, dans le modèle .PRTDOT). La cote d’épaisseur de l’extrusion fait bien référence à la variable globale.
Remarque : tenter d’utiliser la notation « Epaisseur » génère des erreurs dans le gestionnaire d’équations. Peut-être est-ce un mot réservé pour la tôlerie.
Oui c’est lié à la tôlerie, cependant en fonctionnement « normal » lorsque l’on sélectionne lier à l’épaisseur sur une fonction d’extrusion ça prend tout de même cette variable globale en compte. En revanche pas modifiable, elle n’évolue qu’en paramétrant une fonction de tôlerie.
D’où, je pense, le fait que cette fonction ne soit pas accessible via macro en dehors d’une tôlerie.
Merci à vous tous. Je vais regarder la macro proposée par ac_cobra_427.
Je travaille beaucoup avec les variables globales pilotées par un fichier externe. Ça me permet pour un assemblage comportant N pièces toutes découpées au laser dans un contreplaqué d’épaisseur commune à tous de modifier d’un coup d’un seul tous les enfourchements.
Bonne journée