Création de feuille / Rechargement fond de plan: utiliser les blocs existants

Hello les SolidWorkers !

Nous avons un script à l’ouverture des mises en plan (et un bouton de macro pour un lancement manuel) pour recharger le fond de plan sur l’ensemble des feuilles d’une mise en plan.

Le fond de plan comporte 3 blocs (cartouche, règle, repère d’orientation).

Je me suis rendu compte que le script qui utilise les API SetUpSheet* et ReloadTemplate, duplique pour chaque feuille les 3 blocs de la mise en plan.

Alors que l’opération manuelle d’ajout de feuille ou de rechargement de fond de plan sur une feuille existante, le système nous invite à choisir de renommer des nouveaux blocs ou d’utiliser les blocs existants, notre script lui, semble répondre automatiquement oui à cette question :
image

Comment faire pour répondre automatiquement non et ne pas dupliquer les blocs ?
Avec quels API et/ou valeurs de paramètres d’API puis-je obtenir le comportement souhaité ?

Nous avons des plans qui peuvent compter jusqu’à 112 pages ; on se retrouve avec 336 blocs dans l’arbre.

Merci par avance.

Hello Silver_Surfer,
Sans partager ton code, c’est un peu compliqué de trouver :stuck_out_tongue_winking_eye:

Le code en question fait pas mal d’autre choses au niveau Solidworks, SmarTeam et autre qui n’est pas pertinent de partager.
La partie de ce code qui recharge le fond de plan reprend à peu de choses près (paramètres de l’API SetUpSheet) ce qu’on trouve dans l’aide.

Mais voilà le code qui me cause soucis :

Sub main()


Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swDraw                      As SldWorks.DrawingDoc
Dim swSheet                     As SldWorks.Sheet
Dim swView                      As SldWorks.View
Dim vSheetProps                 As Variant

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swSheet = swDraw.GetCurrentSheet
vSheetProps = swSheet.GetProperties

Dim size As String
If vSheetProps(0) = 7 Then
            '7 = A4 Portrait
            templateFormat = "A4.SLDDRT"
            size = "A4"
ElseIf vSheetProps(0) = 8 Then
            '8 = A3 Paysage
            templateFormat = "A3.SLDDRT"
            size = "A3"
ElseIf vSheetProps(0) = 9 Then
            '9 = A2 Paysage
            templateFormat = "A2.SLDDRT"
            size = "A2"
ElseIf vSheetProps(0) = 10 Then
            '10 = A1 Paysage
            templateFormat = "A1.SLDDRT"
            size = "A1"
ElseIf vSheetProps(0) = 11 Then
            '11 = A0 Paysage
            templateFormat = "A0.SLDDRT"
            size = "A0"
End If


boolstatus = swModel.SetupSheet5( _
    swSheet.GetName, _
    vSheetProps(0), _
    vSheetProps(1), _
    vSheetProps(2), _
    vSheetProps(3), _
    True, _
    templateFormat, _
    vSheetProps(5), _
    vSheetProps(6), _
    "Par défaut", _
    True _
)
               
swSheet.ReloadTemplate False
End Sub

Tu ne peux pas avoir ce choix avec l’API.
Si tu veux éviter tous ces blocs dans ton arbre, alors le plus simple est de le supprimer du fond de plan et fixer les esquisses (ou les coter et cacher les cotes).
Sinon tu peux créer un code qui supprime tous les blocs à part ceux de la première feuille, puis les insérer dans les feuilles suivantes. Cette approche collera au comportement que tu souhaite, mais c’est un peu plus de boulot à coder (quoique…)