Parcourir les résultats de recherche VBA dans Catia

Comment itérer correctement sur les éléments (par exemple, des paramètres) trouvés par une recherche VBA (Selection.Search) dans Catia, afin de traiter uniquement les résultats de la sélection et non l’ensemble des éléments du document ?

Lorsqu’une recherche est effectuée via l’objet Selection en VBA Catia, les éléments trouvés sont directement accessibles via cet objet Selection lui-même, qui agit comme une collection des résultats. L’erreur courante est de tenter d’itérer sur la collection parente (par exemple, Part.Parameters) avec un décalage, alors que la Selection contient déjà les éléments filtrés.

Voici la procédure correcte pour parcourir les résultats d’une recherche :

  1. Exécuter la recherche : Utilisez la méthode Search de l’objet Selection pour filtrer les éléments souhaités. Par exemple, pour des paramètres commençant par ‹ AVP_ ›:

    Dim mon3ddoc As PartDocument
    Dim mon3d As Part
    Dim search_param As Selection
    
    Set mon3ddoc = CATIA.ActiveDocument ' Assurez-vous que le document est actif
    Set mon3d = mon3ddoc.Part
    Set search_param = mon3ddoc.Selection
    
    ' Effectue la recherche. Note: 'CATKnowledgeSearch.InternalParameter' inclura les paramètres intrinsèques.
    search_param.Search "(Name=AVP_* & CATKnowledgeSearch.InternalParameter),all"
    
  2. Itérer sur les résultats de la sélection : Une fois la recherche effectuée, l’objet search_param (qui est de type Selection) contient tous les éléments trouvés. Vous pouvez alors itérer directement sur cette collection en utilisant sa propriété Count et la méthode Item(index).

    • Accès à l’élément : search_param.Item(i) retourne un objet SelectedElement. Pour obtenir l’objet réel (par exemple, un Parameter), vous devez accéder à sa propriété Value.
    • Boucle correcte : La boucle doit commencer à 1 et aller jusqu’à search_param.Count.
    Dim param As Parameter
    Dim i As Long
    
    For i = 1 To search_param.Count
        ' Récupère l'objet Parameter réel à partir de l'élément sélectionné
        Set param = search_param.Item(i).Value
        
        ' Traitement du paramètre trouvé
        Dim Valeur As String
        Dim Nom_Param As String
        
        Valeur = param.ValueAsString ' Ou param.Value pour le type natif
        Nom_Param = param.Name
        
        MsgBox Nom_Param & "=" & Valeur
        
        ' ... (Votre code pour exporter ou traiter le paramètre)
        
    Next i
    

Explication de l’erreur initiale :
L’approche initiale qui consistait à utiliser mon3d.Parameters.Item(i) avec un décalage (i = 40) était incorrecte car mon3d.Parameters représente tous les paramètres du document, et non seulement ceux trouvés par la recherche. Le décalage arbitraire était une tentative de contournement pour ignorer les premiers paramètres intrinsèques, mais ne garantissait pas l’accès aux bons éléments ni la robustesse du code.

En utilisant search_param.Item(i).Value, vous accédez directement et précisément aux objets qui correspondent aux critères de votre recherche, sans avoir à gérer manuellement les indices ou les types d’éléments non pertinents.