Problème d'affichage de nom composant

Bonjour,

 

Je viens de 'finir' une macro qui fais un assemblage automatique et qui remplace même un composant a l'intérieur d'un autre composant, deuxième niveau d'assemblage. Une fois l'assemblage fini, tous enregistré mon arborescence affiche les ancien numéro et ne met rien a jour. J'ai même redémarrer mon ordinateur au cas ou ce soit une histoire de cache. Sur l'ordinateur d'un collègue il a le bonne affichage et il y a même les bonnes référence ....

 

Mon assemblage es bon, il n'y a pas de problème sauf au niveau de l'affichage des nom et c'est juste sur mon ordinateur, après l'utilisation de ma macro. Je n'ai plus accès a la fenêtre "référence" a l'ouverture du dit fichier. 

Je suis en train de m'arracher les cheveux sur ce 'petit' problème, je suis peu être trop perfectionniste ....

 

Cordialement, Mandragore.


capture.png

Bonjour,

Tu dois avoir des fichiers temporaires un peu partout, coupe Solidworks puis essaye de faire un nettoyage système à l'aide de Solidworks RX :

Cordialement,

Merci de ta réponse rapide, aucun changement sur mon ordinateur, je rappelle que j'ai arrêter et redémarrer mon ordinateur entre temps, donc logiquement nettoyage de tous les caches.

 

Cordialement,

 

 


capture.png

Bonjour,

Désolé pour la précédente réponse, je n'avais pas vu le point à la fin de la phrase " Mon assemblage es bon, il n'y a pas de problème sauf au niveau de l'affichage des nom et c'est juste sur mon ordinateur, après l'utilisation de ma macro. ".

J'en déduis que cela se produit après utilisation de ta macro mais qu'en est-il si tu charges le nouvel assemblage, ainsi sauvegardé, sur ton poste sans utilisé ta macro. Et qu'en est-il si tu utilises ta macro sur le poste de ton collègue ?

Cordialement,

Je me suis mal exprimer aussi, j'ai utilisé la macro une seul fois. Depuis quand j'ouvre l'assemblage j'ai toujours le même affichage, le fameux 9800 au lieu de F90149800 nom et référence de l'assemblage dans mon F90149900.

 

Je vais essayer d'être plus clair, c'est pas si simple ! Ce matin j'ai lancer la macro.

Assemblage de mes composants 8500, 9800, 8700, 9200 et 9900. Le fichier 85 existe déjà donc je décide de le remplacer, toujours dans le processus de ma macro. Pour finir enregistrement de chacun de mes assemblages.

 

Sur l'ordinateur d'un collègue l'affichage, a l'ouverture du fichier, est correct. Assemblage F90149900 composé de F90149800 et F90149200 .... Vous avez compris le principe. Accès a la table des références de l'ensemble et les noms de fichier sont correct.

 

En revanche sur mon ordinateur quand j'ouvre le fichier F90149900 mon arbre affiche 9800 et 9200 avec a l'intérieur de 9800 le fichier F90148500 (le fichier que j'ai remplacer par un autre durant le processus de la macro).

Impossible d'ouvrir la fenêtre 'référence'  du fichier F90149900 (seulement sur mon ordinateur) 

 

Depuis ce matin j'ai essayer de nettoyer le cache avec Rx, j'ai redémarrer mon ordinateur et je ne sais plus quoi faire :'(

 

A savoir que mes fichier de base, 8500, 8700, 9200, etc. ne comporte aucune pièce et quand j'ouvre le F90149900 tous les fichier pièce sont visible. Donc ce n'ai qu'un problème d'affichage de nom dans l'arborescence sur l'ordinateur lanceur de la macro. 

 

J'ai pas encore essayer la macro sur d'autre poste, je préfère éviter de répandre des problèmes ! J'en répand suffisamment sans faire exprès ;)

 

J'espère avoir était plus claire. Je reste a votre disposition !

 

Cordialement,

Bonjour,

Suite à un petit test j'ai réussi à reproduire une partie du problème. Pour corriger cela, essaye d'ajouter la fonction ReloadOrReplace après chaque enregistrement d'un assemblage, attention à la fonction d'analyse récursive de ton assemblage, voici un exemple :

(EDIT) suppression de l'exemple, quelques problèmes de fonctionnement restants.

Cordialement,

Autre solution, voici un exemple de code fonctionnant chez moi sur un assemblage ayant plus que 2 niveaux, les copies se font bien et ce sans erreurs d'affichage comme tu peux avoir dans l'arbre. Le principe est de sauvegardé l'assemblage fils sous un nouveau nom et  de tout de suite ré-enregistrer son père, en fin de cycle, je ré-enregistre l'assemblage de plus haut niveau, je le ferme puis je le rouvre :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim chemin As String
Dim asmTitle As String
Dim boolstatut As Boolean
Dim lErrors As Long
Dim lWarnings As Long

Sub main()
    Dim swModel As SldWorks.ModelDoc2
    Dim swConfMgr As SldWorks.ConfigurationManager
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    
    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swConfMgr = swModel.ConfigurationManager
    Set swConf = swConfMgr.ActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    
    chemin = "C:\Users\DRO\Desktop\Temp PDF\"
    asmTitle = swModel.GetTitle
    
    If swModel.GetType = SwConst.swDocASSEMBLY Then
        boolstatut = swModel.SaveAs3(chemin & "new-" & asmTitle, 0, 1)
        
        TraverseComponent swRootComp
        
        swModel.ForceRebuild3 True
    
        boolstatut = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, lErrors, lWarnings)
    
        swApp.CloseDoc swModel.GetTitle
        Set swModel = swApp.OpenDoc6(chemin & "new-" & asmTitle, 2, swOpenDocOptions_Silent, "", lErrors, lWarnings)
    End If
End Sub

Sub TraverseComponent(swComp As SldWorks.Component2)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swSelModelFils As SldWorks.ModelDoc2
    Dim swSelModelPere As SldWorks.ModelDoc2
    Dim i As Long
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        Set swSelModelFils = swChildComp.GetModelDoc2
        If swSelModelFils.GetType = 2 Then
            boolstatut = swSelModelFils.SaveAs3(chemin & "new-" & swSelModelFils.GetTitle, 0, 1)
            Set swSelModelPere = swComp.GetModelDoc2
            boolstatut = swSelModelPere.Save3(swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, lErrors, lWarnings)
            TraverseComponent swChildComp
        End If
    Next i
End Sub

Cordialement,

C'est effectivement ce que faisais ma macro au début, enregistrement du fils, puis du père et ainsi de suite en remontant l'arbre de façon 'logique' ça fonctionne sans problème et on obtient les bonnes références et le bonne affichage dans l'arbre.  Mais quand j'ai remplacer un fils par un autre assemblage, le nom des autres assemblage n'était pas mis a jours après enregistrement. C'était juste l'affichage de l'arborescence qui était fausse.

 

Merci d'avoir pris du temps pour essayer de rectifier le problème. Ta macro es sympa pour enregistré tous les composant d'un assemblage a deux niveau sous un nouveau nom ! C'est un bon vieux Pack & Go ;)

 

Quelqu'un a trouver la solution je n'avais pas cocher la case 'mettre a jour les noms des composants lorsque les documents sont remplacés' :

 

Pourquoi faire simple quand on peu faire compliqué =)

 

Par contre je ne comprend pas pourquoi les nom ne se mettent pas a jour a la deuxième ouverture ou le lendemain, après redémarrage de l'ordinateur, un des mystères de SolidWorks surement.