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 :
-
Exécuter la recherche : Utilisez la méthode
Searchde l’objetSelectionpour 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" -
Itérer sur les résultats de la sélection : Une fois la recherche effectuée, l’objet
search_param(qui est de typeSelection) contient tous les éléments trouvés. Vous pouvez alors itérer directement sur cette collection en utilisant sa propriétéCountet la méthodeItem(index).- Accès à l’élément :
search_param.Item(i)retourne un objetSelectedElement. Pour obtenir l’objet réel (par exemple, unParameter), vous devez accéder à sa propriétéValue. - Boucle correcte : La boucle doit commencer à
1et 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 - Accès à l’élément :
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.