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.
 
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
231
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
247
Réponses
1
Affichages
320
Réponses
14
Affichages
370
Réponses
4
Affichages
399
Retour