Renommer tous les composants d'un assemblage même ceux inclus dans un sous assemblage

D'accord, 

eh bien je n'ai pas l'option d'afficher le nom du fichier ce qui me parait bizarre...


capture.png

Ca se cache dans "Montrer le nom des composants". Le nom de composant est identique au nom d'enregistrement.

Il faudrait regarder sinon dans les options générale au niveau des références externes si l'option "Mettre à jour les noms des composants lorsque les documents sont remplacés" est bien cochée.

1 « J'aime »

Super cette option des références externes n'était pas cochée :) ! 

Je le test sur plusieurs assemblages depuis ce matin, et j'ai encore une question désolé ^^ 

Es ce qu'il y a des cas ou la fonction rename ne fonctionne pas ? 

Car la j'ai deux pièces qui ne sont pas renommées, pourtant que je passe le programme en pas a pas il passe bien dessus et déclenche la ligne : errorsRename = swModel.Extension.RenameDocument(newName)

Mais ne la renomme pas.. Es ce que vous avez une idée ? 

Bon week end

Bonjour, 

après utilisation intensive de la macro. Je m'apercois que selon la configuration de mes pièces j'ai souvent une erreur car nous avons les deux langues ( default et défaut ). Comment puis passer outre cette erreur et prendre les deux cas en considération ? 

Merci d'avance, 

bonne journée 

Bonjour,

Je n'avais pas vu la première question.

Pour le problème de renommage, il faut regarder ce que retourne la variable ErrorsRename et voir dans l'aide à quoi correspond cette erreur: 

 http://help.solidworks.com/2020/english/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swRenameDocumentError_e.html

Pour le reste, il faut ajouter un contrôle complémentaire comme dans le code ci-dessous:

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As Component2
    Dim i As Long
    Dim swModelChild As SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String
    Dim valout As String

    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Défaut") 'mettre le nom de la configuration comprenant la propriété
        If swCustProp Is Nothing Then
            Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default")
        End If
        If Not swCustProp Is Nothing Then
        status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
        If valout <> "" Then
            newName = NomParent & "-" & "000" & j
            errorsRename = swModel.Extension.RenameDocument(newName)
            swChildComp.Name2 = newName
            Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
            j = j + 1
        End If
        End If
    Next i
End Sub

 

Oui j'y avais pensé mais deja au "set swCust...." comme ile ne trouve pas la configuration il plante et je ne sais pas comment faire. 

Pour la première question, c'est en fait que la pièce existant deja dans l'explorer windows mais n'était pas dans l'assemblage.

Bonjour,

Je pense que ça vient d'autre chose. Personnellement je n'ai aucun problème de fonctionnement même si la configuration n'existe pas.

swCustProp reste vide et par conséquent il n'y a pas de renommage ni quoi que ce soit d'autre de fait sur le fichier concerné.

Est-ce que le code a été intégré en l'état dans votre macro ou a-t-il été modifié pour intégrer à votre code?

Bonjour Cyril, 

je poste tout mon code. J'ai mis deux boucles car si j'ai deja renommé mes pièces cela ne fonctionnait pas donc je les renomme en premier avec un compteur ( 1,2,3,4...) puis je les renomme avec la règle. 

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swRootComp As SldWorks.Component2
Dim Children As Variant
Dim swChild As SldWorks.Component2
Dim SwSelData As SldWorks.SelectData
Dim ChildCount As Long
Dim oldName As String
Dim newName As String
Dim j As Long
Dim h As Long
Dim NomParent As String
Dim errorsRename As Long
Dim status As Boolean
Dim warnings As Long
Dim errorsSave As Long
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim bool As Boolean
Dim val As String
Dim valout As String

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc
NomParent = Left(swModel.GetTitle, 7)
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
j = 1
h = 1
TraverseComponent swRootComp, 1
swModel.ForceRebuild3 True
status = swModel.Save3(swSaveAsOptions_SaveReferenced, errorsSave, warnings)

End Sub


Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As Component2
    Dim swModelChild As SldWorks.ModelDoc2
    Dim swCustProp As CustomPropertyManager
    Dim val As String
    Dim valout As String
    Dim i As Long
    
    Dim status2 As Boolean
    Dim val1 As String
    Dim valout1 As String
    
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Default") 'mettre le nom de la configuration comprenant la propriété
        If Not swCustProp Is Nothing Then
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("QUINCAILLERIE", False, val1, valout1)
            
            If valout <> "" Or valout1 <> "" Then
                newName = h
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & h & " - " & errorsRename
                h = h + 1
            End If
        End If
    Next i
    
        For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        swChildComp.Select4 False, SwSelData, False
        Set swModelChild = swChildComp.GetModelDoc2
        Set swCustProp = swModelChild.Extension.CustomPropertyManager("Défaut") 'mettre le nom de la configuration comprenant la propriété
        If Not swCustProp Is Nothing Then
            status = swCustProp.Get4("SWOODCP_PanelStockLength", False, val, valout)
            status2 = swCustProp.Get4("QUINCAILLERIE", False, val1, valout1)
            
            If valout <> "" Or valout1 <> "" Then
                newName = NomParent & "-000" & j
                If Len(newName) > 12 Then
                    newName = Left(newName, 8) & Right(newName, 4)
                End If
                errorsRename = swModel.Extension.RenameDocument(newName)
                Debug.Print swModelChild.GetTitle & " : " & j & " - " & errorsRename
                j = j + 1
            End If
        End If
    Next i
End Sub

 

Je n'ai pas encore vérifié mais en première approche je pense que le problème provient de la seconde boucle.

La variable swChild est probablement vidée une fois le premier traitement passé.

Bonjour Cyril, 

swChild n'est pas remise a nothing, je ne comprend pas comment elle serait vide.

Bonjour,

Personnellement je n'ai aucun problème avec cette macro. En l'état je ne vois pas ce qui bloque (j'ai des fichiers qui n'ont aucune configuration nommée comme celles ciblées et ça passe à la suite sans problème).

Quel est le message d'erreur remonté?

Bonjour, 

j'ai trouvé une solution avec getactiveconfiguration comme ca je prend toutes les configurations en compte pas de soucis de traduction. 

Bonjour Cyril, 

j'ai encore fais quelques test et j'ai un exemple que je joins dans un fichier ZIP. 

j'ai l'impression qu'il ne passe pas sur tous les fichiers de l'assemblage et je ne comprend vraiment pas pourquoi... Finalement mes vacances n'ont pas servies :D ! 

Merci de votre aide d'avance, 

bonne journée 

Vincent 


1500000-0000.zip
renaming.swp