Tester l'existence d'un jeu de sélection en VBA


En travaillant avec les jeux de sélection en VBA, vous avez peut être déjà rencontré l'erreur suivante :

La méthode "Add" de l'objet "IAcadSelectionSets a échoué"

En fait, le problème c'est que vous essayez de créer un jeu de sélection qui existe déjà. Par exemple, le code suivant provoque une erreur quand il est appelé plus d'une fois dans un dessin :

Sub JeuSelection()    
  ThisDrawing.SelectionSets.Add("JEUSEL1")    
End Sub
    

Au premier appel de la fonction dans un dessin, le jeu de sélection n'existe pas encore. La méthode Add de la collection des jeux de sélection n'a aucune raison d'échouer. Au deuxième appel, par contre, le jeu de sélection existe. La méthode Add provoque une erreur car on ne peut pas créer deux jeux de sélection qui portent le même nom.

Pour éviter cette erreur, il faut tester si le jeu de sélection existe. Ma première approche était d'appeler la méthode Item de la collection de jeux de sélection pour voir si elle renvoyait quelque chose. Le problème est que cette technique elle même provoque une erreur qui interrompt le programme. J'ai donc essayé une autre méthode, qui consiste à parcourir l'ensemble de la collection, et de tester le nom de chaque jeu. Si les noms correspondent, on affecte le jeu de sélection courant. Voici le code correspondant.

Dim JeuSel As AcadSelectionSet 
Dim Temp As AcadSelectionSet
  
For Each Temp In ThisDrawing.SelectionSets
  If Temp.Name = "JEUSEL1" Then Set JeuSel = Temp
Next Temp
    

Ensuite, il suffit de tester la variable JeuSel pour voir si elle contient un objet SelectionSet. Par défaut, les variables objet pointe sur l'objet Nothing, donc on obtient le code suivant :

Sub JeuSelection()
    Dim JeuSel As AcadSelectionSet
    Dim Temp As AcadSelectionSet
    
    For Each Temp In ThisDrawing.SelectionSets
      If Temp.Name = "JEUSEL1" Then Set JeuSel = Temp
    Next Temp
    
    If JeuSel is Nothing Then
      Set JeuSel = ThisDrawing.SelectionSets.Add("JEUSEL1")
      MsgBox "Un jeu de sélection nommé " & JeuSel.Name & _
      " a été ajouté à la collection SelectionSets."
    Else
      MsgBox "Le jeu de sélection " & JeuSel.Name & " existe déjà."
    End If
End Sub
    

Retour aux trucs et astuces