j'ai une macro qui demande une dimension. Je souhaite ouvrir ensuite en automatique ma famille de pièce et actualiser les valeurs avec cette dimension.
Sauriez vous comment ouvrir une famille de pièce et modifier le contenu d'une cellule par une valeur ?
un grand merci. La macro 1 est top pour vérifier que la famille de pièce existe.
J'ai utilisé le code de la macro 2 pour ouvrir la famille de pièce. Le fichier Excell s'ouvre bien, les valeurs indiquées sont correctes mais le 3D n'est pas réactualisé. Il se réactualise si je réouvre la famille de pièce.
Dans le bout de code que tu donne tu récupère la table de l'objet "swModel" mais tu demande une reconstruction sur l'objet "Part", essaye en mettant "swModel.ForceRebuild" à la place de "Part.ForceRebuild".
Pour swDesTable.Detach j'avoue ne pas savoir exactement à quoi ça sert mais dans l'aide : Detaches the design table from the Microsoft Excel sheet.
Dans le cas de l'utilisation demandée je ne pense pas que ce soit nécessaire.
swDesTable.Attach par contre sert à activer la table.
Debug.assert est un point d'arrêt conditionnel si je ne fais pas d'erreur si le booléen bret est faux, la macro s'arrête sur cette ligne (en gros si la table ne s'ouvre pas).
Pour mettre à jour le modèle il faut utiliser swDesTable.UpdateTable 2, True
Merci à tous les 2 pour vos réponses. Ca marche. J'ai encore la l'application excell (j'imagine du fait de la famille de pièce) qui reste ouverte. serait il possible de la fermer et de revenir sur le 3D en fin de macro ? merci d'avance de votre retour
Il doit y avoir autre chose dans la macro qui bloque la fermeture d'Excel. Pour ma part, j'ai bien Excel qui disparait des processus actifs dès que la macro se termine (mais je n'ai qu'un bout de code qui ouvre la table, met à jour une valeur, ferme la table et met à jour le 3D).
Il faudrait le code complet pour voir s'il n'y a pas une autre fonction qui bloque.
'----------------------------------- ' Preconditions: ' 1. Open a part document that contains a design table. ' 2. Verify that the part document contains a design ' table by expanding Tables in the ConfigurationManager. ' 3. Open the Immediate window. ' ' Postconditions: ' 1. Gets whether the design table is updatable before ' running the macro. ' 2. Sets the design table to not updatable if it is ' updatable or vice versa. ' 3. Examine the Immediate window. '----------------------------------- 'Option Explicit 'Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDesignTable As SldWorks.DesignTable Dim boolstatus As Boolean Dim laststate As Variant Dim swDesTable As SldWorks.DesignTable Dim Hauteur As Double
Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDesignTable = swModel.GetDesignTable() ' Allow changes to the characteristics of the ' design table swDesignTable.EditFeature ' Get whether design table is updatable laststate = swDesignTable.Updatable Debug.Print "Design table updatable: " & CStr(laststate) ' If design table is updatable, then set it ' to not updatable or vice versa swDesignTable.Updatable = Not laststate ' Update this characteristic of the design table boolstatus = swDesignTable.UpdateFeature() ' Get whether design table is updatable laststate = swDesignTable.Updatable Debug.Print "Design table updatable: " & CStr(laststate)
Hauteur = InputBox("Merci d'indiquer la Hauteur du convoyeur .... ") 'swModel.GetEquationMgr.Value("Hauteur") = Hauteur Set swDesTable = swModel.GetDesignTable bRet = swDesTable.Attach
'Debug.Assert bRet 'point d'arrêt si la table ne s'ouvre pas, si bret est faux swDesTable.UpdateTable 2, True swDesTable.Detach swModel.ForceRebuild 'pour reconstruire une parte Part.ForceRebuild
Idem pour moi, Excel se ferme bien et disparait de la liste des processus à la fin de la macro mais il y a un petit laps de temps avant que cela ne se fasse, laps de temps qui est plus court en supprimant la dernière ligne "Set swApp = Application.SldWorks" qui ne sert à rien puisque cette variable swApp est déjà définie au début de ta macro.
J'ai déjà remarqué que parfois le processus Excel a du mal à se fermer quand on écrit des macros et que l'on passe souvent en mode debug surtout quand la macro bloque en cours d'éxécution ...
Merci Roger. Aurais tu au moins une astuce pour afficher la fenetre active Solidworks du coup car j'ai cette fichue fenetre Excel qui prend le dessus.... j'aimerai juste au moins finir ma macro en affichant la fenetre Sldworks... merci
Sur le code, je ne vois rien de particulier, pour ma part je n'ai toujours aucune trace d'Excel à la fin de la macro.
Pour remettre SW au premier plan, sauf erreur de ma part c'est
bret = swapp.visible
Après pour le problème en lui-même soit c'est un plantage d'Excel soit c'est un bug de la version de Solidworks.
Est-ce que la famille de pièce est ouverte dans une autre fenêtre ou est-elle bien ouverte dans SW?
Autre solution un peu barbare, c'est les commandes shell pour tuer le processus Excel:
Shell "taskkill /f /im excel.exe", vbHide
Sinon autre idée, ça peut provenir de la mise à jour automatique de la table à l'ouverture, peut-être que SW attend quelque chose en tâche de fond (fenêtre qui aurait basculée en arrière plan) et du coup bloque la fermeture d'Excel.
Il faudrait tester le code avec la désactivation de la mise à jour automatique de la table, de mémoire c'est dans l'un des deux codes de l'aide de ma première réponse.
Bonjour,
déterrage de topic,
je vais tenter d’être claire.
cette macro fonctionne super bien sauf que…
1- je modifie une esquisse
2- j’exécute la macro (qui se déroule bien) mais à l’issu il verrouille toute les cotes des esquisses donc plus possible depuis sw de modifier une valeur.
3- je réexécute la macro et la j’ai de nouveau accès à la modification des esquisses depuis sw.
pour résumer si je lance la macro après modification d’une esquisse je dois la relancer une seconde fois pour pouvoir de nouveau modifier une valeur.
j’ai beau bidouiller je trouve pas pourquoi.
si quelqu’un peux éclairer ma lanterne.
que la force soit avec vous.
Bonjour,
Je ne suis pas sûr d’avoir bien cerné le problème.
J’ai beau être dans une esquisse ou modifier directement en double cliquant sur la fonction, je n’ai aucun verrouillage des cotes.
Par contre comme il y a un force rebuild on se retrouve forcément sorti de l’esquisse.
Bonjour,
voici une vidéo explicative.
j’explique ce qui se passe.
1-on vois que je peux modifier à volonté une valeur.
2-j’execute la macro pour mettre la pièce à jour
3- je souhaites remodifier cette même valeur mais la impossible de modifier
4-je réexécute la macro et la j’ai de nouveau accès en modification.
pourquoi faut il réexécuter la macro pour avoir accès en modif ???
que la force soit avec vous
Bonjour,
Je viens de comprendre.
En fait il faut enlever cette partie du code qui change le comportement de mise à jour de la table.
Set swDesignTable = swModel.GetDesignTable()
' Allow changes to the characteristics of the
' design table
swDesignTable.EditFeature
' Get whether design table is updatable
laststate = swDesignTable.Updatable
Debug.Print "Design table updatable: " & CStr(laststate)
' If design table is updatable, then set it
' to not updatable or vice versa
swDesignTable.Updatable = Not laststate
' Update this characteristic of the design table
boolstatus = swDesignTable.UpdateFeature()
' Get whether design table is updatable
laststate = swDesignTable.Updatable
Debug.Print "Design table updatable: " & CStr(laststate)
Elle bascule de « Permettre la mise à jour de la famille de pièces par les modifications du modèle » à « Interdire les modifications du modèle qui mettraient à jour la famille de pièce ».
Du coup, premier coup elle bascule sur le second mode, au second lancement elle fait l’inverse.