Macro mise en place pour récupérer valeur d'une note

Bonjour
j’ai une mise en plan avec plusieurs pages qui ont le meme fond de plan.
Dans ce fond de plan j’ai une note où on assigne une valeur manuellement, différente pour chaque page.

Dans ma macro je voudrais récupérer la valeur de cette note pour chaque page afin de l’utiliser pour le nom de la page (j’ai déjà la macro pour gérer le nom de page). Je ne sais pas comment faire pour pouvoir récupérer cette valeur sur chaque page …

merci d’avance
Cédric

Bonjour,

Si la note n’est liée à aucune propriété de fichier mais fait partie du modèle de fond de plan, il faut récupérer l’ID de l’objet de la note pour pouvoir traiter des actions de dessus.

1 « J'aime »

Bonjour;

Pour rejoindre @Cyril_f dans son raisonnement, il serait beaucoup plus simple que ces notes soient directement issues d’un propriété du composant mis en plan.
De cette manière elles seront automatiquement mises à jour dans les feuilles, ou utilisables via une macro (qui devient moins nécessaire).

j’étais la tête sous l’eau … Merci pour vos réponses
ce n’est pas possible de lier la note à une propriété de la pièce, c’est une info qu’on remplit manuellement dans la mise en plan

Par contre ça m’intéresse de savoir comment récupérer l’ID de l’objet de note

Bonjour,

Il faut boucler sur toutes les notes et récupérer le contenu de la note pour trouver son numéro et ensuite écrire une ligne de ce type :

if swNote.GetName = "Objet de détailxxx" then ...

Pour la boucle, il faut faire quelque chose de ce type:

    Set swView = swDraw.GetFirstView
    Set swNote = swView.GetFirstNote
    Do While Not swNote Is Nothing
    If swNote.GetText = "xxx" then debug.print swNote.GetName: stop
Set swNote = swNote.GetNext
Set swView = swView.GetNext

3 « J'aime »

merci je vais tester ça !

Voilà j’ai réussi à obtenir ce que je voulais après plusieurs tentatives !
Voici ma macro complète, adaptée à nos besoins : on renomme chaque feuille avec le numéro de feuille, et le numéro de position (qu’on trouve dans la note). Si aucune note ni texte dans la note n’est trouvé, alors on ne change pas le nom de la feuille

Option Explicit


Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim vSheetNames As Variant
    Dim swView As SldWorks.View
    Dim swNote As SldWorks.Note
    Dim i As Long
    Dim pos, feuilleorigin As Long
    Dim FName As Variant
    Dim namesArray As Variant
    Dim noteFound As Boolean

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel

    ' Désactiver l'affichage pour accélérer la macro (mode en arrière-plan)
    swApp.Visible = False

    ' get the list of sheets names
    vSheetNames = swDraw.GetSheetNames
    
    ReDim namesArray(0)
    For i = 0 To UBound(vSheetNames)
        ' increase the array length and add the sheet name to the list
        ReDim Preserve namesArray(UBound(namesArray) + 1) ' increase the array length to put the next value
        namesArray(i) = vSheetNames(i)
        ' temporary rename the sheet to avoid duplicate names (if duplicate, you can not rename)
        Set swSheet = swDraw.Sheet(vSheetNames(i))
        swSheet.SetName (i)
    Next i
    
    ' get the list of sheets names
    vSheetNames = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetNames)
        ' get the original name of the sheet
        FName = namesArray(i)

        ' rename the sheet with the new number and the original part of the name
        Set swSheet = swDraw.Sheet(vSheetNames(i))
        ' activate the sheet to get the current note text
        swDraw.ActivateSheet (vSheetNames(i))
        Set swView = swDraw.GetFirstView ' This is the drawing template

        Set swNote = swView.GetFirstNote
        noteFound = False
        Do While Not swNote Is Nothing
'Debug.Print swNote.GetName
            ' Objet de détail15 = nom de la note qui contient la position
            ' check if the note exists and if it has some text, else do not change the sheet name
            If swNote.GetName = "Objet de détail15" And Trim(swNote.GetText) <> "" Then
                noteFound = True
                Exit Do
            End If
            Set swNote = swNote.GetNext
        Loop
        'swSheet.SetName (i + 1 & Mid(FName, pos))
        If noteFound = True Then
            swSheet.SetName (i + 1 & "-pos" & swNote.GetText)
        Else
            swSheet.SetName (FName)
        End If
    Next i
    
     ' Réactiver l'affichage pour SolidWorks
    swApp.Visible = True
    
    MsgBox "Renumérotation terminée"

End Sub


3 « J'aime »