Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Déclenchement d'une macro à partir d'une macro évènementielle

8 réponses
Avatar
JP
Bonsoir,

J'ai dans une feuille une macro =E9v=E8nementielle du genre:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:D33")) Is Nothing Then
Set Feuille =3D ActiveSheet
classement
Feuille.Activate
End If
End Sub

je souhaite d=E9clencher la macro nomm=E9e classement qui est dans un modul=
e avec option private module.

J'ai un message d'erreur au d=E9clenchement de la macro Private Sub... au n=
iveau de la ligne classement.

Pourquoi et que faut-il modifier selon vous?

Merci pour votre aide.

JP

8 réponses

Avatar
GL
Le 14/06/2013 19:04, JP a écrit :
Bonsoir,

J'ai dans une feuille une macro évènementielle du genre:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:D33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub

je souhaite déclencher la macro nommée classement qui est dans un module avec option private module.



l'option Private Module sert à éviter d'insérer les routines
(Sub / Function) dans le /proposeur/ de fonctions (désolé du mot ;-) )

J'ai un message d'erreur au déclenchement de la macro Private Sub... au niveau de la ligne classement.



L'option Private Sub / Private Function rend la routine inaccessible
depuis tout autre module.

Pourquoi et que faut-il modifier selon vous?



Donc à priori, ce qu'il faut modifier c'est Private Sub en Public Sub.

Par contre Private Module restera.

Merci pour votre aide.



Sauf erreur de ma part... ;-)

Bonne journée.
Avatar
JP
Bonsoir GL,

Merci pour les explications.
Je viens de changer Private en Public mais la macro bloque au meme endroit.
Voici en dessous, la modification faite selon ta proposition.

Attendons d'autres voix!!

Cordialement

JP

Public Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:U33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub
Avatar
GL
Le 14/06/2013 20:38, JP a écrit :
Bonsoir GL,

Merci pour les explications.
Je viens de changer Private en Public mais la macro bloque au meme endroit.
Voici en dessous, la modification faite selon ta proposition.

Attendons d'autres voix!!



Non : c'est la procédure Classement qui doit être publique !

Une procédure événementielle est liée à la feuille, donc elle
est toujours privée (il n'y a pas de raison de la déclencher
depuis un autre point que l'événement lié à la feuille elle-même).

Sinon c'est quoi le message d'erreur ?

Public Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:U33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub

Avatar
JP
Je dois mettre Public Sub classement()au lieu Sub classement()?

Le message d'erreur est:
Erreur de compilation. Variable ou procédure attendue, et non un module.

Je viens d'essayer avec Public Sub classement(). Le message d'erreur est le même.

Cordialement

JP
Avatar
GL
Le 14/06/2013 21:40, JP a écrit :
Je dois mettre Public Sub classement()au lieu Sub classement()?

Le message d'erreur est:
Erreur de compilation. Variable ou procédure attendue, et non un module.



Alors cela doit signifier que vous avez un module nommé "classement".

Dans ce cas, s'il y a aussi une routine nommée classement, il faut
appeler : classement.classement

soit: <module>.<routine>

Si la routine classement est déclarée Private vous aurez l'erreur :
Membre de méthode ou de données introuvable.

Ce qui paraît cohérent.

Quoiqu'il en soit, l'Option Private Module est sans effet.


Je viens d'essayer avec Public Sub classement(). Le message d'erreur est le même.

Cordialement

JP

Avatar
JP
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP
Avatar
isabelle
bonjour JP

Application.Run "classement"
ou
Application.Run "Classeur1!classement"

isabelle

Le 2013-06-14 16:44, JP a écrit :
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP

Avatar
isabelle
pour une Function avec arguments

Application.Run "ThisWorkbook.classement", Variable1, Variable2

isabelle

Le 2013-06-15 22:56, isabelle a écrit :
bonjour JP

Application.Run "classement"
ou
Application.Run "Classeur1!classement"

isabelle

Le 2013-06-14 16:44, JP a écrit :
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP