none
Excel-VBA Peut-on affecter une macro à une cellule ? RRS feed

  • Question

  • Bonsoir,

    Je vous remercie pas avance pour toutes les réponses.

    Lorsque je clique sur une cellule, (par exemple A1 qui contient une variable de type chaîne [D1]), il faudrait que cette cellule déclenche une macro (par exemple : Sub Divisions() ) et prenne en compte dans une variable (par exemple : Division) ce que contient la cellule sur laquelle j'ai cliqué et qui a déclenché la macro.

    Cela me permettrait de cliquer sur une autre cellule (par exemple : A2 qui contient une autre variable de type chaîne [D2]), cette cellule déclenche la même macro (Sub Divisions() ), mais avec la variable de la cellule A2.

    De fait cela éviterait que j'écrive les mêmes instructions (90) dans deux macros différentes avec juste deux paramètres qui changent. Une instruction IF Then D1 else D2 endif, me permettrait de faire une seule macro.

    A+

    dimanche 22 janvier 2017 18:38

Réponses

  • Bonjour,

    Tu peux lle faire soit avec un double clic, soit avec un clic droit :

    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        Cancel = True
        'ta macro
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Cancel = True
        'ta macro
    End Sub
    

    "Cancel = True" évite que la cellule se mette en mode édition ou que le menu contextuel s'affiche.

    Daniel

    • Marqué comme réponse Jeff1950 jeudi 26 janvier 2017 15:33
    mercredi 25 janvier 2017 16:58

Toutes les réponses

  • Bonsoir,

    Je ne comprends pas bien le code à mettre dans la macro "Divisions". Sinon, le code suivant s'exécute à chaque fois que tu changes la cellule active :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Division = Target.Value
    End Sub
    

    Dans un module standard, tu mettras :

    Public Division As String
    Sub Divisions()
        'mets ton code ici
    End Sub
    

    Cordialement.

    Daniel

    dimanche 22 janvier 2017 20:05
  • Bonjour,

    Une autre approche serait peut être de créer une fonction personnalisée que vous pourriez utiliser dans une formule.

    L'un des avantages par rapport à la proposition de Daniel (que je salue) c'est de pouvoir l'utiliser sur n'importe quelle feuille du classeur.

    Cordialement,


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users


    lundi 23 janvier 2017 07:55
  • Bonsoir à tous les deux,

    En fait la macro existe déjà.

    Je voudrais juste savoir si il est possible de démarrer une macro depuis une cellule.

    Actuellement, si je clique sur une cellule ayant une donnée (par exemple : celle que je vous ai indiquée dans mon premier courriel "D1") avec le bouton droit de la souris, le menu contextuel ne me permets pas de générer une macro.

    Est-il possible de faire cela ?

    mercredi 25 janvier 2017 15:38
  • Bonjour,

    Tu peux lle faire soit avec un double clic, soit avec un clic droit :

    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        Cancel = True
        'ta macro
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Cancel = True
        'ta macro
    End Sub
    

    "Cancel = True" évite que la cellule se mette en mode édition ou que le menu contextuel s'affiche.

    Daniel

    • Marqué comme réponse Jeff1950 jeudi 26 janvier 2017 15:33
    mercredi 25 janvier 2017 16:58
  • Bonsoir,

    Je te remercie pour ta réponse.

    J'ai continué mes recherches de mon côté et j'ai finalement trouvé qqc d'analogue.

    J'ai fait un Userform avec deux boutons ; le premier avec Division1_click et le second avec Division2_Click que je fais démarrer dans la page d'introduction de mon programme, avec  Divisions.Show, dont voici le code :

    Userform Divisions

    Private Sub Division1_Click()
    Worksheets(F_Cho).Activate
    Range("K6") = "D1"
    Divisions.Hide
    End Sub

    Private Sub Division2_Click()
    Worksheets(F_Cho).Activate
    Range("K6") = "D2"
    Divisions.Hide
    End Sub

    jeudi 26 janvier 2017 15:40