il récupère les informations existantes dans le cartouche et permet les mise à jour de celui-ci sans devoir faire tous à la main. Cela fonctionne très bien mais si il n’y a qu’un seule planche.
Mon problème réside dans la duplication de ces informations sur une éventuelle 2éme, 3éme etc… planche éventuelle. Sachant que du coup les notes du fond de plan qui sont mise à jour sur la planche 1, n’auront pas le même nom sur les planche ajoutées.
Si quelqu’un à une idée de comment faire je suis preneur.
C’est une volonté de ne pas avoir les mêmes noms d’une page à l’autre?
Si ce n’est pas le cas, le plus simple est d’avoir des propriétés liées à ces notes et ainsi on ne met à jour que les propriétés et ça se déploi tout seul sur les autres folios
non du tous c’est un constat. En ajoutant une nouvelle planche dans la MEP, les nouvelles notes n’ont pas le même nom. elle se nomme « Objet de détail1137@Fond de plan1 » mais sur la nouvelle planche c’est « Objet de détail1137@Fond de plan3 » le nom de la feuille change. et je n’ai pas réussi à gérer ce paramètres.
Effectivement lié à une propriété serait effectivement plus simple.
Alors déjà dans un premier temps il faut créer des templates de fond de plan et de mise en plan.
Une fois que c’est fait, les notes du fond de plan qui doivent être liées à la mise en plan en elle-même doivent être écrite de cette façon : §PRP:xxxx (xxxx étant le nom de la propriété)
Avoir exactement les mêmes fond de plan et notes dans tous les formats de page (du A4 au A0 par exemple) ainsi ça simplifie grandement la macro.
Vous auriez également pu faire ça dans l’éditeur de formulaire de propriété plutôt que par une macro je pense.
Oui faut passer par « Editer le texte dans la fenêtre » ou tout simplement en faisant un double clique dans la note pour l’éditer (comme une note basique).
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.DrawingDoc
Dim config As SldWorks.Configuration
Dim swCustProp As SldWorks.CustomPropertyManager
Dim lRetVal As Long
Dim vPropNames As Variant
Dim vPropTypes As Variant
Dim vPropValues As Variant
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim linkToProp As Boolean
Dim resolved As Variant
Dim linkProp As Variant
Dim nNbrProps As Long
Dim j As Long
Dim custPropType As Long
Dim bRet As Boolean
Sub mainTest()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set config = swModel.GetActiveConfiguration
’ Set cusPropMgr = config.CustomPropertyManager
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Il n’y a pas de configuration dans les mises en plans.
En gros le code serait celui-ci (j’ai prémâché le job en mettant une boucle de traitement pour l’application des modifications)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim swDraw As SldWorks.DrawingDoc
Dim bRet As Boolean
Dim iAddProp As Integer
Dim lretVal As Long
Dim sProp(11) As String
Sub Tableprop()
sProp(0) = "REV1": sProp(1) = "DATE1": sProp(2) = "NOM1": sProp(3) = "MODIF1"
sProp(4) = "REV2": sProp(5) = "DATE2": sProp(6) = "NOM2": sProp(7) = "MODIF2"
sProp(8) = "REV3": sProp(9) = "DATE3": sProp(10) = "NOM3": sProp(11) = "MODIF3"
End Sub
Sub mainTest()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Set2(sProp(i), "yyy")
End If
Next i
End Sub
Faut ajouter du traitement pour récupérer les données du formulaire dans une variable tableau et gérer tous les cas possibles (champs vide, vérification d’un champ déjà mis à jour avec la même valeur…)
Le « yyy » serait par conséquent à remplacer par la variable tableau qui récupère les résultats.
Merci @Cyril.f pour ton aide précieuse, après un peu de recherche et d’obstination j’ai réussit à faire fonctionner le code complet.
je met ci-dessous la partie le code qui met à jour la MEP et récupérer les informations existante dans la MEP.
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim swDraw As SldWorks.DrawingDoc
Dim bRet As Boolean
Dim iAddProp As Integer
Dim lretVal As Long
Dim sProp(11) As String
Dim ValeursUsF(11) As String
Sub Tableprop()
sProp(0) = "REV1": sProp(1) = "DATE1": sProp(2) = "NOM1": sProp(3) = "MODIF1"
sProp(4) = "REV2": sProp(5) = "DATE2": sProp(6) = "NOM2": sProp(7) = "MODIF2"
sProp(8) = "REV3": sProp(9) = "DATE3": sProp(10) = "NOM3": sProp(11) = "MODIF3"
End Sub
Sub MajMEP()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Set2(sProp(i), ValeursUsF(i))
End If
Next i
End Sub
Sub TableValeurTableau()
'Chaque champs du userform
ValeursUsF(0) = TabRev.Bx0.Value: ValeursUsF(1) = TabRev.Bx1.Value: ValeursUsF(2) = TabRev.Bx2.Value: ValeursUsF(3) = TabRev.Bx3.Value
ValeursUsF(4) = TabRev.Bx4.Value: ValeursUsF(5) = TabRev.Bx5.Value: ValeursUsF(6) = TabRev.Bx6.Value: ValeursUsF(7) = TabRev.Bx7.Value
ValeursUsF(8) = TabRev.Bx8.Value: ValeursUsF(9) = TabRev.Bx9.Value: ValeursUsF(10) = TabRev.Bx10.Value: ValeursUsF(11) = TabRev.Bx11.Value
End Sub
Sub RecupValMEP()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
Dim Val As String
Dim resolved As Boolean
Dim Title As String
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Get5(sProp(i), False, ValeursUsF(i), Title, resolved)
End If
Next i
For i = 0 To UBound(ValeursUsF)
TabRev("Bx" & i).Value = ValeursUsF(i)
Next
End Sub
Jolie travail collaboratif.
Et merci pour avoir pensé à joindre la Macro terminée.
Ne reste plus qu’a valider la meilleure réponse, pour clore se sujet.
Pas de soucis pour l’aide.
Par contre je pense qu’il faudrait simplifier le code ou tout du moins l’optimiser.
Le fait d’initialiser dans deux procédures différentes la variable swApp pourrait générer un bug.
S’il n’y a pas de sortie de la procédure principale entre la récupération des valeurs et la mise à jour, toute cette partie de code peut être mise dans la procédure principale:
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
J’ai un peu de mal également à comprendre à quoi sert cette partie du code :
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Get5(sProp(i), False, ValeursUsF(i), Title, resolved)
End If
Next i
Je ne comprend pas bien ce que vous cherchez à faire dans ce bout de code vu que ce n’est pas utilisé par la suite.
effectivement c’est tout à fait optimisable. Je vais essayer de faire ça. merci
La seconde partie me permet de récupérer les valeurs des propriétés, dans le cas d’un plan déjà renseigner, pour les afficher dans mon userform avec la ligne du code qui suit.
For i = 0 To UBound(ValeursUsF)
TabRev("Bx" & i).Value = ValeursUsF(i)
Next
Ce n’est peux être pas la meilleure méthode mais elle a le mérite de fonctionner.