Microsoft 365 lancer une macro en sélectionnant une cellule

MICHAEL

XLDnaute Occasionnel
Bonjour,
Autre question.
Serait il possible d'exécuter une macro a partir d'une cellule sélectionnée,
à la place d'un bouton.
 
Solution
Bonjour Michael,
Serait il possible d'exécuter une macro a partir d'une cellule sélectionnée,
Bien sur.
Un exemple en PJ avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [D4]) Is Nothing Then
        Macro1
    ElseIf Not Intersect(Target, [D6]) Is Nothing Then
        Macro2
    ElseIf Not Intersect(Target, [D8]) Is Nothing Then
        Macro3
    ElseIf Not Intersect(Target, [D10]) Is Nothing Then
        Macro4
    End If
End Sub
Cette macro doit être impérativement dans la feuille concernée.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Michael,
Serait il possible d'exécuter une macro a partir d'une cellule sélectionnée,
Bien sur.
Un exemple en PJ avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [D4]) Is Nothing Then
        Macro1
    ElseIf Not Intersect(Target, [D6]) Is Nothing Then
        Macro2
    ElseIf Not Intersect(Target, [D8]) Is Nothing Then
        Macro3
    ElseIf Not Intersect(Target, [D10]) Is Nothing Then
        Macro4
    End If
End Sub
Cette macro doit être impérativement dans la feuille concernée.
 

Pièces jointes

  • LnacerMacroParClic.xlsm
    13.7 KB · Affichages: 5

MICHAEL

XLDnaute Occasionnel
Bonjour Michael,

Bien sur.
Un exemple en PJ avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [D4]) Is Nothing Then
        Macro1
    ElseIf Not Intersect(Target, [D6]) Is Nothing Then
        Macro2
    ElseIf Not Intersect(Target, [D8]) Is Nothing Then
        Macro3
    ElseIf Not Intersect(Target, [D10]) Is Nothing Then
        Macro4
    End If
End Sub
Cette macro doit être impérativement dans la feuille concernée.
merci de ta réponse.
je vais voir cela un peu plus tard.......
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Vous avez deux macros événementielles très souvent utilisées :
1- On lance la macro quand on clique sur une cellule : Sub Worksheet_SelectionChange
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub ' Ne rien faire si clic sur plusieurs cellules'
    If Not Intersect(Target, Range("A1:B10")) Is Nothing Then ' Lancer macro si cellule dans Range'
               ' Code
    End If
End Sub
2- On lance la macro quand on modifie une valeur dans une cellule : Sub Worksheet_Change
Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub ' Ne rien faire si modification de plusieurs cellules'
    If Not Intersect(Target, Range("A1:B10")) Is Nothing Then ' Macro lancer si cellule modifiée dans le range'
         ' La valeur de la cellule modifiée est dans Target'
         ' Code...
    Endif
End Sub
 

Phil69970

XLDnaute Barbatruc
Bonjour @MICHAEL et Sylvain

Une autre variante si il y a beaucoup de "ifself" a traiter et qui devrait être plus rapide et plus lisible

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ' Ne rien faire si clic sur plusieurs cellules'
Application.EnableEvents = False
Select Case True
    Case Not Intersect(Target, Range("D4")) Is Nothing
        Macro1
    Case Not Intersect(Target, Range("D6")) Is Nothing
        Macro2
    Case Not Intersect(Target, Range("D8")) Is Nothing
        Macro3
    Case Else
        'Macro_XX si besoin
End Select
Application.EnableEvents = True
End Sub

Bien penser à prioriser l'ordre des "Case" du plus probable au moins probable pour optimiser le code au maximum ;)

Bonne lecture
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Phil,
Dans ce cas on peut être encore plus rapide en analysant Target.Address :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub ' Ne rien faire si clic sur plusieurs cellules'
Select Case Target.Address
    Case "$D$4":    Macro1
    Case "$D$6":    Macro2
    Case "$D$8":    Macro3
    Case "$D$10":   Macro4
End Select
End Sub
Mais le but initial était juste de lancer une macro par clic sur cellule, d'où juste une macro simple.
 

Pièces jointes

  • LnacerMacroParClic.xlsm
    14.3 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
312 241
Messages
2 086 526
Membres
103 242
dernier inscrit
Patoshick