execution automatique macro si changement de feuille

excelo

XLDnaute Occasionnel
Bonjour,
Voici mon problème:
j'ai un fichier qui se nomme test.xls, qui comporte 3 feuilles, "feuil1", "feuil2" et "feuil3".
Je souhaiterai que lorsque je suis sur la "feuil2" et que je clique sur la "feuil1", la macro "toto" s'exécute automatiquement.
Merci pour votre aide,
Excelo
 

Fred0o

XLDnaute Barbatruc
Re : execution automatique macro si changement de feuille

Bonjour excelo,

Dans le code de "feuil3", tu insères ces instructions :
VB:
Private Sub Worksheet_Activate()
    MaMacro
End Sub

Sub MaMacro()
    .
    .
    Mes instructions
    .
End Sub

Ceci fonctionnera dès que tu selectionneras la feuil3.

A+
 

excelo

XLDnaute Occasionnel
Re : execution automatique macro si changement de feuille

Bonjour Fred0o,
Merci pour ton aide, je viens de paramétrer la macro comme suite à tes instructions et je ne comprends pas ce que j'ai mal fait, si joint le code que j'ai rédigé :

Private Sub Worksheet_Activate()
Application.Run "tri"
End Sub

Sub tri()
Sheets("base de donné salariés").Select
Columns("B:M").Select
Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("E2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal

End Sub

Merci pour votre aide
 

excelo

XLDnaute Occasionnel
Re : execution automatique macro si changement de feuille

Bonjour Charlette63,
j'ai modifié pour voir la macro sans "Application.Run" et ça n'a ne marche pas non plus,
Quelqu'un aurait une idée?
Merci pour votre aide
 

Fred0o

XLDnaute Barbatruc
Re : Re: execution automatique macro si changement de feuille

bonjour excelo, charette,

Voici une modification du code qui fonctionne chez moi :
VB:
Private Sub Worksheet_Activate()
    tri
End Sub

Sub tri()
    Dim sh As Worksheet
    Set sh = Sheets("base de donné salariés")
    sh.Columns("B:M").Sort Key1:=sh.Range("C2"), Order1:=xlAscending, Key2:=sh.Range("E2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
End Sub

En fait, comme on lance la macro à partir de la feuille feuil3, il faut toujours faire référence dans les instructions à la feuille "base de donné salariés" pour la suite des instruction, d'où la variable sh.

A+
 

Fred0o

XLDnaute Barbatruc
Re : Re: execution automatique macro si changement de feuille

re-bonjour,

Pour répondre à la question de charette63,
au passage, je profite de ton post, une petite explication dans la façon d'appeler une macro
voici comment lancer une procedure à partir d'une autre procedure :
Call, instruction


Transfère le contrôle à une procédure Sub, à une procédure Function ou à une procédure de bibliothèque de liaisons dynamiques (DLL).

Syntaxe

[Call] name [argumentlist]

La syntaxe de l'instruction Call comprend les éléments suivants :

Élément Description
Call Facultatif. Mot clé. S'il est indiqué, vous devez placer argumentlist entre parenthèses. Exemple : Call MaProc(0)
Call MyProc(0)
name Nom de la procédure à appeler.
argumentlist Facultatif. Liste, délimitée par des virgules, de variables, tableaux ou expressions à passer à la procédure. La liste argumentlist peut contenir les mots clés ByVal ou ByRef pour décrire comment les arguments sont traités par la procédure appelée. Toutefois, ByVal et ByRef peuvent uniquement être utilisés dans une instruction Call lors de l'appel d'une procédure DLL. Sur Macintosh, ByVal et ByRef peuvent être utilisés dans une instruction Call lors de l'appel d'une ressource de code Macintosh.



Remarques

Il n'est pas obligatoire d'employer le mot clé Call pour appeler une procédure. Toutefois, si vous utilisez ce mot clé dans le cadre de l'appel d'une procédure nécessitant des arguments, l'élément argumentlist doit être placé entre parenthèses. Dans le cas d'une procédure appelée sans le mot clé Call, vous ne devez pas encadrer argumentlist par des parenthèses. Quelle que soit la syntaxe adoptée pour appeler une fonction intrinsèque ou définie par l'utilisateur, la valeur renvoyée par la fonction est perdue.

Pour passer un tableau entier à une procédure, entrez le nom du tableau, suivi de parenthèses vides.

A noter que l'instruction Call est facultative. Si on ne l'utilise pas et que l'instruction appelée contient des arguments, il ne faut pas les placer entre parenthèses.

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : execution automatique macro si changement de feuille

Bonjour le fil, bonjour le forum,

Je n'apporte rien de plus qu problème d'Excelo mais c'est pour répondre à Charette.
Quand dans un composant Feuil ou un composant Userform on veut faire appel à une procédure contenue dans ce même composant le mot clé Call (+ le nom de la procédure) est recommandé même si comme le montre Fred0o Call peut être omis.
Idem si la procédure se trouve dans un module le mot clé Call peut être omis... Mais pour appeler une procédure dans un module, je préfère taper le nom du module suivi d'un point (module1. par exemple) et VBA me propose la liste des procédures contenues dans ce module. Ça évite les fautes de frappe et aussi de confondre deux procédures portant le même nom dans deux modules différents...

[Édition]
Mort de rire Fred0o nos posts se sont croisé...
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson