XL 2021 VBA - Comment détecter la sélection d'une Shape

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,

Quel évènement ou technique utiliser pour détecter qu'une Shape a été sélectionnée.
  1. Worksheet_SelectionChange() ne fonctionne pas (fait toujours référence à une Target Range dans ses paramètres)
  2. Worksheet_BeforeDoubleClick() ne fonctionne pas (fait toujours référence à une Target Range dans ses paramètres) - Impossible de tester TypeOf Selection !
  3. Worksheet_BeforeRightClick() ne fonctionne pas (fait toujours référence à une Target Range dans ses paramètres) - Impossible de tester TypeOf Selection !
 
Solution
Bonsoir.
Les possibilités des Shape sont limitées. La seule exécution que je connaisse c'est celle d'une macro affectée à sa propriété OnAction.
Une même macro peut être affectée à plusieurs Shape et Application.Caller permet de connaitre son nom et donc le Shape concerné. Les Image en OLEObject sont un peu mieux mais moins sophistiquées (.png non supportés)
Bonsoir.
Les possibilités des Shape sont limitées. La seule exécution que je connaisse c'est celle d'une macro affectée à sa propriété OnAction.
Une même macro peut être affectée à plusieurs Shape et Application.Caller permet de connaitre son nom et donc le Shape concerné. Les Image en OLEObject sont un peu mieux mais moins sophistiquées (.png non supportés)
 
Bonjour à tous
Avec le code suivant
Sub SelectionDeQuoi()
Dim objSelection As Object
Set objSelection = Selection
If Not TypeOf objSelection Is Range Then
If objSelection.ShapeRange.Type = msoAutoShape Then
MsgBox "Shape : " & TypeName(objSelection)
Else
MsgBox "Pas Shape : " & TypeName(objSelection)
End If
Else
MsgBox TypeName(objSelection)
End If
End Sub
TypeName a pour valeur Si la sélection est :
une plage : Range
une ou plusieurs formes de même type (par exemple un rectangle) : Rectangle
des formes de type différents) : DrawingObjects
une ou plusieurs images : Picture
...
Je n'ai pas trouvé la valeur de TypeOf Selection pour une Shape, seulement Range
ShapeRange.Type a pour valeur
pour les formes : msoAutoShape (1)
pour les images : msoShapeTypeMixed (2)
...
Et bien sûr Selection.Count si on veut tester si un ou plusieurs objets sont sélectionnés.
 
Dernière édition:
Bonjour,
Le problème, même si on peut déterminer que l'objet sélectionné est bien une Shape avec un Selection.ShapeRange, c'est qu'il n'y a aucun évènement SelectionChange() déclenché lorsqu'on sélectionne une Shape. La seule méthode est le OnAction (rappelé par @Dranreb) qui évidemment implique un clic sur la Shape.
 
Un exemple....
VB:
Sub a()
    Dim ShapeRange As ShapeRange
    Dim Shape As Shape
    Dim i As Integer
    
    On Error Resume Next
    Set ShapeRange = Selection.ShapeRange
    On Error GoTo 0
    
    If ShapeRange Is Nothing Then
        MsgBox "Aucune Shape sélectionnée"
        Exit Sub
    End If
    
    For Each Shape In ShapeRange
        MsgBox Shape.Name
    Next Shape
    
    'Ou encore
    For i = 1 To ShapeRange.Count
        MsgBox ShapeRange(i).Name
    Next i
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
598
Réponses
2
Affichages
363
Réponses
7
Affichages
1 K
Retour