Macro manipulation de note sur MEP

Bonjour à tous et toutes,

je suis entrain de faire une macro pour ajouter des notes et les mettre à jour selon des données rentrées dans un Userform. Je m’en suit sortit pour l’ajout des notes et leur mise en forme mais pour retrouver des notes existantes sur un plan je sèche.

j’ai tenté d’utiliser l’exemple ici ==> 2020 api - Get Note By Name Example (VBA)

En remplaçant le nom de la note de l’exemple (DetailItem300) par le mien (Annotation219). il ne se passe rien. Sans cette étape je ne peux pas continuer ma macro :frowning:

Est ce que l’une d’entre vous saurez résoudre ce problème?

Merci :slight_smile:

Bonsoir,
Pourriez-vous poster votre code et préciser si la note se trouve dans le fond de plan, si elle est issue d’une propriété…

Bonjour,

En complément, si vous n’avez changé que le nom de l’annotation dans la seconde partie de l’exemple c’est normal que ça ne fonctionne pas.
Typiquement ici, il faut mettre le nom de votre feuille:

DetailItem300@Sheet Format1

Edit: Et après test, SW via la méthode swNote.Getname ne renvoi pas le nom affiché dans les propriétés mais plutôt quelque chose comme « Objet de détailxxx »

Complément, l’annotation dans le fichier d’exemple de SW pour tester la macro s’appelle Annotation11.

Par la macro, l’objet retourné par SwNote.GetName est DetailItem300 (en fait toutes les notes de leur exemple est retourné sous le format DetailItemmxxx)
image
Donc leurs exemple de macro c’est top mais connaître à l’avance le nom de l’annotation est juste impossible.
Le plus simple reste donc le scan des notes et si vous êtes dans des notes « fixes » d’un format de plan à l’autre (cas d’un cartouche par exemple s’ils sont tous issus du même modèle à l’origine) vous pouvez ensuite simplifier le code pour cibler directement les notes voulues.
Pour ma part, j’ai toujours joué avec le scanne des notes et ce n’est pas spécialement plus lent (surtout sur le fond de plan en général il n’y en a pas 250).

Bonjour Cyril.f,

merci pour ces réponses, j’y vois plus clair. Effectivement j’avais omis des détails, les notes sont dans un fond de plan (dans le cartouche), je devrais donc pouvoir cibler les notes concernées…pour le code j’ai copié collé l’exemple en faisant quelques modifs
uniquement.

Pour la méthode « scan » : Avec la première partie du code. il ne se passe rien en changeant le nom

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawing As SldWorks.DrawingDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swNote As SldWorks.Note
Dim swView As SldWorks.View
Dim swSelObj As Object
Dim theCurrentRev As String
Dim foundNote As Boolean
Dim ret As Boolean
Dim descriptionText As String

Const swSelNOTES = 15
Const swDocDRAWING = 3

Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
' Verify that the document is a drawing
If (swModel Is Nothing) Or (swModel.GetType <> swDocDRAWING) Then
    Exit Sub
End If
Set swDrawing = swModel
' Edit the current drawing template
swDrawing.EditTemplate
' This is the template
Set swView = swDrawing.GetFirstView
' This section shows a slower method for
' selecting a note by name by using note
' traversal (swView::GetFirstNote and SwView::GetNext)
' Get the first note object
Set swNote = swView.GetFirstNote

' While you have a valid note
Do While Not swNote Is Nothing
    ' Verify if you have the desired note by checking its name
    ' This can also be done by checking the position or the existing
    ' text string in the note
    If (swNote.GetName = "DetailItem219") Then


        foundNote = True
        theCurrentRev = swNote.GetText
        swApp.SendMsgToUser ("Note found")


    End If
    'Set swNote = swNote.GetNext
    ' Continue until no more notes
Loop

il y a donc un truc que je ne fais pas correctement. Mais quoi?? :thinking:

Bonjour,
Vous êtes sûr que vos annotations sont codifiées DetailItem?
Si votre SW est en français et vos modèles créés sur la version FR, sauf erreur de ma part toutes les annotations sont codifiées Objet de détail.

Non effectivement c’est en FR, bien vue :wink:

Je teste de suite.

Après quelques essais infructueux j’ai réussit.
En fait le nom « Annotation219 », ne sert pas à grand chose en faisant un enregistrement de macro et en sélectionnant la note concernée, j’ai pu connaître son nom (Objet de détail1130@Fond de plan1 en l’occurrence). Du coup, cela fonctionne avec la méthode « ciblée » mais pas le scan…mais pour le coup cela ne me gêne pas.

Maintenant que la note est trouvée, je peux en faire ce que je souhaite. :slight_smile:

Milles merci pour ton aide Cyril.f

:metal:

De rien.
Pour le scan normalement avec juste « Objet de détail1130 » ça doit fonctionner.