Réagir au déplacement de cellule quelque soit la feuille Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
a
astragor
Membre habitué
Membre habitué
Messages : 108
Appréciations reçues : 2
Inscrit le : 26 janvier 2016
Version d'Excel : 2016

Message par astragor » 20 juillet 2017, 15:15

Bonjour le forum.

J'aurais besoin, pour une de mes macros qu'un TBOX de mon formulaire se mette à jour au déplacement de la cellule.

Facile vous allez me dire :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Le problème est que cette procédure est liée à une feuille en particulier.
Ma macro étant et devant rester utilisable sur n'importe quel classeur étant donnée qu'elle est placée dans mon dossier XLSTART. (Ce serait un peu long à vous expliquer pourquoi).
Je suis donc embêté.

A part pour me dire que ce n'est pas possible, quelqu'un a-t-il été confronté au problème et aurait une piste ?
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 20 juillet 2017, 15:36

Bonjour,

Une procédure d'évènement, si elle concerne une feuille doit être dans le module de la feuille, si elle concerne toutes les feuilles ou au moins plusieurs, elle doit être placée dans le module classeur (ThisWorkbook). Il faut y chercher la procédure d'évènement correspondant. Celle que tu indiques est :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Tu y as une variable supplémentaire identifiant la feuille...

Si tu veux couvrir plusieurs classeurs, un évènement niveau classeur ne concernera que le classeur dans lequel elle se trouve !

Il faut donc te situer au niveau Application. Mais il n'y a pas de module d'objet préinstallé pour l'Application, il te faut le créer en utilisant un Module de classe...

Cordialement.
a
astragor
Membre habitué
Membre habitué
Messages : 108
Appréciations reçues : 2
Inscrit le : 26 janvier 2016
Version d'Excel : 2016

Message par astragor » 20 juillet 2017, 17:00

Merci MFerrand

J'ai créé un module de classe et j'y ai mis le code suivant :
Option Explicit
Private WithEvents xlApp As Application

Private Sub xlApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 MsgBox "Ca devrait marcher"
End Sub

Private Sub Class_Initialize()
   Set xlApp = Application
End Sub
Ensuite j'ai créé un module standard dans lequel j'ai mis le code suivant
Option Explicit
Dim ThisApplication As AppEvents

Public Sub Activer_Evenements_Application()
   Set ThisApplication = New AppEvents
End Sub
Lorsque je lance la macro Activer_Evenement_Application j'ai l'erreur suivante qui apparait :

Erreur de compilation : Utilisation incorrecte du mot clé New....

Là je sèche !
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 444
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 20 juillet 2017, 17:35

Je ne vois pas d'erreur dans ce code (et j'en ai retrouvé un que j'avais pour test, j'ai ajouté une SheetSelectionChange avec un message et j'ai bien le message après activation...) ?

Tu as bien renommé le module de classe : AppEvents ?
a
astragor
Membre habitué
Membre habitué
Messages : 108
Appréciations reçues : 2
Inscrit le : 26 janvier 2016
Version d'Excel : 2016

Message par astragor » 20 juillet 2017, 19:03

Quel âne!!! Non j'avais pas nommé mon module de classe AppEvents, :oops:
Du coup ca marche beaucoup mieux comme ça ! :lol:

Merci MFerrand pour le coup de pouce !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message