Retrouver les objets sélectionnés à l'écran après avoir lancé une macro vba
Je viens de recevoir ce message d'un lecteur de ce blog :
Le but de mon mail est de vous poser une question juste pour avoir une piste de recherche (car je stagne depuis 3 jours ...)
Je cherche a faire une macro dans laquelle je travaillerai sur l'objet actif (sélectionné)
J'ai bien trouvé le bout de code pour selectionner un nouvel objet, mais ce n'est hélas pas ce que je cherche.
Effectivement, c'est pas très marrant, après avoir lancer une macro vba, de devoir resélectionner les objets patiemment sélectionnés avant et qu'on a perdu à cause de la commande lancée.
Il faut utiliser l'option acSelectionSetPrevious pour retrouver les objets sélectionnés auparavant.
L'exemple ci-dessous renvoie le nom de chaque objets AutoCAD sélectionnés avant de lancer une macro vba :
Sub ErreurJeuSelection()
'Déclaration des variables :
Dim sset As AcadSelectionSet 'variable du type "jeu de sélection AutoCAD"
Dim entite As AcadEntity
On Error GoTo gestErr 'Si VBA rencontre une erreur en cours d'exécution, aller au gestionnaire d'erreur
'Creation du jeu de sélection "JeuSel1"
'Si le jeu de sélection "JeuSel1" existe déjà, il y aura une erreur:
'VBA ira sur le gestionnaire d'erreur avant de revenir à la ligne suivante
Set sset = ThisDrawing.SelectionSets.Add("JeuSel")
sset.Select acSelectionSetPrevious 'Voir aussi avec : acSelectionSetLast
For Each entite In sset
MsgBox entite.ObjectName
Next
'Avant de quitter la procédure, on efface l'objet "sset"
Set sset = Nothing
'puis on efface le jeu de sélection de la mémoire :
ThisDrawing.SelectionSets.Item("JeuSel").Delete
'Fin de l'exécution ici :
Exit Sub 'On quitte la procédure
gestErr: 'Ici commence le gestionnaire d'erreurs
If Err.Number = -2145320851 Then 'Si le code d'erreur correspond à celui d'un jeu de sélection déjà existant
ThisDrawing.SelectionSets.Item("JeuSel").Delete 'Alors on efface le jeu de sélection de la mémoire
Set sset = ThisDrawing.SelectionSets.Add("JeuSel") 'Puis on recrée un nouveau jeu de sélection
Resume Next 'Et on repart à la ligne qui suit celle qui a engendré l'erreur
Else 'Sinon
MsgBox Err.Number & " : " & Err.Description 'indiquer le code d'erreur et sa description
Exit Sub 'puis quitter la procédure
End If
End Sub