Macro insertion annotation favorites

Bonjour a tous,

Je cherche a insérer une annotation présente dans la bibliothèque de conception solidworks.

je charge en constante les notes de bibliothèque et j'utilise un userform pour la sélection  de la note souhaité

 

Je bloque sur l'insertion de la note , j'ai utilisé la méthode   InsertAnnotationFavorite

Il faudrait que je puisse l'insérer  dans un calque spécifique  : les calques sont créés dans la macro layer

note indice A dans calque indice A

note indice B dans calque indice B

note indice C dans calque indice C

quelqu'un aurait une idée?

Merci d'avance de votre aide

 

Cordialement

 

Yannick

 


note.zip

Bonjour Essaye ca:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAnn As SldWorks.Annotation
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice A.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice A"
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice B.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice B"
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice C.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice C"
swModel.WindowRedraw
End Sub

ou:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAnn As SldWorks.Annotation
Dim NoteNames As Variant
Dim NoteFolder As String
Dim i As Integer
NoteNames = Array("Indice A", "Indice B", "Indice C")
NoteFolder = "C:\monDossierDeNotes\"
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
For i = 0 To 2
    Set swAnn = swModel.Extension.InsertAnnotationFavorite(NoteFolder & NoteNames(i) & ".sldnotestl", 0.2, 0.2, 0)
    swAnn.Layer = NoteNames(i)
Next
swModel.WindowRedraw
End Sub

 

Bonjour Jérome,

merci pour ton retour

J'ai intégré ta macro dans ma boucle. L'insertion de la note ne s'effectue pas.

Quand je parcours la macro, Set swAnn ne charge rien.

If template = "Indice B" Then 

Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\parametre-sw\Blocs\Indice de révision\Indice B.sldnotestl", 0.2, 0.2, 0)
swAnn.layer = "Indice B"
swModel.WindowRedraw

 

Vous tu d'ou cela peut provenir?

Merci d'avance

 

Yannick


insert_indice.swp

swModel n'est pas déclaré en tant que variable globale.
donc malgré être assigné dans Layer(), il est nul dans ChgtComboBox1()
il faut rajouter: Dim swModel as sldworks.modeldoc2 avant main()

En fait il y a plein de variables non déclarées.
Ma suggestion, rajoute : Option Explicit
au tout début de la macro et corrige toutes les erreurs de déclaration.

Aussi déclare Layer() avec: Sub Layer(void)
et appelle le avec: Call Layer(Empty) ou: Layer Empty
Pareil pour ChgtComboBox1()
Ca forcera la macro à ce lancer depuis main()

Merci Jérome, la macro fonctionne parfaitement quand on déclare toutes les variables

Pour mon information que signifie (void) et (empty)?

Merci pour tout.

 

Void => Vide, Empty => Rien

Il est important qu'une macro n'est qu'une seule fonction principale (généralement main() ).

Une fonction est secondaire si elle a un paramètre comme (ByVal swModel As ModelDoc2). Si une fonction est secondaire mais n'a pas besoin de paramètre, la convention est de lui assigner un paramètre vide. (Void)