Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 À propos de Private Sub Worksheet_SelectionChange(ByVal Target As Range)

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 !

Magic_Doctor

XLDnaute Barbatruc
Bonjour,
J’ai plusieurs cellules qui, quand on clique dessus, déclenchent automatiquement une macro paramétrée : ActionCellBouton (x As Byte).
Toutes ces cellules sont nommées : CellBouton1, CellBouton2…
Le « x » de la macro n’est ni plus ni moins que le suffixe numérique du nom de chaque cellule nommée.

Voici ma routine qui marche correctement :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, [CellBouton1]) Is Nothing Then
        ActionCellBouton (1)
    End If
    
    If Not Intersect(Target, [CellBouton2]) Is Nothing Then
        ActionCellBouton (2)
    End If
    
    If Not Intersect(Target, [CellBouton3]) Is Nothing Then
        ActionCellBouton (3)
    End If
    
    If Not Intersect(Target, [CellBouton4]) Is Nothing Then
        ActionCellBouton (4)
    End If

End Sub
Supposons maintenant qu’il y ait, pourquoi pas, 250 cellules nommées selon le même principe. Existerait-il un moyen d’éviter de réécrire à chaque fois :
Code:
If Not Intersect(Target, [CellBouton1]) Is Nothing Then
        ActionCellBouton (1)
End If
Jusqu’à :
Code:
If Not Intersect(Target, [CellBouton250]) Is Nothing Then
        ActionCellBouton (250)
End If
En écrivant un truc du genre :
Code:
If Not Intersect(Target, Range("CellBouton" & x)) Is Nothing Then
       ActionCellBouton (x)
End If

C’est essentiellement par curiosité que je pose la question.
 
Bonjour Magic_Doctor,

A priori ton dernier code va bien, il suffit de faire une boucle :
VB:
For x = 1 To 250
    If Not Intersect(Target, Range("CellBouton" & x)) Is Nothing Then ActionCellBouton x
Next
A+
 
Bonsoir job,

Tu viens de me couper élégamment l'herbe sous les pieds. Inspiré, j'avais rédigé ceci :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim x As Byte

    On Error Resume Next 'sinon problèmes...
    
    If Left(Target.Name.Name, 10) = "CellBouton" Then x = Right(Target.Name.Name, 1)
    
    If Not Intersect(Target, Range("CellBouton" & x)) Is Nothing Then ActionCellBouton (x)
    
End Sub
Ça marche, mais ta solution est plus subtile, donc adoptée !

Merci à toi, et une très bonne fin de soirée estivale (ici on se les pèle !!!).
 
- 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

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
233
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
1
Affichages
322
Réponses
14
Affichages
371
Réponses
4
Affichages
400
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…