Utilisation évènement - Classeur de macro personnel

Bonjour à tous,

J'aurais une question sur l'utilisation des évènements depuis le classeur de macro personnelles. J'aimerais utiliser le code ci-dessous pour pouvoir revenir sur la dernière feuille sélectionnée :

Je mets ce code dans l'onglet dans la partie "ThisWorkbook" de mon classeur de macro perso :

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
LastSheet = Sh.Name
End Sub

Et après j'utilise le module ci-dessous :

Public LastSheet As String
Sub Select_Last()
Application.Sheets(LastSheet).Select
End Sub

Problème, étant donné que l'évènement Workbook_SheetDeactivate est dans mon classeur de macro personnelles, lorsque j'essaie d'utiliser cette fonction sur un fichier Excel ça ne fonctionne pas.

Il y a certainement une solution pour pouvoir l'utiliser sur n'importe quel fichier, mais comment faire ?

Merci par avance et bonne journée à tous :)

Camille

Bonjour,

Je crois plutôt qu'il faudrait mettre ces procédures dans un template (.xltm) et créer vos nouveaux fichiers d'après ce modèle.

Bonjour,

Le problème c'est que les fichiers Excel sont d'ores et déjà créés et qu'il y en a une multitude

Bonsoir Camille1234, Eric Kergresse,

L'évènement ne s'appliquera que dans le classeur de macros personnelles. Il est propre à chaque classeur.

Par contre pour certains classeurs où tu as intérêt à revenir sur la précédente feuille active tu peux utiliser comme ci-dessous.

Ce n'est pas nécessaire d'appliquer à tous les classeurs.

Public LastSheet As String

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Address = "$A$1" Then Application.Sheets(LastSheet).Select
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
LastSheet = Sh.Name
End Sub

Bonjour C Cellus,

Donc je ne peux pas passer par mon classeur de macro perso ? Je dois impérativement mettre le code dans chaque classeur que je souhaite utiliser ?

Bonjour Camille,

C'est possible en passant par un module de classe, mais attention car l'évenement s'appliquera à tous les classeurs, il faudra trouver un moyen pour que cela ne s'applique uniquement à ceux que tu souhaites, personnellement, j'ai pour habitude d'ajouter une propriété personnalisée aux classeurs concernés du type Nom=''Application" et Valeur="MonApp" (par exemple).

Dans le classeur personnel ou dans un classeur AddIn (complément Excel, extension .xlam) :

1-Tu crées un ''module de classe'' en faisant un clic droit sur ton projet.Insersion\Module de classe

2-Tu mets ce code dans le module de classe :

Public WithEvents MonApp As Application

Private Sub MonApp_SheetDeactivate(ByVal Sh As Object)
    MsgBox Sh.Name
End Sub

3-Dans le module événementiel ThisWorkbook du classeur de macro personnel ou xlam, tu mets ce code :

Option Explicit
Dim X As New ClsApplication

Private Sub Workbook_Open()
       Set X.MonApp = Application
End Sub

Dans mon exemple, à chaque fois que tu passeras d'une feuille à l'autre dans n'importe quel classeur, tu auras le "nom de la feuille" que tu quittes dans une MsgBox... Remplace MsgBox par le code que tu souhaites.

Avec le module de classe, tu peux utiliser tous les événements habituels du classeur : ouverture, fermeture, avant sauvegarde, activation désactivation, et aussi la gestion des feuilles, activation désactivation,double clic, clic droit, etc.

Benead

Bonjour à tous,

tu as les événements d'application pour ça.
Si tu modifies la macro il faut relancer le Sub Workbook_Open() pour redéclarer l'Application.
eric

Edit : Benead, je viens de voir que tu utilises aussi les événement Application.
Que tu parles de module de classe m'a trompé (pour moi ce n'est pas nécessaire) et je n'avais pas lu la suite...
PS2 : le classeur de la feuille c'est LastSheet.Parent.Name (LastSheet As WorkSheet chez moi)

Eric,

Effectivement, mais le résultat est bien le même ? Si oui, pour moi c'est le principal.

Part contre, j'essairai d'y penser la prochaine fois. Il y a tellement longtemps que j'utilise cette solution, je ne suis pas certain qu'à l'époque on pouvait le faire sans le module de classe ou que quelqu'un savait que cétait possible de faire la même chose directement dans le module événementiel de ThisWorkbook.

Benead

Merci à tous pour vos réponses !

Bonne journée,

Camille

Rechercher des sujets similaires à "utilisation evenement classeur macro personnel"