Lancer une macro par clic sur une cellule ?

Bonjour,

Peut-on exécuter une macro par un clic sur une cellule ?

Perso, je sais lancer une macro mais pour certains destinataires, un clic sur une cellule serait plus pratique.

J'ai fait une recherche mais rien trouvé en ce sens mais j'ai peut-être mal formulé ma recherche

Cordialement

Tonthon

Bonjour

Un exemple simple

Cordialement

16'207classeur1.zip (6.76 Ko)

Bonjour (enfin re),

Voici le code pour une macro se lancant par double click (car sur un simple click tu risque de la lancer à chaque selection de cellule) , en admettant que cela soit sur la cellule A1 :

le code se met dans le code VBA de la feuille, pas dans un module (click droit sur le nom de la feuille => visualiser le code

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A1")) Is Nothing Then

'macro à mettre

End If

Tu peux aussi bien le faire sur une plage de cellule entière :

If Not Application.Intersect(Target, Range("B2:C4")) Is Nothing Then

'macro à mettre

End If

Par contre après ce devient pas tellement pratique pour écrire dans ces cellules ou alors il faut passer par la zone de saisie de formule en haut. Ou prévoir des cellules ou il n'y a pas besoin de saisie pour lancer les macros.

Cordialement,

edit: Bonjour Amadéus, encore trop rapide comme d'habitude.

Bonjour

Génial ....

Merci pour ce gain de temps.

Ces solutions vont me permettre de continuer à "optimaliser" mon tableur d'adhérents... et me font envie d'en savoir plus quand j'aurai fini celui-ci.

Je pense mettre une zone de cellules dédiés au lancement de macros, si j'ai un souci je reviens vers vous .

Excellente journée à tous

Tonthon

RE

Je sens bien que ces macros via une cellule ouvre des possibilités et vont résoudre pas mal de problèmes sur mon tableur destiné à des 100% non néophyte.

C'est génial, je comprends l'ensemble, le mécanisme mais malgré que cela doit être comme un nez au milieu d'un visage je n'arrive pas à faire ceci =

le code se met dans le code VBA de la feuille, pas dans un module (click droit sur le nom de la feuille => visualiser le code

Je vous joins un tableur reprenant quelques questions et si vous pouviez m'indiquez par un "pas à pas" comment on met ce code...ce click droit sur la feuille excel ou après Alt+F11 ou après Alt+Maj+F11...... et où exactement ????

Sinon, si je peux "dupliquer" le code, je suis "sauvé .cf le tableur

Merci de votre compréhension !

Tonthon

Pour mettre du code dans le code d'une feuille précise , 2 solutions :

Pour le click droit, c'est sur le nom de l'onglet, et tu choisis "visualiser le code" (cf capture d'écran1) et tu colles le code dans la fenêtre vba qui s'ouvre.

Sinon en passant par alt-F11, tu click sur le nom de la feuille dans le sous-menu de gauche dans le projet vba de ton classeur. (cf capture d'écran2), et tu mets le code dans la fenêtre qui s'ouvre.

Dans les 2 cas pour être sur, la fenêtre où tu colle le code doit être nommée ainsi :

Nom du classeur - Feuil X (Code) (cf capture d'écran 3). Ou X est le numéro de la feuille où tu souhaites mettre le code.

Cordialement,

code vba feuille 1 code vba feuille 2 code vba feuille 3

RE

C'est très clair avec tes copies d'écran.....ca vaut mieux qu'un cours

Je revois cela demain.

Juste tu peux me confirmer que pour dupliquer un code, je peux le faire autant de fois que je le veux via "copier le code" puis changer les références du la cellule après ?

Cordialement

Tonthon

Oui bien sur, même un simple copier-coller à la souris marche très bien. Après ce depend de ce que tu veux copier :

Par exemple, dans le code suivant, si la deuxième cellule se trouve sur la même feuille:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then

    'macro à mettre

    End If

End Sub

tu ne copie et recolle que la partie dans le test IF - END IF, que tu colle à l'intérieur de la même macro en changeant la cellule ou la plage ciblée, car elle se déclenche lors du même évènement, c'est juste le traitement en fonction de la cellule qui a été modifiée qui change.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then

    'macro à mettre

    End If

    If Not Application.Intersect(Target, Range("B1")) Is Nothing Then

    'macro à mettre

    End If

End Sub

alors que si tu veux avoir le même traitement sur une autre feuille, il faut tout copier et le coller dans la fenêtre de code vba de l'autre feuille (en changeant la cellule si besoin):

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Not Application.Intersect(Target, Range("C1")) Is Nothing Then

    'macro à mettre

    End If

End Sub

Cordialement,

Re

Grâce à toi, je découvre et comprends un peu le monde VBA et tu es bon pédagogue .

le "End If" me donne plein d'idées.

J'aimerai que les macros se lancent sur une cellule avec un libelle comme Région 1 ; Région 2 etc.....

2 questions :

je crée mes 12 régions puis ensuite je crée les macros puis je les insère sous les "end if" pour ne pas rencontrer les difficultés que tu évoquais ?

C'est la bonne méthode ?

J'ai un post demeuré sans aucune réponse et dont la solution passe peut-être aussi une macro à savoir comment faire pour avoir "cette commande" que l'on trouve souvent en haut à droite dans les tableurs qui permet de sélectionner avec une croix les colonnes que l'on veut afficher ?

J'aurai tendance à croire que cela existe "tout fait" mais je n'ai pas trouvé sinon j'aimerai avoir un code permettant avec un clic de masquer une colonne avec un nouveau clic l'afficher puis avec un autre clic le masquer ....autrement dit une alternative "afficher/masquer"

Cordialement

Tonthon

Question 1 :

Il faudrait savoir ce que tu veux faire plus exactement, car en fonction du but de la macro, le traitement ne sera pas forcement construit pareil ou le code placé au même endroit.

Enfin en gros, si je comprend bien, tu voudrais que lorsqu'il clique sur une cellule avec le nom d'une de tes régions, cela fasse un traitement particuliers en fonctions de la région ? Si oui que veux-tu qu'il se passe exactement ? Dans quelle colonne veux-tu que cela se produise ? etc etc

Question 2 : je verrais si j'ai le temps d'y jeter un coup d'oeil mais je ne promets rien , mais j'y répondrais sur l'autre post histoire que la solution se trouve dans le post qui contient le problème et pas ici.

Cordialement,

RE

J'ai "bossé" sur mon tableur en créant des macros permettant l'affichage d'une seule région....beaucoup de temps passé pour aboutir que je n'ai pas pu "coller" la macro sur une cellule , j'arrive un peu à saturation et ce domaine m'est totalement inconnu.

Après la création d'une dizaine de macros....une idée toute simple avec une seule macro à savoir la macro "va chercher" l'ascenseur du filtre et si dernier pouvait rester "ouvert" le temps de choisir et le tour est joué !

==> mon problème est que la fin de l'enregistrement macro...ferme la fenêtre.

Cela suppose l'introduction d'une pause qui d'après mes recherches s'exprime en secondes....mais s'il y a une astuce pour que la macro s'arrête sur la fenêtre "choix" cela sera parfait !

Tu peux voir cela ? et me mettre le déclenchement sur la cellule ?

Une fois cela réalisé, je tacherai de faire une seconde macro pour copier les adresses mails affichés pour les basculer sur un logiciel de messagerie....et puis je ferai une pause !

Cordialement

Tonthon

Bonjour,

Je sais que cette commande permet de faire une temporisation, mais je suis pas sur du tout que la fenêtre de choix du filtre reste ouverte pendant ce temps et/ou que tu puisses agir dessus, à tester:

dans le bout de code exemple, la temporisation est de 10s :

Application.Wait Now + TimeValue("00:00:10")

Cordialement,

Bonjour,

La fenêtre du filtre se ferme....dommage parce c'est une solution.

Il faudrait avoir par exemple 10 secondes de "neutralisation" puis ouvert le filtre ?

Sauf erreur, l'ouverture du filtre puis tempo ==> sa fermeture

Je suis tenté de lancer un post sur ce point, tu en penses quoi ?

Pour revenir sur le sujet, j'ai découvert par hasard que l'on peut attacher une macro à un objet qui semble plus facile à mettre en oeuvre "région 1" "région 2".....dont la mise en oeuvre est certes "amateur" mais fonctionne bien

En résumé, je te propose de voir s'il existe une solution via "tempo" et ultérieurement l'aspect affichage par région

Cordialement

Tonthon

Bonjour,

Oui pour moi, tu devrais ouvrir un autre sujet et passer celui la en résolu car cela ne concerne plus les mêmes traitements (plus simple pour les recherches sur le forum pour les gens se retrouvant avec un problème similaire).

Concernant la temporisation, la fenêtre de choix du filtre étant une espèce de fenêtre pop-up qui se referme dès que tu click en dehors, que tu mettes la tempo avant ou après ouverture, pour moi je ne pense pas que cela marchera.

Enfin dans tous les cas, ton utilisateur devra aller clicker sur les éléments à afficher pour faire son filtre dans l'ascenseur, donc je ne vois pas trop l'intérêt de faire une macro (avec tempo ou non) qui va remplacer le click sur l'ascenseur du filtre...

Autant faire une macro qui comme pour les colonnes, propose les différents éléments dans un userform, et qui ensuite applique le filtre, et laisser tomber cette histoire avec l'ascenseur et la tempo.

Par contre niveau filtre en vba je ne m'y connais pas du tout, mais certains ici maitrise bien le sujet, donc n'hésites pas à ouvrir un sujet pour cela aussi.

Cordialement,

RE

OK, je clos ce post.

Je reviendrai ici après vu un peu les cours concernant la VBA

et je lance un nouvelle question à propos de voir comment éventuellement laisser "ouvert" l'ascenseur du filtre.

Merci encore pour tout

Cordialement

Tonthon

Rechercher des sujets similaires à "lancer macro clic"