Solidworks api macro acting weird in sheetmetal function

I have a macrofeature that run a code on every rebuilt. Quickly I check if for sheetmetal and assign some property if sheetmetal or not. I So, I loop tree feature and check for the cutlist folder and if its empty then :

1- its an empty folder so sheetmetal have been deleted so I need to delete this folder to clean

2- I m inside the sheetmetal function (the rebuilt run twice, when the function start and when the ok button is clicked) so inside the function in the first run.

 

So, if I try to delete the folder it wont and its what I want but it keeps crashing. So, I use the creation date to check if its 10 seconds from now, if not older then that do not delete...

 

Then, for the second run, I still wont to delete the folder but this time I cannot check the creation time, but since the ok button is pushed, metalsheet feature appears so I check this time for FlatPattern, SolidToSheetMetal or SheetMetal feature.

 

Its working great, except this:

 

If the function takes too much time (I think its when I takes more then the 25 second creation date (I test it and really linked to the dateadd() time...)  but looks not related in the code, it just skip that line...) then those sheetmetal function are not there in the feature loop. Its created like normal but not in the loop...

Pretty weird! Is anyone know the reason of this? Here the code:

 

Function GetCutLists(model As SldWorks.ModelDoc2, boundingBox As Boolean, epaisseurCube As Double, ReturnLength As Variant, DelFolder As Boolean) As Variant
   Dim swCutLists() As SldWorks.Feature
   Dim swFeat As SldWorks.Feature
   Dim swSelMgr As SldWorks.SelectionMgr
   DelFolder = True                       'this boolean tells in other function to delete or not
   Set swSelMgr = model.SelectionManager
   
   boundingBox = True
   
       Set swFeat = model.FirstFeature
       While Not swFeat Is Nothing
           If swFeat.GetTypeName2 = "BoundingBoxProfileFeat" Then boundingBox = True
           If swFeat.GetTypeName2 = "CutListFolder" Then If swFeat.DateCreated > DateAdd("s", -25, Now) Then DelFolder = False 
           If swFeat.GetTypeName2 = "FlatPattern" Or swFeat.GetTypeName2 = "SheetMetal" Or swFeat.GetTypeName2 = "SolidToSheetMetal" Then DelFolder = False
           'MsgBox swFeat.GetTypeName2
           'MsgBox swFeat.Name
           If swFeat.GetTypeName2 = "Extrusion" Or swFeat.GetTypeName2 = "Boss" Then
                       'find length in dimenssion and store value
                        Dim swDispDim As SldWorks.DisplayDimension
                        Set swDispDim = swFeat.GetFirstDisplayDimension
                        While Not swDispDim Is Nothing
                            Dim swDim As SldWorks.Dimension
                            Set swDim = swDispDim.GetDimension2(0)
                            'MsgBox swDim.Name
                            If UCase(swDim.Name) = "LENGTH" Then ReturnLength = swDim.Value
                            If UCase(swDim.Name) = "EPAISSEUR" Then epaisseurCube = swDim.Value
                             Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
                        Wend
                      
                  End If
           
           If swFeat.GetTypeName2 <> "HistoryFolder" Then
          ' MsgBox swFeat.GetTypeName2
               ProcessFeature swFeat, swCutLists
               TraverseSubFeatures swFeat, swCutLists
           End If
           Set swFeat = swFeat.GetNextFeature
       Wend
   GetCutLists = swCutLists
   
End Function