Lancer une macro depuis un autre onglet

Bonjour tout le monde !

Je souhaiterais exécuter une macro, mais en ayant le bouton sur un onglet différent de l'onglet qui est concerné par la macro.

Par exemple la macro agirait sur l'onglet "Feuil1", mais le bouton pour l'actionner se situerait sur l'onglet "Feuil2".

Est ce que quelqu'un saurait comment faire cela ?

Merci d'avance !

Jeremulus

Bonjour,

"on le fait tout le temps !"

C'est même l'avantage avec le VBA, il n'est pas utile de "sélectionner" les feuilles les cellules sur lesquelles on travaille, il faut juste bien lees définir dans le code :

ActiveSheet = feuille active, si le bouton est sur la feuille 2 et que le code contient ActiveSheet alors les "Range" et autre s'appliqueront sur la feuille 2

Pour maitriser tout ceci dans le code il faut faire référence à la feuille voulue :

vous êtes sur la feuille 2 avec le bouton et vous voulez faire quelque chose sur la cellule B4 de la feuille 1 : alors il faut spécifier à VBA ce que vous voulez faire :

Sheets("Feuille 1").Range("B4").ClearContent

Ici on efface les données de la cellule B4 de la feuille 1 et peut importe où l'on se trouve !

Donc oui c'est possible.

@ bientôt

LouReeD

Bonsoir,

Je plussoie !

VBA est d'autant plus rapide que tu ne voies rien ! c'est donc mieux d'être sur une autre feuille...

Bonjour Jeremulus, le forum,

je te propose ce fichier Excel :

21exo-jeremulus.xlsm (15.16 Ko)

* à l'ouverture du fichier, tu es sur "Feuil1", qui est entièrement vide

* va sur "Feuil2" : entièrement vide aussi, mais y'a : "Bouton 1"

* clique dessus ➯ ça modifie "Feuil1", puis ça va dessus

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me donner ton avis.


[quote="pour ton sujet précédent, tu"]Je vais cette fois ci pouvoir passer le sujet en résolu ! [/quote]

mais tu l'as pas fait ! rappel : il faut cliquer sur le bouton situé près du bouton (dans le coin haut droit du post qui a résolu ton exo) ; tu sauras que tu as réussi quand tu verras un petit rond vert avec une coche, comme ceci :

sujet

tant que c'est pas fait, ceux qui aident sur le forum pensent que ton exo n'est pas réglé, et que tu as autre chose à demander.

lien sur mon post de ton autre sujet, où je viens de t'aider : https://forum.excel-pratique.com/viewtopic.php?p=672708#p672708


pour ce présent sujet, fais pareil, sauf si tu as une autre demande concernant ce sujet.

dhany

Salut Dhany,

Merci beaucoup pour ta réponse.

J'ai malheureusement passé le sujet en résolu un peu trop rapidement ....

Je n'arrive pas à adapter ton code, ou même celui de LouReedD à mon exemple ...

Si tu as un peu de temps pour regarder mon exemple ce serait super

8ajout-colonne.xlsm (17.94 Ko)

Je veux lancer ma macro depuis la feuil1, mais quand je le fais un message d'erreur apparait ...

A bientôt,

Jeremulus

J'ai trouvé mon erreur ! En fait pour que ça fonctionne il faut commencer le code par :

Worksheets("Feuil2").Select

Désolé !

bravo pour avoir trouvé tout seul !

dhany

@Jeremulus

tout à l'heure, quand tu as posté ton message de 14:44, j'allais télécharger le fichier de ton post de 14:30

même si t'as trouvé la solution, j'ai quand même téléchargé ton fichier, pour voir (au cas où)

alors je te propose un petit jeu des « 7 différences » ; regarde le code VBA de ce fichier :

7ajout-colonne.xlsm (17.17 Ko)

rappel : éviter les Select ; le seul que j'ai mis est nécessaire.

dhany

J'ai trouvé mon erreur ! En fait pour que ça fonctionne il faut commencer le code par :

Worksheets("Feuil2").Select

Désolé !

Je vois que tu n'as rien compris aux explications de LouReed...

Alors voici ton code, écrit en VBA cette fois (pas en enregistreur) :

Sub nvl_col()
    With Worksheets("Feuil2")
        .Columns("K").Insert xlShiftToRight
        With .Cells(2, 11)
            .Value = "nouvelle colonne"
            .Font.Color = vbRed
        End With
    End With
End Sub

Tu remarqueras que bien que ta macro soit plutôt courte, celle-ci l'est encore plus. Qu'elle ne comporte aucun Select ou Selection, et qu'un certain nombre d'autres éléments ont disparus, car ce sont des valeurs de paramètres par défaut qu'il est donc inutile de reparamétrer à la valeur qu'ils ont déjà ! Si tu l'exécutes tu constateras que tu n'as pas changé de feuille, comme te l'indiquait LouReed, tu as donné tes directives que VBA exécute sans que tu aies à courir d'une feuille à l'autre.

Et si tu mesures la durée d'exécution, tu pourras constater que ta macro s'exécutait en 31,25 millisecondes, c'est peu certainement mais pour ce qu'elle avait à faire, soit presque rien, c'est déjà beaucoup. Si tu mesures la durée d'exécution de celle-ci, tu constateras que la durée mesurée reste égale à 0 ! Non pas qu'il ne lui faille aucun temps pour réaliser ce qu'elle a à faire, mais cette durée est trop courte pour que l'appareil qui nous sert à mesurer puisse la saisir.

Elle est donc au mininimum de 6 à 10 fois plus rapide que ta macro initiale !

Tant qu'on a quasiment rien à faire, la durée est négligeable, mais dès lors que tu auras à traiter un grand nombre de données, là la différence va devenir plus nettement sensible, et il y aura un moment où tu reviendras vers le Forum pour dire que tu trouves ta macro bien lente et demander si on ne pourrait pas aller un peu plus vite. Et bien, c'est dès le début où l'on se met à coder que l'on doit apprendre à coder d'une façon plus optimale, en dépouillant le code de tout élément inutile et en privilégiant les méthodes les plus rapides, c'est dans chaque détail que l'on va gagner une durée infinitésimale, durées qui cumulées vont produire le résultat souhaité.

Cordialement.

Merci beaucoup à vous deux pour votre aide

Moi j'ai rien fait...

De toutes façons je le sais que je suis transparent ! Comme mon père qui était vitrier !

@ bientôt

LouReeD

Rechercher des sujets similaires à "lancer macro onglet"