Supression impossible

Bonjour,
J’ai une macro fonctionnel à 98% et je sèche un peu pour les 2 % restant.
Cette macro ajoute en automatique des marquages au extrémité des ligne de pliage, sur un calque marquage et en jaune.
Le soucis provient sur certaine pièce lorsque l’on diminue la dimension de la pièce le marquage sort de la pièce.
En relançant la macro elle est censé effacé les lignes de marquage hors de temps en temps (rarement) le marquage ne s’efface pas.
Et un message apparait en mode debug en haut de la fenêtre:
« Aucune de ces entités ne peut être supprimé »


Voici la partie de mon code pour supprimer le marquage:

Sub suppressMarquage()
    Dim swModel                 As Object
    Dim vSkSegArr               As Variant
    Dim vSkSeg                  As Variant
    Dim swSkSeg                 As SldWorks.SketchSegment
    Dim boolstatus              As Boolean
    Dim longstatus              As Long, longwarnings As Long
    Dim Numberline              As Integer
    Dim lNumSegments            As Long
    Dim myModelView             As Object
    
'On supprime le marquage existant
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView.GetNextView


    lNumSegments = swView.GetLineCount2(1)

    If lNumSegments > 0 Then
        Set swSketch = swView.GetSketch
        vSkSegArr = swSketch.GetSketchSegments
        For Each vSkSeg In vSkSegArr
            Set swSkSeg = vSkSeg
            boolstatus = swModel.Extension.SelectByID2(swSkSeg.GetName, "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
            swModel.EditDelete
        Next vSkSeg
    End If
    
'On supprime l'annotation marquage
    Dim bFind                       As Boolean
    Dim swNote                      As SldWorks.Note
    Dim swAnn                       As SldWorks.Annotation
    Dim bret                        As Boolean
    Set swNote = swView.GetFirstNote
    Do While Not swNote Is Nothing
                            bFind = False
                            Debug.Print "Note:" & swNote.GetText
                            If swNote.GetText Like "*Marquage laser*" Then
                                bFind = True
                                Debug.Print "bFind:" & bFind
                                Set swAnn = swNote.GetAnnotation
                                bret = swAnn.Select2(True, 0)
                                Set swNote = swNote.GetNext
                                swModel.EditDelete
                                
                            End If
        If Not bFind Then Set swNote = swNote.GetNext
    Loop
End Sub

Et si besoin un exemple de MEP qui ne fonctionne pas bien (sw 2020)
Si quelqu’un à une piste, je sèche depuis trop longtemps sur le sujet!:grin:
PI_200416-test.SLDPRT (580,9 Ko)
PI_200416-test.SLDDRW (287,8 Ko)

Bonjour,

Essaies de remplacer ça :

    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView.GetNextView

Par ça:

    Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
    Set swView = swDraw.GetFirstView
    Set swView = swView.GetNextView
    boolstatus = swDraw.ActivateView(swView.GetName2)

Edit : Déclarer aussi les variables avec le bon type:

    Dim swModel                 As SldWorks.ModelDoc2
    Dim swDraw                  As SldWorks.DrawingDoc
    Dim swView                  As SldWorks.View

Etc

1 « J'aime »

Pour les variables, elles étaient global d’où l’oubli dans mon code (partiel):
image
Pour le reste cela semble parfaitement fonctionnel effectivement le fait d’activer la vue semble beaucoup mieux!
Merci @Cyril.f .
Pour ma culture et dans le but de mon amélioration continu, comment as tu débuguer stp?

Alors pour le debug j’ai rajouté des debug.print sur le nom de la vue et le nom de l’esquisse pour voir si les sélections étaient bonnes.
Ce qui m’a mis la puce à l’oreille c’est que lors du déroulement en pas à pas il avait tendance à sélectionner la feuille dans l’arborescence au lieu de la vue (probablement lié à cette ligne:

Set myModelView = swModel.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized

En la supprimant ça ne changeait rien, je me suis ensuite rappelé que la fonction swView.GetNExtView n’activait pas la vue d’un point de vue SW donc en l’activant on force la sélection à être au bon niveau (il peut y avoir des lignes en dehors des vues et du fond de plan dans une mise en plan).

2 « J'aime »

Et dire que c’est ce que je conseille en général (ajouter des debug.print), c’est parfois le cordonnier le plus mal chaussé! :rofl: :rofl: :rofl:

Merci pour l’aide et l’explication!

1 « J'aime »